linux执行另外一个服务器上的脚本,远程对多台linux执行同一个脚本的办法

我有一个方法,供参考

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"

第二个例子:

#!/usr/bin/expect -f

set ipaddress [lindex $argv 0]

set passwd [lindex $argv 1]

set timeout 30

spawn ssh root@$ipaddress

#expect "yes/no"

#send "yes\r"

expect "password:"

send "$passwd\r"

expect "]*"

send "mkdir -p /tmp/haha/haha2\r"

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" }

}

开始学习写脚本,需要和实际结合,但愿可以进步一些。

你可能感兴趣的:(linux执行另外一个服务器上的脚本,远程对多台linux执行同一个脚本的办法)