让多台服务器之间 SSH 免密登录

内容分享4天前发布
0 0 0

让多台服务器之间 SSH 免密登录,也就是:

A 登录 B、B 登录 C 等,不再输入密码。

我帮你分成三个阶段来搞定,一步步讲得超级清晰👇


🧩 一、目标概念:SSH 免密的原理

当你执行:

ssh-keygen

它会生成两把钥匙:

文件 说明
~/.ssh/id_rsa 私钥(留在本机)
~/.ssh/id_rsa.pub 公钥(发给目标机)

然后把本机的 公钥内容 加进目标机的:

~/.ssh/authorized_keys

这样 SSH 登录时系统会验证密钥匹配,无需密码。


⚙️ 二、单机免密配置步骤(以 root 为例)

假设我们有三台机器:

主机名 IP 说明
server01 192.168.10.11 主控机(生成密钥)
server02 192.168.10.12 目标机 A
server03 192.168.10.13 目标机 B

1️⃣ 在主控机(server01)生成 SSH 密钥

执行:

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

解释:

  • -t rsa:使用 RSA 算法
  • -b 4096:密钥长度
  • -f:指定文件路径
  • -P :空密码(非交互式)

生成后会有两个文件:

ls ~/.ssh/id_rsa*
# 输出:
# ~/.ssh/id_rsa  ~/.ssh/id_rsa.pub


2️⃣ 把公钥分发给目标机

执行以下命令,把公钥复制到目标服务器:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.12
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.13

系统会提示输入一次密码,然后自动完成公钥配置。

作用: 会自动将 id_rsa.pub 追加进 /root/.ssh/authorized_keys


3️⃣ 测试免密

目前在 server01 上执行:

ssh root@192.168.10.12

✅ 如果直接登录进去了,不再提示输入密码,说明免密成功。


🧰 三、脚本化批量配置(推荐)

如果你要在多台机器之间都打通,可以让所有机器互信:
例如:

servers=(192.168.10.11 192.168.10.12 192.168.10.13)

for host in ${servers[@]}; do
  echo "=== 配置 ${host} ==="
  ssh-keygen -f ~/.ssh/id_rsa -P    -q || true
  ssh-copy-id -i ~/.ssh/id_rsa.pub root@${host}
done

💡 注意:第一次连接每台机器时,会要求确认“yes”,然后输入一次密码。


🔒 四、检查权限(关键)

确保权限正确,否则免密会失效:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub


🧠 五、进阶技巧(多机互信)

如果是一个集群(例如 server01、server02、server03 都要相互免密):

  1. 任意一台(列如 server01)生成密钥;
  2. ssh-copy-id 将公钥发给 所有节点(包括自己)
  3. 在每台机器的 /root/.ssh/authorized_keys 都包含一样的公钥;
  4. 所有节点间的登录都会免密成功。

✅ 六、完整可执行命令总结

你可以直接复制执行 👇

# 1. 生成密钥(只需执行一次)
ssh-keygen -f ~/.ssh/id_rsa -P   

# 2. 授权本机
grep -f /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys || cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

# 3. 分发到其他节点
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.12
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.13

# 4. 测试免密
ssh root@192.168.10.12

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...