Linux实现ssh公钥登录的步骤
【3.5】实现Linux上SSH公钥认证的免密码登录需要按照以下步骤进行,这里以两台Linux主机A和B为例:
步骤1:在本地生成SSH密钥对
在主机A上,打开终端,输入以下命令:
ssh-keygen -t rsa
按照提示,选择生成SSH密钥对的类型(通常选择默认的RSA),然后可以选择是否设置密码(直接回车表示无密码)。
步骤2:将公钥复制到目标主机B
使用以下命令将生成的公钥复制到目标主机B上:
ssh-copy-id username@B
这会要求输入目标主机B的用户密码。输入后,公钥将被复制到B主机的~/.ssh/authorized_keys
文件中。
步骤3:测试SSH连接
尝试使用SSH连接到目标主机B:
ssh username@B
如果一切设置正确,应该可以无密码登录到目标主机B。
验证是否成功:
-
成功情况:
- 执行
ssh username@B
时,应该直接登录到主机B而无需输入密码。 - 如果执行
ssh -v username@B
,可以看到详细的调试信息,其中包括尝试使用公钥进行身份验证。
- 执行
-
失败情况和解决方法:
- 文件权限: 如果
~/.ssh
或~/.ssh/authorized_keys
的权限设置不正确,可能导致身份验证失败。确保这些目录的权限是安全的。chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
- 公钥格式问题: 确保公钥的内容是正确的,没有多余的空格或换行符。
- SSH服务配置问题: 在目标主机B上,确保SSH服务已正确配置允许公钥身份验证。
- 文件权限: 如果
注意事项:
- 在主机A上的
~/.ssh/id_rsa.pub
文件是公钥文件,可以在其中找到复制到目标主机B的公钥。 - 如果使用不同的用户名,确保在命令中替换
username
为目标主机B上的实际用户名。 - 在SSH连接时,可以通过添加
-v
选项查看详细的调试信息,帮助诊断问题。
如果出现问题,根据错误信息进行调试,并根据上述失败情况和解决方法进行修复。
4.0
要在Linux系统中使用SSH公钥实现免密码登录,你需要在本地机器上生成一对密钥,并将公钥复制到远程服务器。以下是具体操作步骤及其命令。
在本地生成密钥对
-
打开一个终端。
-
运行
ssh-keygen
命令来生成新的密钥对。ssh-keygen -t rsa -b 4096
-t rsa
指定了密钥类型为RSA,-b 4096
指定了密钥长度为4096位。 -
系统会提示你输入保存密钥对的文件名(默认为
~/.ssh/id_rsa
)。 -
接着系统会提示你输入密钥的密码短语(passphrase),不希望设置可以直接按回车跳过。
-
成功生成密钥后,你将看到如下信息:
Your identification has been saved in /your/home/directory/.ssh/id_rsa. Your public key has been saved in /your/home/directory/.ssh/id_rsa.pub.
将公钥复制到远程服务器
-
使用
ssh-copy-id
命令将公钥添加到远程服务器的~/.ssh/authorized_keys
文件中。ssh-copy-id user@remote_host
其中,
user
是远程服务器的用户名,remote_host
是远程服务器的地址或主机名。 -
输入远程用户的密码进行认证。
-
成功添加后,你将看到类似以下输出:
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'user@remote_host'" and check to make sure that only the key(s) you wanted were added.
验证免密码登录是否成功
-
现在,尝试使用SSH登录远程服务器,如果一切正常,你应该不需要输入密码:
ssh user@remote_host
-
如果设置了密钥密码短语,第一次使用时可能会被要求输入。
-
登录成功后,你将进入远程服务器的shell。
处理失败的情况
-
Permission Denied:如果收到“权限拒绝”的消息,请检查远程服务器的
~/.ssh/authorized_keys
文件权限是否设置正确(应为600),以及~/.ssh
目录的权限(应为700)。 -
Connection Refused:如果连接被拒绝,请检查远程服务器是否运行着SSH服务,以及你是否使用了正确的端口和IP地址。
-
No such file or directory:如果出现这个错误,可能是因为远程服务器上不存在
~/.ssh
目录,你需要手动创建它并设置正确的权限。 -
The agent has no identities:如果碰到这个错误,意味着SSH代理没有加载私钥。可以使用
ssh-add ~/.ssh/id_rsa
来解决。 -
Timeout:如果SSH尝试超时,请检查网络连接,确保远程主机可达,并且SSH端口(默认为22)没有被防火墙阻塞。
记住,任何时候更改了 ~/.ssh/authorized_keys
文件或相关目录和文件的权限,都可能需要重新验证和调整设置。如果遇到问题,查看日志文件通常有助于诊断,例如通过 journalctl -u ssh
或查看 /var/log/auth.log
(取决于你的Linux发行版)。
阮一峰大神的文章每读一次都收获满满。必读系列
《SSH密钥登录》
《SSH原理和运用:远程登录》