2013-11-14 140 views
2

我必須在遠程服務器上運行一些用戶定義的命令。所以我做了以下。它適用於許多命令,如crontab -llsdate +%s,等等......不過,它不爲ip addr某些命令不能通過ssh在遠程服務器上運行(shell)

工作時,我居然SSH INSIDE ip addr正常工作的服務器。但是當我使用ssh執行它時,它沒有。

這是我如何執行它。

$ sshpass -p myPassword ssh -q [email protected] 'ip addr' > $PWD/tmp 
$ cat $PWD/tmp 

同樣,這適用於到目前爲止除了ip addr我試過的任何命令。 對於ip addr它提供了以下輸出

bash: ip: command not found 

所以我想知道爲什麼,如果有什麼不對我做....

而且,請不要sugges使用rsync或其他任何非默認的linux命令,因爲我工作的環境沒有它們,我也沒有安裝權限。

預先感謝您

回答

2

這是因爲非交互式SSH會話不會源的登錄配置,其中除其他事情是設置你的PATH變量引起的。

默認路徑不包含/sbin,這是ip命令的常用位置。

+0

我明白了......所以你告訴我,當我通過ssh運行命令時,它具有「有限」訪問權限?另外,有沒有辦法解決這個問題?或者它真的取決於我想通過ssh運行的命令。 – Masster

+1

這並不是說它具有有限的訪問權限,而是因爲你以非交互方式運行,你可能需要自己做一些工作。在ip命令出現問題的情況下,可以使用命令調用PATH =/sbin:/ usr/sbin:$ PATH ip addr來解決這種情況。通過ssh遠程複製它,然後通過ssh調用它,可以更好地完成對ssh的多個命令。這樣你就可以添加一行設置PATH到腳本,因此只執行一次。 – Petesh

+0

好吧,我明白了。因爲我不知道用戶想要執行什麼操作,所以我可以在每個命令之前放置PATH =/sbin:/ usr/sbin:$ PATH?假設用戶命令存儲在'$ myCommand'中。我會簡單地執行'sshpass -p mypass ssh [email protected]'PATH =/sbin:/ usr/sbin:$ PATH $ myCommand'' – Masster

相關問題