SSH密钥批量配置免密登录多台服务器集群实操教程

SSH密钥批量配置免密登录多台服务器集群,最实用的做法是:在管理机上生成一对密钥,再用一条循环命令把公钥依次推送到各台服务器,最后通过免密登录命令验证。
整个过程不需要逐台输入密码,也不需要借助第三方软件,适合刚接触集群运维的读者直接照做。

动手前需要准备什么

开始前请确认三件事:

  • 管理机(你当前操作的电脑或跳板机)已安装 sshssh-copy-id,大多数 Linux 发行版默认自带。
  • 已获取每台目标服务器的 IP、SSH 端口(默认 22)和登录账号,且当前密码可正常登录。
  • 目标服务器之间的系统版本可以不一致,但建议都支持 SSH 协议。

如果目标服务器数量很多,建议先准备一个文本文件 hosts.txt,每行写一台服务器的 IP 或域名,方便后续批量读取。

第一步:生成SSH密钥对

在管理机上执行:

ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa

参数说明:-t rsa 指定密钥类型,-b 4096 表示密钥长度,-N "" 表示空密码(免密登录不需要额外输入私钥密码),-f 指定保存路径。
执行后会在 ~/.ssh/ 下生成私钥 id_rsa 和公钥 id_rsa.pub

如果之前已生成过密钥,想重新生成可以加 -y 参数覆盖,但建议先备份旧密钥,避免影响已有环境。

第二步:批量推送公钥到集群服务器

常见做法是循环读取 IP 列表,逐台执行 ssh-copy-id
命令如下:

while read host; do
  ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@$host
  if [ $? -eq 0 ]; then
    echo "$host 配置成功"
  else
    echo "$host 配置失败"
  fi
done < hosts.txt

这条循环命令会依次读取 hosts.txt 中的 IP,手动输入一次密码后,公钥就会追加到目标服务器的 ~/.ssh/authorized_keys 文件中。
如果服务器用户名不同,把 root 换成对应用户即可。
若 SSH 端口非 22,修改 -p 后面的数字。

对于没有 ssh-copy-id 命令的系统,可以用下面命令替代:

cat ~/.ssh/id_rsa.pub | ssh root@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

批量执行时建议在脚本里加上 -o StrictHostKeyChecking=no,避免第一次连接时提示确认指纹导致脚本卡住:

ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub -p 22 root@$host

第三步:验证免密登录是否生效

批量配置完成后,从管理机直接 SSH 连接任意一台服务器:

ssh root@192.168.1.101

如果不再提示输入密码,直接进入命令行,说明该台服务器免密登录配置成功。

如果想批量验证整个集群,可以用循环命令逐台执行:

while read host; do
  ssh -o BatchMode=yes -o ConnectTimeout=3 root@$host "echo $host 免密登录正常"
done < hosts.txt

BatchMode=yes 表示禁止交互输入密码,如果配置失败会直接报错,不会卡住脚本。
能看到每台服务器返回“免密登录正常”,说明集群免密配置全部生效。

避坑指南:这些细节最容易出错

  • 权限错误:如果目标服务器上的 ~/.sshauthorized_keys 权限过宽,SSH 会拒绝使用密钥。确保 .ssh 为 700,authorized_keys 为 600。
  • 错误用户:公钥推到了 root 用户下,登录时却用了普通用户,免密必然失败。要保证推送和登录使用同一账号。
  • known_hosts 冲突:服务器重装系统后指纹会变化,导致连接失败。可以提前使用 -o StrictHostKeyChecking=no 跳过检查,或清理 ~/.ssh/known_hosts 中对应记录。
  • 大批量场景:如果服务器超过几十台,建议在 hosts.txt 中分批处理,避免单次密码输入超时导致后半段失败。
  • 私钥权限:管理机上的 ~/.ssh/id_rsa 权限建议为 600,否则 SSH 会提示权限不安全而拒绝使用。

常见疑问:一次说清

公钥推送后立刻生效吗?
是的,追加到 authorized_keys 后立即生效,不需要重启 SSH 服务。

所有服务器必须用同一个公钥吗?
可以,集群内共用同一把公钥便于管理;如果安全要求更高,建议每台服务器独立密钥并定期轮换。

不想用密码脚本,有没有更安全的方式?
可以用 Ansible 的 authorized_key 模块或 SSH 证书认证,但前期准备更复杂,适合已经具备自动化运维基础的场景。

按照上面的步骤操作,你会得到一套能够直接免密登录整个集群的环境。
如果中途遇到“Permission denied”或“Connection refused”,优先检查账号、端口、防火墙和权限四个地方,绝大多数问题都出在这里。
若需要管理更复杂的集群环境,可以把本文的批量推送思路扩展成自动化脚本,配合定时任务或 CI/CD 工具使用。

分享到:
上一篇
Ollama搭配Open WebUI可视化中转网关搭建
下一篇
防火墙放行建站标准80 443 22端口规范详解与实操
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意