需求 在多台服务器上执行命令 并收集结果
expect批量登录远程服务器执行命令lsof -i , 并将结果反馈回本地
==========================================================
#expect是一个工具,其脚本中不支持shell,理论上只用于单机自动化管理,假如有100台机,貌似你也不会傻到往里面写100个spawn
#!/usr/bin/expect -f
set ip [lindex $argv 0]
set password [lindex $argv 1]
set timeout 3
spawn ssh root@$ip
expect {
"*yes/no" { send "yes\r";exp_continue}
"password:" {send "$password\r"}
}
expect "#*"
send "cd /home;lsof -i >/home/lsof_$ip.log;scp /home/lsof_$ip.log/ 192.168.170.76:/home/\r" #下面需要验证170.76的密码的,因为我的密码和78,84都一样,因此可以直接调用,假如你本地密码不同于其他,应该在脚本上定义多一个set password
#spawn scp root@$ip:/home/lsof_$ip.log /home/
expect {
"*yes/no" {send "yes\r";exp_continue}
"password:" {send "$password\r"}
}
expect eof
============================================================
建立个文件,批量输入你的ip和密码,格式以空格间隔,我新建的文件名为user_password
内容如下:
192.168.170.78 celia0213
192.168.170.84 celia0213
。。。。。。
。。。。。。
=============================================================
写个shell脚本让expect循环执行自动化管理user_password里面包含的ip
#!/bin/sh
cat /home/kerwin/shell/user_password |while read ip password
do
/usr/bin/expect -f /home/kerwin/shell/expect.sh $ip $password
done
===============================================================
阅读(573) | 评论(0) | 转发(0) |