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