作者drag (京都念慈庵,贾诩念费翔)
看板LinuxDev
标题Re: [问题] 用expect, ssh 在两server传值
时间Fri Jan 25 10:49:10 2013
※ 引述《imio24 (imio)》之铭言:
: 我需要从server A 里某script对serverB执行某command 并从B取得回传值到server A
: 请问我要如何再server A拿到server b的server name (Linux xxx.com 2.6.32-20130101.60.1.bh6.x86_64 #1 SMP Tue Jan 1 22:59:09 EST 2013 x86_64 x[A86_64 x86_64 GNU/Linux)
: 谢谢
: $sh script.sh 10.0.0.1 admin 1234
: script.sh
: #!/bin/sh
: export ip=$1
: export usr=$2
: export passwd=$3
: export a=""
: expect -c 'spawn ssh '$usr'@'$ip'; expect password; send "'$passwd'\n" ; expect "*]#" ; send "a=`uname -a | grep Linux`\n" ; send "exit\n" ; interact'
: 再server B
: $uname -a | grep Linux
: Linux xxx.com 2.6.32-20130101.60.1.bh6.x86_64 #1 SMP Tue Jan 1 22:59:09 EST 2013 x86_64 x[A86_64 x86_64 GNU/Linux
我修改了一下~
也许这是你要的,
1. 在server B上面定义a应该不等於server A的a,故在远端只要直接送值就好,回来暴力grep
2. 请注意你prompt是写死的("****]#"?),哪一天换server prompt改变,这个script就会卡死了~
3. 因为我测试的ssh port不是预设22,所以我鸡婆的加了param
4. 真是有趣,我今天才知道有expect这套件,就大家切磋切磋吧~
interact後面是不是要再塞一些什麽动作啊?<--也许是白痴问题
5. 还可以写再龟毛一点例如说param没有传进来时要怎样处理(show usage?用预设值?)
$sh script.sh 10.0.0.1 admin 1234 22
#!/bin/sh
export ip=$1
export usr=$2
export passwd=$3
export rport=$4
export a=""
export a=`expect -c 'spawn ssh -p '$rport' '$usr'@'$ip'; expect password; \
send "'$passwd'\n" ; expect "* #" ; send "uname -a\n" ; send "exit\n" ; \
interact'|grep "Linux "`
echo "B server version: " $a
--
明月几时有?把酒问青天,不知天上宫阙,今夕是何年?
我欲乘风归去,惟恐琼楼玉宇,高处不胜寒;
起舞弄清影,何似在人间。
转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?
人有悲欢离合,月有阴晴圆缺,此事古难全。
但愿人长久,千里共婵娟。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.124.230.221
※ 编辑: drag 来自: 59.124.230.221 (01/25 10:52)
1F:推 imio24:请问我是单行code去跑 发现 a变数只在B server local 01/25 11:55
2F:→ imio24:还是我错了.所以我暂时的处理方法是在B作一个file在传回A 01/25 11:57
※ 编辑: drag 来自: 59.124.230.221 (01/25 13:20)
3F:→ drag:我要说的是:原来那行这样定义只会在B server local有效 01/25 13:21
4F:→ drag:故我在B server上并没有定义a了 01/25 13:21