Re: [問題] 用expect, ssh 在兩server傳值
※ 引述《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)
推
01/25 11:55, , 1F
01/25 11:55, 1F
→
01/25 11:57, , 2F
01/25 11:57, 2F
※ 編輯: drag 來自: 59.124.230.221 (01/25 13:20)
→
01/25 13:21, , 3F
01/25 13:21, 3F
→
01/25 13:21, , 4F
01/25 13:21, 4F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章
77
188