2010-12-10 59 views
30

我使用幾種不同的服務器,當我使用SSH時,能夠設置一些環境變量以使它們處於活動狀態,這對我們來說很有用。問題是,某些變量的內容包含敏感信息(哈希密碼),所以我不想讓它放在.bashrc文件中 - 我只想保留在內存中。我可以通過ssh轉發env變量嗎?

我知道你可以使用SSH轉發DISPLAY變量(通過ForwardX11)或SSH代理程序(通過ForwardAgent),所以我想知道是否有一種方法可以自動轉發任意環境變量的內容通過SSH連接。理想情況下,我可以在.ssh/config文件中設置一些內容,以便在需要時自動運行。有任何想法嗎?

回答

22

您可以,但它需要更改服務器配置。

閱讀條目AcceptEnvsshd_config(5)SendEnvssh_config(5)

更新

您也可以通過他們在命令行上:

ssh [email protected] "FOO=foo BAR=bar doz" 

關於安全,注意,除了可以訪問遠程計算機所有人都可以看到通過環境變量任何正在運行的進程。

如果你想保持信息的保密最好是通過stdin通過它:

cat secret_info | ssh [email protected] remote_program 
+1

在我想起我必須重啓sshd才能重新讀取其配置文件之前,我花了一些時間,但是一旦我這樣做了,'AcceptEnv'和'SendEnv'就像一個魅力一樣工作。正是我在找什麼!謝謝! – singingwolfboy 2010-12-10 15:25:52

11

您無法自動做到這一點(除了$DISPLAY您可以與您的擴展認證信息,以便遠程程序實際上可以連接到您的顯示器一起-X轉發),但你可以使用的腳本來「這裏的文檔」:

ssh ... <<EOF 
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH" 
runRemoteCommand 
EOF 

未轉義的變量將在本地展開並將結果傳輸到遠程端。因此PATH將被設置爲遠程值$HOME

+0

的'轉義的變量將擴展locally'部分救了我的一天。這在其他手冊中沒有解釋。謝謝! – Kolyunya 2018-03-04 20:51:10

相關問題