SSH配置免密登录,多服务器之间免密访问

在多台服务器之间来回切换时,每次都要输入密码确实很麻烦。
SSH免密登录就是通过密钥对代替密码验证,让你从一台机器直接登录另一台机器,不用再输密码。
这篇文章会带你从零开始,在两台或多台服务器之间配置SSH免密访问,并解决常见的权限和配置问题。

先搞清楚:免密登录到底靠什么

SSH免密登录依赖一对密钥:私钥和公钥。
私钥留在本地,公钥放到目标服务器的 ~/.ssh/authorized_keys 文件里。
当你发起连接时,服务器用公钥加密一段随机数据,只有持有私钥的客户端才能解密,验证通过后就允许登录。

整个过程不需要传输密码,比密码登录更安全,也适合自动化脚本和集群管理。

配置前,你需要确认:

  • 本地和远程服务器都安装了OpenSSH客户端和服务端(大多数Linux发行版默认已装)。
  • 你知道远程服务器的IP、SSH端口、登录用户名。
  • 本地用户对 ~/.ssh 目录有写权限。

生成密钥对并分发公钥

第一步是在本地生成密钥对。
打开终端,执行:

ssh-keygen -t rsa -b 4096

连续按回车,使用默认路径 ~/.ssh/id_rsa,密码短语可以留空(直接回车),这样登录时完全不用输入任何密码。
如果对安全性要求高,可以设置一个密码短语,再配合 ssh-agent 使用。

生成后会得到两个文件:

  • ~/.ssh/id_rsa:私钥,绝对不能泄露。
  • ~/.ssh/id_rsa.pub:公钥,需要复制到目标服务器。

随后把公钥复制到远程服务器。
最简单的方式是用 ssh-copy-id

ssh-copy-id -p 22 user@192.168.1.100

user 换成远程用户名,192.168.1.100 换成目标IP,-p 指定SSH端口(默认22可省略)。
执行后会提示输入一次远程密码,成功后公钥会自动追加到远程的 ~/.ssh/authorized_keys 文件中。

如果没有 ssh-copy-id 命令,可以手动复制:

cat ~/.ssh/id_rsa.pub | ssh -p 22 user@192.168.1.100 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

这条命令会一次性创建目录、设置权限并写入公钥。

多台服务器之间互相免密

如果需要在多台服务器之间任意两两免密,比如A能免密登录B,B也能免密登录A,那就需要在每台服务器上都生成密钥对,然后把每台的公钥分发到其他所有服务器。

假设有三台机器:server1、server2、server3。

在每台机器上执行 ssh-keygen -t rsa -b 4096 生成各自的密钥对。

然后,在server1上把自己的公钥复制到server2和server3:

ssh-copy-id user@server2
ssh-copy-id user@server3

同样,在server2上把公钥复制到server1和server3,在server3上复制到server1和server2。

这样,每台服务器的 authorized_keys 里都包含了其他服务器的公钥,互相登录都不需要密码。

如果服务器数量较多,可以用循环批量分发:

for host in server2 server3; do
  ssh-copy-id user@$host
done

权限与配置避坑指南

免密登录失败,十有八九是权限问题。
SSH对文件和目录权限要求非常严格:

  • ~/.ssh 目录权限必须是 700
  • ~/.ssh/authorized_keys 文件权限必须是 600
  • 用户家目录 ~ 权限不能是 777,建议 755700

检查并修正:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 755 ~

另外,检查远程服务器的 /etc/ssh/sshd_config 中这几项:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

如果修改了配置,需要重启SSH服务:

sudo systemctl restart sshd

注意:在重启sshd之前,务必保持当前SSH连接不要断开,并另外开一个窗口测试新连接,避免配置错误导致无法登录。

如果公司网络或云服务器有安全组,确保SSH端口(默认22)对来源IP开放。

验证免密是否生效

配置完成后,在本地直接执行:

ssh user@192.168.1.100

如果不再提示输入密码,直接进入远程命令行,说明免密登录成功。

你还可以用 -v 参数查看详细过程,确认使用的是公钥认证:

ssh -v user@192.168.1.100

输出中如果出现 Authenticated with public key 或类似字样,就表示公钥认证已生效。

对于多台服务器,可以写一个简单脚本一次性测试所有连接:

for host in server1 server2 server3; do
  echo "Testing $host..."
  ssh -o BatchMode=yes -o ConnectTimeout=3 user@$host "echo OK"
done

如果每台都返回OK,说明互相免密全部配置成功。

常见问题与快速排查

仍然提示输入密码:先检查 ~/.ssh/authorized_keys 内容是否正确,确保没有多余换行或空格。
再确认权限是否为600。

提示“Permission denied (publickey)”:通常是公钥没有正确写入,或者sshd_config中禁用了PubkeyAuthentication。
查看远程服务器日志 /var/log/secure/var/log/auth.log 获取具体原因。

多台服务器之间有的通有的不通:检查是否每台机器的公钥都分发到了所有其他机器。
可以手动在目标机器上查看 authorized_keys 是否包含来源机器的公钥。

想更安全地管理私钥:可以为私钥设置密码短语,然后使用 ssh-agent 缓存。
执行 eval $(ssh-agent) 启动代理,再运行 ssh-add ~/.ssh/id_rsa 输入一次密码短语,当前会话内就不用重复输入了。

按照以上步骤操作后,你应该已经实现了多台服务器之间的SSH免密访问。
如果遇到问题,优先回看权限和sshd配置这两个部分,大部分故障都能在那里找到答案。

分享到:
上一篇
运维灾备演练实操,模拟服务器宕机恢复网站:运维灾备演练
下一篇
SSH配置端口修改,减少端口扫描攻击:SSH端口修改教程
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意