2010-07-28 209 views
1

我想通過ssh發出命令與參數,但外殼沒有正常擴展命令任何想法我在做什麼錯這個發送命令通過ssh與參數

for i in 71 72 73 74 75 
do 
    for server in server1 server2 
    do 
     somestr="Some String" 
     echo "$server hdiskpower$i \c" ; ssh $server "lsattr -El hdiskpower$i |grep $somestr " 
    done 
done 
+0

丹尼斯感謝編輯的腳本更易讀現在 – Lisa 2010-07-28 07:14:53

回答

0

必須使用-t參數來設置ssh使用僞tty。如果您想在遠程機器上運行該命令,你會通過

ssh $server -t "lsattr -El hdiskpower$i|grep $somestr" 
+0

都能跟得上它仍然說的grep:0652-033無法打開卷。 我在AIX上如果有問題 – Lisa 2010-07-28 06:20:46

+0

由於這是grep報告的錯誤,所以問題出在你發送的命令上。如果你在沒有ssh的遠程機器上運行完全相同的命令,它是否工作?例如'lsattr -El hdiskpower71 | grep「somethingsomething」'。 – vtorhonen 2010-07-28 06:28:04

+0

是的,它工作沒有SSH,如果硬編碼的價值,而不是變量 – Lisa 2010-07-28 06:33:21

1

如果您傳遞一些變量來遠程服務器的指令內做到這一點,那麼這些變量必須在該遠程服務器定義。

像,如果你在腳本中硬編碼命令,如 "echo "$server hdiskpower$i \c" ; ssh $server lsattr -El hdiskpower71 |grep XYZ"那麼它肯定適合你。

同時,我會努力使它適用於變量。

0

我認爲這是你需要的: 首先你需要在你的機器上安裝sshpass。 那麼你可以編寫自己的腳本:

while read pass port user ip; do 
sshpass -p$pass ssh -p $port [email protected]$ip <<ENDSSH1 
    COMMAND 1 
    . 
    . 
    . 
    COMMAND n 
ENDSSH1 
done <<____HERE 
    PASS PORT USER IP 
     .  .  .  . 
     .  .  .  . 
     .  .  .  . 
    PASS PORT USER IP  
____HERE