让多台服务器之间 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 都要相互免密):
- 在 任意一台(列如 server01)生成密钥;
- 用
ssh-copy-id将公钥发给 所有节点(包括自己); - 在每台机器的
/root/.ssh/authorized_keys都包含一样的公钥; - 所有节点间的登录都会免密成功。
✅ 六、完整可执行命令总结
你可以直接复制执行 👇
# 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
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...