2013-11-25 193 views
2

我遠程服務器上使用的shell中,運行一個簡單的命令。命令執行外殼

我目前登錄myHost01和我在myHost02

預期的結果運行此命令是this is a test myHost02。不過,我得到this is a test myHost01

這是我的命令

sshpass -p root ssh -q [email protected] "echo this is a test `hostname`" 

我不知道爲什麼它走的是服務器的主機名,我從運行命令!


這也是值得注意的是,當我運行這個

sshpass -p root ssh -q [email protected] "hostname" 

我得到myHost02(這是正確的輸出)

+0

,只是:'SSH ..... @ ...「$ {command}」'。例如:'command = hostname; ssh ........ @ ....「$ {command}」'。注意,它可以很容易地得到TRICKY ...有時最好是1)創建一個本地'the_script'腳本,和2)'scp the_script user @ remotehost:/ tmp/safe_name' 3)'ssh user @ remotehost「/ tmp/safe_name「'。 safe_name是目標機器上唯一的名稱。請注意:其他人可以替換safe_name(尤其是在/ tmp!內)。而在這些做法許多其他潛在的安全漏洞...... –

回答

3

在單引號傳遞命令,如下圖所示。雙引號導致shell就地執行命令替換hostname(本地),並通過該得到的線this is a test myHost01ssh

sshpass -p root ssh -q [email protected] 'echo this is a test `hostname`' 
如果有包含什麼應該被遠程完成本地$命令變量
+0

我只是跑'sshpass -p根SSH -q [email protected]「迴響」這是一個測試hostname'''但我還是得到了第一臺主機的名字! ! (我把主機名之間''我都不理他們的意見因爲我想有太多的人,它會是不可讀) – Masster

+0

@Matin,你應該只具有一個單引號的存在。你的命令有兩個。看看我的示例命令 – iruvar

+0

好吧,但這個命令就是一個例子。真正的命令在用戶將寫入的配置文件中....用戶可以編寫任何命令。沒有什麼應該阻止他把這樣的單引號.... 有沒有辦法消除這個限制?? !! – Masster