Re: [問題] 用expect, ssh 在兩server傳值

看板LinuxDev作者 (京都念慈庵,賈詡念費翔)時間12年前 (2013/01/25 10:49), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/2 (看更多)
※ 引述《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
請問我是單行code去跑 發現 a變數只在B server local
01/25 11:55, 1F

01/25 11:57, , 2F
還是我錯了.所以我暫時的處理方法是在B作一個file在傳回A
01/25 11:57, 2F
※ 編輯: drag 來自: 59.124.230.221 (01/25 13:20)

01/25 13:21, , 3F
我要說的是:原來那行這樣定義只會在B server local有效
01/25 13:21, 3F

01/25 13:21, , 4F
故我在B server上並沒有定義a了
01/25 13:21, 4F
文章代碼(AID): #1H0VAgsW (LinuxDev)
文章代碼(AID): #1H0VAgsW (LinuxDev)