2013-12-14 82 views
1

我需要處理很多遠程機器,並且每臺機器共享一個全局環境變量(像CONTROLLER_IP這樣的 )。當我嘗試SSH到遠程機器時,我想根據當前的本地主機設置來設置CONTROLLER_IP 。有什麼辦法可以實現嗎?在ssh會話中繼承環境變量?

實施例:

在本地主機的主機,我設置OFC1 = 192.168.0.1,和OFC2 = 192.168.1.1 ,我需要ssh到OFS1,OFS2。 我想這樣做:

CONTROLLER_IP=$ofc1 ssh [email protected]; CONTROLLER_IP=$ofc2 ssh [email protected] 

然後我會在每個SSH會話的CONTROLLER_IP設置。 (如上圖所示不起作用的代碼...)

+0

可能的重複[我可以通過SSH轉發env變量? ](HTTP://計算器。com/questions/4409951/can-i-forward-env-variables-over-ssh) –

+0

'$ ofc1'是可疑的。你確定你不只是指'CONTROLLER_IP = ofc1'? –

+0

不,ofc1只是我的localhost中的另一個env var。 – alexzzp

回答

3

/etc/sshd_config在服務器上更換CONTROLLER_IP出現在你的東西遠程腳本可以定義接受的環境變量列表使用AcceptEnv設置,然後你可以發送這樣的環境變量:

CONTROLLER_IP=$ofc1 ssh -o SendEnv=CONTROLLER_IP [email protected] 

但這似乎有點大材小用爲你的目的。

另一種方法是通過變量的遠程命令,就像這樣:

ssh [email protected] "CONTROLLER_IP=$ofc1 somecmd" 

或者,如果你運行多個遠程命令則是這樣的:

ssh [email protected] "export CONTROLLER_IP=$ofc1; cmd1; cmd2; cmd3; ..." 

如果需要引用變量的值,你可以這樣做:

ssh [email protected] "CONTROLLER_IP='$ofc1' somecmd" 
+0

謝謝!它只是工作 – alexzzp

0

嘗試

ssh [email protected] "env CONTROLLER_IP=$ofc1 somescript" 

(假設$ofc1進行評估,以一些IP地址像12.234.56.178沒有空格或調皮字符)

或許

ssh [email protected] "env CONTROLLER_IP='$ofc1' somescript" 

if $ofc1可能包含空格或調皮字符

其中somescript是遠程機器上的腳本ofs1;如果你想要一個交互的shell嘗試

ssh [email protected] "env CONTROLLER_IP='$ofc1' /bin/bash" 

最後,ssh通常設置一些環境變量(在遠程機器上),尤其是SSH_CONNECTION之一。你可以在遠程機器上使用它。它的第三個字段是源主機的IP地址(您在其上執行ssh ...的IP地址)。因此,也許在遠程主機上的.bashrc可能包含

if [ -n "$SSH_CONNECTION" ]; then 
    export CONTROLLER_IP=$(echo $SSH_CONNECTION|cut -f3 -d' ') 
fi 

更好,但使用SSH_CONNECTION

+0

我想發送env var的設置,但仍然能夠登錄到ssh會話。你的代碼只是運行一些命令並退出ssh。 – alexzzp