利用expect脚本, 实现自动化将公钥复制到多个远程的主机

为了实现基于key的验证,需要将本机的公钥传到多个远程主机,传给额过程中要输入yes和密码,如果远程主机很多,人工一个个的输入密码浪费时间,expect脚本可以实现代替人工完成交互式的指令。

[root@centos7 app]#cat ip.txt 
zhang 172.18.21.106 123456
dufu 172.18.21.6 123456
[root@centos7 app]#cat ssh-copy-id.sh 
#!/bin/bash
#
cat /app/ip.txt |while read file;do
      username=`echo $file|cut -d ' ' -f1`
      ip=`echo $file|awk '{print $2}'`
      passwd=`echo $file|awk '{print $3}'`
expect << end  
---将expect利用多行重定向传入当前脚本
set timeout 100  
----设置多长时间跳出expect,建议时间设置的长一点,如果没有这一
行,默认的时间也很短,大概5秒,所以这一行要加上,并且把时
间设置的长一点,远程主机比较多,可以设置的时间更长一点
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $username@$ip
expect {
"yes/no" { send "yes\n" ;exp_continue }  
---当捕捉到yes/no信号时执行yes\n命令,因为前面捕捉的信号为多个,所以后面要加上exp_continue
 "password" { send "$passwd\n" }
}
expect eof  
end
 done
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容