expect实现交互式连接远程主机并调用相对应的shell脚本

#注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect
#在运行脚本时候要expect  file,不能sh file了
#spawn是expect的语句,执行命令前都要加这句
#expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:root@192.168.100.1's password:
#send就是将密码123123发送过去
#interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台 


#!/bin/expect
log_file /opt/jzgk_Expect.log
set user [lindex $argv 0]
set name [lindex $argv 1]
set passwd "123123"
set cm [lindex $argv 2]
set bash [lindex $argv 3]
spawn ssh $user@$name
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "*#"
send "$cm $bash\r"
expect "*#"
send "exit\r"

#解:通过传递参数的方式执行交互式远程连接和调用shell脚本,并输出日志(Expect.log。)Expect.log可以络通的态看到网下为什么没有执行shell。
#通过shell调用以上expect脚本。以下是俩种写法:
#写法1:
#!/bin/bash
#同一网段IP循环执行相同的操作
for i in $(seq 135 250)
do
      expect ssh.exp root 192.168.106.$i bash /tmp/1.sh
        if [ $? = 0 ];then
                echo -e         		`date`     "192.168.106.$i:  执行成功" >>/opt/jzgk_Correct.log
        else
                echo -e                 `date`     "192.168.106.$i:  执行失败\n" >>/opt/jzgk_Error.log
        fi
done

#写法2:
#!/bin/bash
#不同IP网段循环执行相应的操作
cat iplist | while read a
do
	expect ssh.exp root $a bash /tmp/1.sh
        if [ $? = 0 ];then
                echo -e         		`date`     "$a:  执行成功" >>/opt/jzgk_Correct.log
        else
                echo -e                 `date`     "$a:  执行失败\n" >>/opt/jzgk_Error.log
        fi
done
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值