通过expect实现远程上传、执行脚本

最近有个需求,需要对现场的几十台设备的配置文件进行修改。单台设备手动操作的话,分以下几个步骤:

1. 根据设备号找到vpn地址

2. 进入堡垒机

3. 通过堡垒机和指定设备的vpn地址,远程进入该设备

4. 修改配置文件,并重启相关应用程序

因为设备比较多,一个个操作太麻烦,因此想通过脚本来做一些自动化的动作。

1. 写一个脚本modify.sh,实现4的操作。在目标机上执行modify.sh,会修改配置,重启应用。

2. 写一个脚本execute.sh,实现将modify.sh远程上传到各个目标机中,并执行modify.sh。

这里记录一下execute.sh。

set timeout 3  #设置超时时间,单位为秒
set machineIp [lrange $argv 0 0] //目标机的vpn地址
spawn scp modify.sh star@$machineIp:/home/star/bin/collector #将modify文件,通过scp上传到目标机文件夹
expect "*password*"  #ssh上传时,会让填入密码,因此首先等待目标机反馈,让输入密码
send "star\r"  #发送密码,star。\r表示回车。因为正常scp输入密码时,也需要跟上一个回车键,所以在star后面要加上\r
expect 100%  #等待上传完毕。scp文件上传完毕后,会有显示100%,文件大小,消耗时间等信息。这里expect 100%,就是等文件上传完毕了,再执行下一条语句
spawn ssh star@$machineIp  #发起ssh连接
expect {
    "(yes/no)" {send "yes\r";exp_continue}  #初次ssh连接会提示,是否建立连接,因此需要输入yes。因为后面还有输入密码操作,因此加上一个exp_continue,继续等待。
    "password:" {send "star\r"}  #输入密码,即可远程进入设备。一旦登录,会显示设备的"用户名@机器名",这里远程设备的机器名都是star,所以显示 @star
}
expect @star #登录后显示@star
send "cd /home/star/bin/collector\r" #切换目录

expect "\r" #等待cd命令执行结束,即回车键
expect collector #切换到collector目录后,在命令行会看到collector文件夹
send "chmod +x modify.sh\r" #将modify.sh设为可执行
expect eof #等待chmod执行结束
send "sh ./modify.sh\r" #执行脚本
expect eof #等待回车结束
interact #允许命令交互

将这两个脚本放到堡垒机上,然后./execute.sh vpnIP就可以将modfiy.sh远程上传到目标机行,并执行该脚本。

下一步,最好能实现,自动根据设备号,找到vpn地址,这样的话,就更轻松了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值