虚拟机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%​

  1. 主节点执行:
    复制
    for ip in {192.168.1.101,102,103}; dossh-copy-id -i ~/.ssh/id_rsa.pub user@$ipdone  
  2. ​避坑​​:首次连接需输yes,用ssh-keyscan预埋指纹:
    复制
    ssh-keyscan 192.168.1.101,102,103 >> ~/.ssh/known_hosts``` [8,10](@ref)  

​‖ 方案2:手动移植密钥器官​
✅ ​​适用​​:ssh-copy-id失效环境(如老旧CentOS 6)
✅ ​​成功率95%​

  1. 主节点收集所有公钥:
    复制
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keysscp ~/.ssh/authorized_keys user@192.168.1.101:~/.ssh/  
  2. 从节点同步授权库:
    复制
    rsync -av user@192.168.1.101:~/.ssh/authorized_keys ~/.ssh/``` [3,6](@ref)  

​‖ 方案3:SSH代理密钥中继​
✅ ​​适用​​:跳板机复杂网络
✅ ​​成功率79%​

  1. 本地启动代理:
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa
  2. 穿透式登录:
    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失败时:

  1. 在B机重新生成密钥:ssh-keygen -t rsa
  2. 将B的id_rsa.pub追加到A的authorized_keys
  3. ​关键​​:在A机执行 chown -R user:user ~/.ssh

​▎Windows爹救星操作​
用Git Bash配置→连接Linux虚拟机:

  1. 生成密钥:右击桌面 → Git Bash Here →
    ssh-keygen -t ed25519
  2. 传公钥:
    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前,必须:

  1. 本地测试 ssh -i ~/.ssh/id_rsa user@vm_ip 成功
  2. ​保留1个root密码连接通道​​(VNC/控制台)

​❌ 虚拟机快照的毒丸备份​
克隆虚拟机后必须:

  1. 删除所有机器的~/.ssh/known_hosts
  2. ​每台重生成密钥​​ → 否则互认指纹冲突!

独家踩坑:某厂运维偷懒克隆虚拟机,导致​​50台集群SSH互相锁 *** ​​,抢救8小时


(突然发现:用ssh -v user@ip查看详细日志,90%错误秒定位!比如看到no mutual signature algorithm就知是密钥类型过时...)