【工具】Linux如何实现一台服务器ssh免密登录另外一台服务器
在 Linux 系统中,可以通过配置 SSH 免密登录来实现直接登录远程服务器而无需输入密码。以下是具体步骤:
1. 生成 SSH 密钥对
如果你还没有 SSH 密钥对,需要先生成一个。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa:指定密钥类型为 RSA。-b 4096:指定密钥长度为 4096 位(更安全)。-C "your_email@example.com":添加注释,通常可以写你的邮箱。
执行后会提示你保存密钥的路径,默认是 ~/.ssh/id_rsa,直接按回车即可。
接着会提示你设置密钥的密码(passphrase),如果希望完全免密登录,直接按回车跳过。
2. 将公钥复制到远程服务器
使用 ssh-copy-id 命令将本地生成的公钥复制到远程服务器。
ssh-copy-id app@10.12.11.1
- 这个命令会将本地的公钥(默认是
~/.ssh/id_rsa.pub)追加到远程服务器用户app的~/.ssh/authorized_keys文件中。 - 如果是第一次连接远程服务器,可能会提示你确认主机的指纹信息,输入
yes继续。
注意:如果 ssh-copy-id 命令不可用,可以手动完成以下操作:
-
查看本地公钥内容:
cat ~/.ssh/id_rsa.pub -
登录到远程服务器:
ssh app@10.12.11.1 -
在远程服务器上创建
.ssh目录(如果不存在)并设置权限:mkdir -p ~/.ssh chmod 700 ~/.ssh -
将本地公钥内容追加到
~/.ssh/authorized_keys文件中:echo "你的公钥内容" >> ~/.ssh/authorized_keys -
设置
authorized_keys文件的权限:chmod 600 ~/.ssh/authorized_keys
3. 测试免密登录
完成上述步骤后,尝试重新连接远程服务器:
ssh app@10.12.11.1
如果配置正确,应该可以直接登录,无需输入密码。
4. 检查和排查问题
如果仍然需要输入密码,可能是以下原因导致的:
-
权限问题:
- 确保远程服务器上的
.ssh目录和authorized_keys文件权限正确:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
- 确保远程服务器上的
-
SSH 配置文件:
- 检查远程服务器的
/etc/ssh/sshd_config文件,确保以下配置项已启用:PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no - 修改后需要重启 SSH 服务:
sudo systemctl restart sshd
- 检查远程服务器的
-
日志排查:
- 查看远程服务器的 SSH 日志以获取更多信息:
sudo tail -f /var/log/auth.log
- 查看远程服务器的 SSH 日志以获取更多信息:
通过以上步骤,你应该能够成功实现 SSH 免密登录。如果有其他问题,请随时l联系博主。

