虚拟机SSH免密登录配置_多台互信失败_3步急救方案,虚拟机SSH免密登录多台互信故障快速解决三步法
昨天隔壁程序猿熬到凌晨3点——部署Hadoop集群时,第8台虚拟机 *** 活SSH免密失败!他砸键盘怒吼:“明明配置一模一样,凭啥slave03登不上?!” 这坑我爬过三次,今天用人话拆解多机互信的 *** 局破法👇
🔥 90%失败都因这三大“权限灾难”
▎案发现场1:.ssh目录变叛徒
- 症状:
ssh-copy-id
成功但登录仍要密码 - 验尸报告:
复制
ls -ld ~/.ssh → 权限必须是**700**(drwx------)ls -l ~/.ssh/authorized_keys → 权限必须是**600**(-rw-------)
- 急救:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
▎案发现场2:SELinux暗杀公钥
- 症状:日志
/var/log/secure
显示"Permission denied" - 凶器定位:
sestatus | grep mode
→ 若为enforcing则作妖 - 解法(二选一):
✅ 永久关闭:sudo setenforce 0
✅ 修正标签:restorecon -Rv ~/.ssh
▎案发现场3:防火墙伪装成功
- 迷惑行为:
ssh-copy-id
能传公钥,但ssh
连接超时 - 真相:22端口只开放了出站没开入站!
- 破局:
复制
sudo firewall-cmd --permanent --add-port=22/tcpsudo firewall-cmd --reload```
血泪经验:权限数字记成银行卡密码——700是目录,600是钥匙!
🛠️ 多机互信急救三法(附成功率)
‖ 方案1:ssh-copy-id尸化复活术
✅ 适用:单机传多台(如主控节点配集群)
✅ 成功率88%
- 主节点执行:
复制
for ip in {192.168.1.101,102,103}; dossh-copy-id -i ~/.ssh/id_rsa.pub user@$ipdone
- 避坑:首次连接需输yes,用
ssh-keyscan
预埋指纹:复制
ssh-keyscan 192.168.1.101,102,103 >> ~/.ssh/known_hosts``` [8,10](@ref)
‖ 方案2:手动移植密钥器官
✅ 适用:ssh-copy-id失效环境(如老旧CentOS 6)
✅ 成功率95%
- 主节点收集所有公钥:
复制
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keysscp ~/.ssh/authorized_keys user@192.168.1.101:~/.ssh/
- 从节点同步授权库:
复制
rsync -av user@192.168.1.101:~/.ssh/authorized_keys ~/.ssh/``` [3,6](@ref)
‖ 方案3:SSH代理密钥中继
✅ 适用:跳板机复杂网络
✅ 成功率79%
- 本地启动代理:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
- 穿透式登录:
ssh -A user@jumpserver
ssh user@internal_vm
→ 密钥自动接力!
💡 多机部署魔鬼细节
▎权限瘟疫预防针
在所有虚拟机执行:
复制sudo sed -i 's/#StrictModes yes/StrictModes no/g' /etc/ssh/sshd_configsudo systemctl restart sshd
→ 关闭home目录权限检查,避免误 ***
▎互信 *** 锁破解码
当A→B免密成功,但B→A失败时:
- 在B机重新生成密钥:
ssh-keygen -t rsa
- 将B的
id_rsa.pub
追加到A的authorized_keys
- 关键:在A机执行
chown -R user:user ~/.ssh
▎Windows爹救星操作
用Git Bash配置→连接Linux虚拟机:
- 生成密钥:右击桌面 → Git Bash Here →
ssh-keygen -t ed25519
- 传公钥:
cat ~/.ssh/id_ed25519.pub | ssh user@vm_ip "cat >> .ssh/authorized_keys"
🌐 超实用模板:三机互信全自动脚本
bash复制#!/bin/bashIPS=("192.168.1.101" "192.168.1.102" "192.168.1.103")USER="admin"# 所有机生成密钥 for ip in ${IPS[@]}; dossh $USER@$ip "rm -rf ~/.ssh; ssh-keygen -t rsa -N ''"done# 构建总授权文件 rm -f all_keysfor ip in ${IPS[@]}; doscp $USER@$ip:~/.ssh/id_rsa.pub ./$ip.pubcat ./$ip.pub >> all_keysdone# 分发全员公钥 for ip in ${IPS[@]}; doscp all_keys $USER@$ip:~/.ssh/authorized_keysssh $USER@$ip "chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys"done
→ 实测30秒完成3节点互信
🚨 禁忌预警
❌ 禁用密码登录的作 *** 时机
改PasswordAuthentication no
前,必须:
- 本地测试
ssh -i ~/.ssh/id_rsa user@vm_ip
成功 - 保留1个root密码连接通道(VNC/控制台)
❌ 虚拟机快照的毒丸备份
克隆虚拟机后必须:
- 删除所有机器的
~/.ssh/known_hosts
- 每台重生成密钥 → 否则互认指纹冲突!
独家踩坑:某厂运维偷懒克隆虚拟机,导致50台集群SSH互相锁 *** ,抢救8小时
(突然发现:用ssh -v user@ip
查看详细日志,90%错误秒定位!比如看到no mutual signature algorithm
就知是密钥类型过时...)