shell脚本中实现免交互

这里通过expect可以实现将交互式的命令变为非交互式执行,不需要人为干预

NO.1 expect的语法:

用法:

1)spawn
        spawn是执行expect之后后执行的内部命令开启一个会话 #功能:用来执行shell的交互命令

2)expect ---相当于捕捉
        功能:判断输出结果是否包含某项字符串(相当于捕捉命令的返回的提示)。没有捕捉到则会断开,否则等待一段时间后返回,等待通过timeout设置 
3)send
        执行交互动作,将交互要执行的命令进行发送给交互指令,命令字符串结尾要加上“\r”,#---相当于回车
4)interact 
        执行完后保持交互状态,需要等待手动退出交互状态,如果不加这一项,交互完成会自动退出
5)exp_continue 
        继续执行接下来的操作
6)timeout
        返回设置超时时间(秒)


NO.2 expect 的安装

yum -y install expect


NO.3实例--实现多机ssh免交互连接

[root@localhost ~]# vim expect.sh 

#!/usr/bin/bash
miyao(){
/usr/bin/expect << EOF
spawn ssh-keygen
expect "(/root/.ssh/id_rsa)" {send "\r"}
expect "(empty for no passphrase)" {send "\r"}
expect "again" {send "\r"}
expect eof
EOF
}
panduan(){
if [ $? -eq 0 ]
   then
 $1
   else
 $2

fi
}
fasong(){
/usr/bin/expect << EOF
spawn ssh-copy-id root@$IP
expect "(yes/no)" {send "yes\r"}
expect "password:" {send "1\r"}
expect eof
EOF
}
miyao &> /dev/null
panduan "echo '密钥已经创建完成'" "echo '密钥创建失败'"


for IP in $(cat /root/ip.txt)
do
   ping -c1 $IP &> /dev/null
 if [ $? -eq 0 ]
  then
   fasong &> /dev/null
   echo "$IP 通" >> /root/tong.log
  else
   echo "$IP 不通" >> /root/butong.log
 fi
done

创建/root/ip.txt,里面存放我们要建立ssh的ip

[root@localhost ~]# touch /root/ip.txt

在终端执行bash expect.sh即可完成ssh免交互连接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值