10 Jul 2009
expect+ssh实现无人值守批量管理
和我一起进公司的几个应届都给安排了不错的技术活让练手,让我负责解决客户问题无法访问网站问题,整理机器硬件信息然后录入公司网站,纯体力劳动。或许是因为有学历?这高中退学的小子不如大学毕业的有培养价值,即使是一个烂大学。
废话不多说,简单描述下情况:公司共有40台服务器,硬件配置都不一样。需要统计出每个服务器的硬件配置,网络参数,计划任务,软件环境,用户,负载情况,BIOS以及机器序列号。
首先要实现的是自动登录,我对tcl并不熟悉,所以只是初步实现了功能,很多细节没有考虑。(比如有些机器是不允许登录ftp的,事后我又专门写了一个scp的脚本解决这个问题)。里面的info.sh是我统计机器信息时候用的,请根据需要替换成自己的脚本。
#!/usr/bin/expect -f
set ipaddr [lrange $argv 0 0] #ip参数
spawn ssh -p 9922 -o StrictHostKeyChecking=no $ipaddr
expect "*?assword:*"
sleep 3
send "123\r" #密码
expect "]#"
send "rm -rf /root/info.sh\r"
expect "]#"
send "rm -rf /root/toftp/*\r"
expect "]#"
send "wget www.zhangyiqun.cn/hard.sh\r"
sleep 3
expect "]#"
send "chmod +x info.sh\r"
expect "]#"
send "/root/info.sh\r"
expect "]#"
send "cd /root/toftp\r"
expect "]#"
send "ftp 72.167.232.88\r"
sleep 2
expect "Name (72.167.232.191:root):"
send "zhangyiqun\r"
sleep 2
expect "Password:"
send "123\r"
sleep 3
expect "ftp>"
send "cd data\r"
sleep 3
expect "ftp>"
send "put *\r"
sleep 8
expect eof
现在来实现ip传递
#!/bin/bash
for i in `awk '{print $1}' /root/Download/ipaddr`
do
/root/Download/dele.sh $i
done
我把ip放在了ipaddr,可以自动读取。因为我们的服务器密码都一样所以我在expect中直接把密码设成了123 。也许以后会遇到多个服务器密码不同的问题,那也不复杂,将密码放入ipaddr用awk截取即可。
#本人长期寻找好活(兼职亦可),如果有的话请朋友们推荐一下啦~