批量实现多台服务器之间ssh无密码登录的相互信任
所有文件的github位置:https://github.com/tobewithyou1996/ssh-batch-believe.git 便于下载,直接复制容易有编码问题。
思路:将所有主机的公钥文件都收集到一台主机,最后将包含所有主机的公钥文件添加到每一台主机。
主要文件有 believe.sh ,sshcopy.exp ,sshkeygen.exp,hosts文件
1. believe.sh文件
#!/bin/bash #检查本地是否有密钥文件,没有则添加。 ./sshkeygen.exp #循环取出ip和密码 for i in $(cat ./hosts ) do #取出ip和密码 IP=$(echo "${i}" |awk -F":" '{print $1}') PW=$(echo "${i}" |awk -F":" '{print $2}') #将本地的公钥复制到远程主机 ./sshcopy.exp $IP $PW #将脚本sshkeygen.exp复制到远程主机 scp -p ./sshkeygen.exp $IP:/root/ #远程主机安装expect ssh root@$IP "yum install expect -y " #远程主机创建密钥文件 ssh root@$IP "/root/sshkeygen.exp&" #将远程主机的公钥添加到本地authorized_keys文件 ssh root@$IP "cat ~/.ssh/*.pub" >>./authorized_keys done #将本地的公钥复制到远程主机 for i in $(cat ./hosts) do IP=$(echo "${i}" |awk -F":" '{print $1}')
#将本地主机的公钥文件添加到authorized_keys文件
cat ~/.ssh/*.pub >>./authorized_keys scp ./authorized_keys $IP:~/.ssh/authorized_keys done
2. sshcopy.exp
#!/usr/bin/expect -d set ip [lindex $argv 0] set pw [lindex $argv 1] set timeout 60 spawn ssh-copy-id $ip expect { #"*yes/no" {send "yes\r"; exp_continue}
#如果上面这行注释了,我们需要在/etc/ssh/ssh_config 将# StrictHostKeyChecking ask 修改为 StrictHostKeyChecking no。 "password:" {send "$pw\r"} } expect eof
3. sshkeygen.exp
#!/usr/bin/expect -d set timeout 90 spawn ssh-keygen expect { ".ssh/id_rsa" {send "\r";exp_continue} "Overwrite (y/n)?" exit "Enter passphrase" {send "\r";exp_continue} "Enter same passphrase again:" {send "\r"} } expect eof
4. hosts文件
149.28.244.75:*p8V1xGV{7)%sQdV! 149.28.245.101:K(1q@jsHvM@dUVZtk
注意事项:believe.sh ,sshcopy.exp ,sshkeygen.exp 三个文件都要具有可执行权限。 sshcopy.exp文件的第七行需要注意,根据自己的情况进行是否注释。 这里的expect脚本都开启了调试参数,可不开启
这里还有些问题没有解决就是当我们第一次去远程登陆主机的时候还是要询问我们是否连接远程主机,
解决办法:
1. 在所有的主机上面,我们需要在/etc/ssh/ssh_config 将# StrictHostKeyChecking ask 修改为 StrictHostKeyChecking no。
2.将一台包含所有主机的known_hosts文件的文件上传到所有的主机上。
3.或者在使用ssh时加上-o GSSAPIAuthentication=no 这样也可以避免询问。
[root@vultr ~]# ssh -o StrictHostKeyChecking=no 144.202.16.12
作者:理想三旬
本人承接各种项目维护和python项目开发, 如果觉得文章写得不错,或者帮助到您了,请点个赞,加个关注哦。运维学习交流群:544692191
本文版权归作者所有,欢迎转载,如果文章有写的不足的地方,或者是写得错误的地方,请你一定要指出,因为这样不光是对我写文章的一种促进,也是一份对后面看此文章的人的责任。谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧