文档首页> 技术教程> 两台服务器免密互信:批量部署的第一步

两台服务器免密互信:批量部署的第一步

发布时间:2026-05-18 15:37        更新时间:2026-05-19 10:31
脚本批量部署跑到一半卡住等输密码,十有八九是机器之间没做免密互信。两台机器配好一次,后面所有自动化操作才顺畅。 第一步:生成密钥对 在发起方机器上执行 `ssh-keygen -t ed25519`,一路回车即可。ed25519 是新一代算法,密钥短、验证快;需要兼容老系统时再退回 `ssh-keygen -t rsa -b 4096`。私钥只留在本机,任何情况下不外发。 第二步:分发公钥 `ssh-copy-id user@192.168.1.20` 会把公钥追加到对方的 `~/.ssh/authorized_keys`,这一步要输最后一次密码。机器多就写个循环: ```bash for h in 192.168.1.20 192.168.1.21; do ssh-copy-id user@$h; done ``` 分发完可以抽查对方文件:`ssh user@192.168.1.20 'tail -1 ~/.ssh/authorized_keys'`,末尾应当正是发起方的公钥内容。 第三步:处理主机指纹确认 首次连接会询问是否信任对方主机指纹,脚本环境下加 `-o StrictHostKeyChecking=accept-new` 自动接受新主机,既省去交互,又不放弃对已建立记录的校验。指纹保存在 ~/.ssh/known_hosts,对方重装系统后指纹会变,ssh 会拒绝连接并提示 REMOTE HOST IDENTIFICATION HAS CHANGED,用 `ssh-keygen -R 主机地址` 删掉旧记录再连即可。 验证与排错 `ssh user@192.168.1.20 'hostname'` 不需要密码即为成功,脚本里可以再加 `-o BatchMode=yes`,确保任何交互提示都直接报错而不是卡住。仍要密码时按顺序查三处权限:家目录不能是 777,`~/.ssh` 应为 700,`authorized_keys` 应为 600,在对方机器上一把修正:`chmod 755 ~ && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys`。权限过宽时 sshd 会静默拒绝公钥,`/var/log/secure` 或 `journalctl -u sshd` 里能找到对应日志,`ssh -v` 的输出里看到 Offering public key 之后紧跟 Server refused our key,基本就是权限或 SELinux 的事。 经验上还有两个细节:一是 known_hosts 会随互信范围扩大而增长,下线服务器时同步清理对应行,避免旧指纹误导后来人;二是私钥若设了口令,每次连接都要输一次,用 ssh-agent 缓存解锁状态,安全与便利可以兼得,按需取舍;但密钥口令别图省事留空。 互信建立后,rsync、scp、ansible 这类工具才能真正无人值守。反过来讲,互信也放大了私钥泄漏的影响面——发起方机器一旦失守,名单里的机器全部暴露,它的安全等级要相应提高,密钥口令和登录审计一样都不能省。