shell脚本实现自动交互免密登录(基于expect)

Background

最近在给公司搭建大数据集群(Centos7),需要做免密登录,十几台机器,生成密钥后需拷贝到相应的机器,不用shell脚本操作太麻烦了,就研究了下怎么脚本拷贝密钥时自动输入yes密码,操作记录如下:

1 下载expect

yum -y install expect

2 expect基本指令介绍

spawn shell 执行shell命令程序 
expect   "捕获到shell 命令程序执行之后输出的字符串"  
send  "发送给 shell 命令程序的字符串"

3 shell脚本

我这里是要拷贝给十一台服务器(Cloud01~Cloud11)

# 自动向传入的IP地址拷贝密钥的函数
copy_key () {
    
    
pwd='123'
# 开始 expect 解释器程序
/usr/bin/expect <<EOF
# 设置捕获字符串后,期待回复的超时时间
set timeout 30
# 发送公钥给对方服务器
spawn ssh-copy-id root@$1
expect {
"yes/no" { send "yes\n"; exp_continue }
"password:" { send "${pwd}\n"} 
}
expect eof
EOF
}

host='Cloud'
# 循环把每个 Host 传递给自动拷贝函数
for i in {
    
    01..11}
do
   copy_key $host$i
done

猜你喜欢

转载自blog.csdn.net/qq_42761569/article/details/107690645