最近有个需求,需要对现场的几十台设备的配置文件进行修改。单台设备手动操作的话,分以下几个步骤:
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地址,这样的话,就更轻松了