Chinaunix首页 | 论坛 | 博客
  • 博客访问: 701486
  • 博文数量: 108
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1436
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-31 09:49
文章分类
文章存档

2019年(16)

2015年(2)

2014年(20)

2013年(70)

我的朋友

分类: 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"


第二个例子:

  1. #!/usr/bin/expect -f

  2. set ipaddress [lindex $argv 0]
  3. set passwd [lindex $argv 1]
  4. set timeout 30
  5. spawn ssh root@$ipaddress

  6. #expect "yes/no"
  7. #send "yes\r"

  8. expect "password:"
  9. send "$passwd\r"
  10. expect "]*"
  11. send "mkdir -p /tmp/haha/haha2\r"
  12. send "exit\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" }
}
开始学习写脚本,需要和实际结合,但愿可以进步一些。

阅读(4379) | 评论(0) | 转发(0) |
0

上一篇:linux账号管理

下一篇:expect脚本用法解释

给主人留下些什么吧!~~