2017-08-14 204 views
0

我sshing到遠程計算機並執行一個命令,但我的遠程計算機上的$ PATH設置爲用戶在原始計算機中的$ PATH,而不是那個sshed計算機。但是,如果我ssh到遠程計算機並執行回聲$ PATH,它正確設置爲登錄用戶在新機SSH遠程機器和執行命令

[email protected]> ssh [email protected] echo $PATH 

這將打印用戶的路徑,在這種情況下,根在host1上不在remotemachine

[email protected]> ssh [email protected] 
[email protected]'s password: **** 
echo $PATH 

以上管理工作正常

基本上它不是改變環境到遠程機器上的新用戶。不知何故,即使我登錄到遠程計算機,它仍保留來自host1的root環境。如果我做LS -al /,它顯示了遠程機器上,這意味着我登錄到遠程機器的目錄

回答

3

讓我們用set -x調試我們實際運行:

$ set -x 
$ ssh localhost echo $PATH 
+ ssh localhost echo /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

線與+告訴我們,命令,我們實際上運行是:

ssh localhost echo /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

不出所料,這也是我們回來的價值,不管什麼樣的遠程PATH是。

我們可以單引號的命令,以確保我們發送的echo $PATH代替echo /usr/local/bin:...到服務器:

$ ssh localhost 'echo $PATH' 
+ ssh localhost 'echo $PATH' 

現在set -x顯示ssh正在與未展開命令,而不是擴展命令運行,我們作爲回報獲得遠程PATH

+0

打印不同的$ PATH,但仍然不同於它打印的內容,如果我ssh到遠程機器,然後在遠程機器控制檯上執行echo $ PATH。 – PMat

+1

這很可能是遠程主機上的配置問題。你可以嘗試用'ssh -tt你@ yourhost bash -ilc''echo \ $ PATH'''來僞造一個帶有tty的交互式登錄shell。 –

+0

是的,工作。 – PMat

0

使用-t

ssh [email protected] -t 'echo $PATH' 

從手冊頁:

-t  Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a 
     remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t 
     options force tty allocation, even if ssh has no local tty. 

的解釋是有點神祕,但它會執行任何你加上引號。單引號很重要,因此$PATH在執行之前不會展開。

+0

不行不行 – PMat

+0

@PMat,你是什麼意思的「不起作用」?當你運行這個命令時會發生什麼?輸出會有幫助。 – ryanpcmcquen