在 openSSH 上不输入密码执行 SSH 和 SCP
在本文中,我将解释如何在不输入密码的情况下使用 SSH 公钥身份验证在 openSSH 上使用 SSH 代理执行 ssh 和 scp
基于 SSH 密钥的身份验证有两个安全级别。为了让您登录,您需要私钥和密码。即使其中一个被攻破,攻击者仍然无法登录您的帐户,因为他们都需要登录。这比典型的基于密码的身份验证要好得多,如果密码被泄露,攻击者可以访问系统。
有两种方法可以在不输入密码的情况下执行 ssh 和 scp:
- 没有密码。创建密钥对时,请将密码留空。将此选项用于自动批处理。例如,如果您正在运行 cron 作业以在机器之间复制文件,这是合适的选项。
- 使用密码和 SSH 代理。如果您在命令行中以交互方式使用 ssh 和 scp 并且不想在每次执行 ssh 或 scp 时都使用密码,我不建议使用前一个选项(无密码),因为您已经消除了一个级别基于 ssh 密钥的身份验证中的安全性。相反,在创建密钥对时使用密码短语并使用 SSH 代理执行 ssh 和 scp,而无需每次都输入密码,如下面的步骤所述。
以下8个步骤解释了如何在openSSH系统上执行从本地主机到远程主机的SSH和SCP,而无需输入密码
1. 验证 local-host 和 remote-host 是否正在运行 openSSH
[local-host]$ ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2020
[remote-host]$ ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2020
2. 使用 ssh-keygen 在本地主机上生成密钥对
[local-host]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):<Hit enter>
Enter passphrase (empty for no passphrase): <Enter your passphrase here>
Enter same passphrase again:<Enter your passphrase again>
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.
The key fingerprint is:
31:3a:5d:dc:bc:81:81:71:be:31:2b:11:b8:e8:39:a0 tiamo@local-host
公钥和私钥通常存储在您的主目录下的 .ssh 文件夹中。在此示例中,它位于 /home/jsmith/.sshd 下。您不应该与任何人共享私钥。
默认情况下,openSSH 上的 ssh-keygen 生成 RSA 密钥对。您还可以使用以下命令生成 DSA 密钥对:ssh-keygen -t dsa命令。
3. 在远程主机上安装公钥。
从本地主机复制公钥的内容并将其粘贴到远程主机上的 /home/jsmith/.ssh/authorized_keys。如果 /home/jsmith/.ssh/authorized_keys 已经有其他一些公钥,您可以将其附加到它的末尾。如果远程主机上您的主目录下的 .ssh 目录不存在,请创建它。
[remote-host]$ vi ~/.ssh/authorized_keys
ssh-rsa ABIwAAAQEAzRPh9rWfjZ1+7Q369zsBEa7wS1RxzWR jsmith@local-host
简单来说,将local-host:/home/jsmith/.ssh/id_rsa.pub复制到remote-host:/home/jsmith/.ssh/authorized_keys
4. 为远程主机上的 .ssh 目录授予适当的权限。
[remote-host]$ chmod 755 ~/.ssh
[remote-host]$ chmod 644 ~/.ssh/authorized_keys
5.从local-host登录到remote-host,使用SSH key认证,验证是否正常。
[local-host]$ <You are on local-host here>
[local-host]$ ssh -l tiamo remote-host
Enter passphrase for key '/home/tiamo/.ssh/id_rsa': <Enter your passphrase here>
Last login: Sat Jun 07 2020 23:03:04 -0700 from 192.168.1.102
No mail.
[remote-host]$ <You are on remote-host here>
6. 在本地主机上启动 SSH 代理以执行 ssh 和 scp,而无需多次输入密码。
验证 SSH 代理是否已经在运行,如果没有启动,如下所示。
[local-host]$ ps -ef | grep ssh-agent
511 9789 9425 0 00:05 pts/1 00:00:00 grep ssh-agent
[local-host]$ ssh-agent $SHELL
[local-host]$ ps -ef | grep ssh-agent
511 9791 9790 0 00:05 ? 00:00:00 ssh-agent /bin/bash
511 9793 9790 0 00:05 pts/1 00:00:00 grep ssh-agent
7. 将私钥加载到本地主机上的 SSH 代理。
[local-host]$ ssh-add
Enter passphrase for /home/jsmith/.ssh/id_rsa: <Enter your passphrase here>
Identity added: /home/jsmith/.ssh/id_rsa (/home/tiamo/.ssh/id_rsa)
以下是 ssh-add 中可用的不同选项:
- ssh-add <key-file-name>:加载特定的密钥文件。
- ssh-add -l:列出 ssh 代理中加载的所有密钥。
- ssh-add -d <key-file-name>:从 ssh 代理中删除特定的密钥
- ssh-add -D:删除所有密钥
8. 在不输入密码的情况下,从本地主机执行 SSH 或 SCP 到 remote-home。
[local-host]$<You are on local-host here>
[local-host]$ ssh -l tiamo remote-host
Last login: Sat Jun 07 2020 23:03:04 -0700 from 192.168.1.102
No mail.
<ssh did not ask for passphrase this time>
[remote-host]$ <You are on remote-host here>
- 点赞
- 收藏
- 关注作者
评论(0)