分类: LINUX
2013-11-04 21:16:05
我有一个方法,供参考
1.把脚本好后(比如myshell),放在一台服务器上(192.168.0.1)
2.在其它服务器上(比如192.168.0.2-192.168.0.100)写一个脚本(比如getshell),这个脚本会从192.168.0.1下载myshell然后执行.把getshell加入到crontab中,让它定时执行.
#!/bin/shell
cd /PATH
ftp
chmod +x XXXXX.sh
./sh
3.以后只要更改myshell,其它服务器上就会自动执行新脚本.
另一个方法
可以用expect + ssh
网上看到的两个不错的例子,特别的记录一下。
一、
脚本名字:123.sh
作用:运行expect 123.sh后,能够自动登录到ip为125.1.1.1-30这30台机器运行一些相同的命令,省去了每台机器登录重复敲命令,浪费时间
#!/user/bin/expect -f
for {set i 1} {$i<=30} {incr i} {
spawn ssh -l root 125.1.1.$i
expect "*password: "
sleep 5
send "QwErT\r"
send "find / -name hao.txt\r"
interact
}
但是我运行后发现只能登陆第一台机器,也就是125.1.1.1运行命令find / -name hao.txt,
后面的ip机器全部没有运行我要运行的命令,请问如何解决???
遇到了问题,解决的办法是这个。
interact变为expect eof
然后咧,
终于搞好了,我加了sleep 10,让他停止一下就可以了
send "pYS439wF\r"
sleep 10
send "touch /root/hao.txt\r"
第二个例子:
试着写了一个expect脚本,ssh自动登录然后执行某条命令,可是遇到没有登录过的机器需要输入yes,有没有可以用类似于if判断的方法让他自动判断??再网上找了半天也不知道这条if该怎么写。。。。。。
解决办法1、
expect {
"(yes/no)?" {
send "yes\n"
}
"password:" {
....
}
』
判断语句
if {$havepass == 0} {
expect "password:" { send "$pw\n" }
}
解决办法2、
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
开始学习写脚本,需要和实际结合,但愿可以进步一些。