批量配置SSH互信脚本

本文介绍了一种通过编写expect脚本实现大规模自动化部署时SSH互信的批量配置方法,使得自动化脚本能够免密登录远程服务器,并提供了具体的脚本示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在大规模自动化部署时我们常常需要配置好服务器的SSH互信,以便自动化脚本可以免密登录远程服务器,常规的手动配置SSH互信步骤如下:

  • 使用ssh-keygen生成本地ssh key(mha01),生成的文件如下:

    

  • cp .ssh/id_rsa.pub .ssh/authorized_keys
  • 将.ssh内容全部拷贝至远程服务器mha02,在正式拷贝之前会把远程服务器加到.ssh/known_hosts文件中然后再拷贝。
每次向新服务器拷贝都会更新.ssh/known_hosts,全部拷贝完毕后在mha1上就可以免密登录所有服务器了。
 
根据以上思想编写的批量配置脚本为:
#!/usr/bin/expect
#此脚本需配合ip.list文件使用,ip.list文件存储所有服务器IP,包含本地服务器。
#此脚本需要和ip.list一起放置在用户~/目录下才能执行。
set passwd xxx --设置服务器密码变量,需要所有服务器上要配置ssh互信的用户的密码全部一致。
spawn ssh-keygen  
expect {
		"id_rsa" {send "\r";exp_continue}  
		"Overwrite" {send "y\r";exp_continue}    
		"phrase" {send "\r";exp_continue}    
		"again" {send "\r";exp_continue}  
		}
#需要注意的是路径不能以~开头,因此要么写成绝对路径要么写成相对路径,绝对不能用~/来表示家目录。但是如果是$ip:~/却可以,奇坑无比。
spawn cp .ssh/id_rsa.pub .ssh/authorized_keys --这可也可以写成spawn cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
set hosts [open ip.list r]
while { [gets $hosts ip]>=0} {
	spawn scp -r .ssh/ $ip:~/  --这里也可以写成spawn scp -r /root/.ssh/ $ip:/root/ 
	expect {
		"yes/no" {send "yes\r";exp_continue}  
	        "password:" {send "$passwd\r";exp_continue}  
       		}  
}  
close $hosts
假设有mha01-mha99 99台服务器,那么配置完毕后mha01可以免密登录其他98台服务器,但是mha02只能免密登录mha01和mha02,mha03只能免密登录前3台服务器,以此类推mha99和mha01一样可以免密登陆全部服务器,如果想要01-99之间的服务器也能像01和99一样,可以把脚本的第二部分再次执行一遍,这样相当于把包含全部hosts的known_hosts文件的.ssh目录传输到所有服务器节点。
补充说明:
ssh还有一个名为ssh-copy-id的命令,也可以使用此命令实现key的拷贝,使用此命令无需以上繁琐的判断,这里懒的进行修改了,只提一下待有需要再说。
 

转载于:https://www.cnblogs.com/leohahah/p/8477066.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值