Linux简单交互expect
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。
expect需要下载才能使用;
yum -y install expect
expect自动交互流程:
spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.
示例脚本:获取某段地址内在线ip,并收集;最后expect交互发送公钥免密;
[root@k8s-master ~]# cat get_ip_ssh.sh
#!/bin/bash
>/root/ip.txt
password=root
user=root
#判断expect包并下载
rpm -q expect &> /dev/null
if [ $? -ne 0 ] ; then
yum -y install expect &> /dev/null
if [ $? -ne 0 ] ; then
echo "expect is not existent and yum failed"
fi
fi
#判断密钥文件是否存在
if [ ! -f ~/.ssh/id_rsa ] ; then
ssh-keygen -P "" -f ~/.ssh/id_rsa &> /dev/null
fi
#收集ip并免密
for i in {200..205}
do
{
ip=192.168.75.$i
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip" >> /root/ip.txt
/usr/bin/expect <<-EOF
spawn ssh-copy-id $user@$ip
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" }
}
expect eof
EOF
fi
}&
done
[root@k8s-master ~]#