Ssh

在 ssh 會話中獲取自定義 .bashrc

  • March 20, 2011

目前,我們有很多共享ssh 登錄到各種伺服器,如果我過多地擺弄預設 shell,我的同事不會喜歡它。但是,我確實有很多別名和自定義函式列表.bashrc,我想跟著我。

此外,由於某些連接可能很棘手,我喜歡做的第一件事是啟動螢幕會話,因此如果連接再次放棄我,我可以重新登錄並繼續從我離開的地方繼續前進。

目前,我通過在我的 ssh 登錄名中附加一個非常複雜的字元串來做到這一點:

ssh -t -l sharedname someserver.example.com 'if [ -z \`find ~ -maxdepth 1 -iname '.wrikken_bashrc.sh' -mtime -14 \` ]; then scp wrikken@wrikken.example.com:.bash_remote.sh ~/.wrikken_bashrc.sh; fi; screen -h 2000 -DR wrikken bash --rcfile ~/.wrikken_bashrc.sh'

這工作令人滿意(當然,一旦在文件中設置,我就不必鍵入它.bash_remote.sh),但我嚴重懷疑這是否是 / 一個正確的解決方案。此外,偶爾必須輸入我的密碼才能更新.wrikken_bashrc.sh文件當然很痛苦。不幸的是,個人帳戶不是一種選擇。

簡而言之:有沒有更好的方法讓我的自定義別名和函式在 ssh 登錄時跟隨我?

我們的裝備在我們的開發伺服器上使用了類似的設置。如果我們的開發人員需要執行命令來控制伺服器實例,他們可以使用我們的“assume”命令——它只是 ssh 的一個包裝器。生產伺服器是開發人員的禁區,除非我們需要調試一些嚴重的東西。

每個被授權登錄伺服器實例帳戶的開發人員在該伺服器的 authorized_keys 文件中都有一個條目(有關詳細資訊,請參閱 AUTHORIZED_KEYS 文件格式部分)文件,但每個授權密鑰都有一個標誌,該標誌為其使用者名設置唯一的環境變數:

environment="SSHUSER=jason" ssh-rsa (BASE64-ENCODED-KEY) jason@localhost

在該伺服器實例的 .bashrc 中,我有一些程式碼片段:

USERHOME=$(eval "echo ~$SSHUSER")
if [ -f "$USERHOME/.client_bashrc" ]; then
   . "$USERHOME/.client_bashrc"
fi

我們的開發人員可以在他們的主目錄中保留一個具有全球可讀權限的 .client_bashrc 文件(與他們的 .bashrc 分開)。將它們的 .bashrc 與 .client_bashrc 分開有助於提高安全性,因為它們可以將私有定義和環境變數保存在 .bashrc 中。他們可以選擇在他們的個人 bashrc 中添加一行程式碼,以簡單地包含 .client_bashrc,並在其中保留別名和定義,以便更輕鬆地使用系統。(這一切都假設使用者的主目錄可以從開發伺服器訪問。)

Warner 在他的評論中提出了一個很好的觀點,即這種共享使用者名設置違反了安全最佳實踐。我們的系統是從幾年前共享主機上的帳戶演變而來的。我們現在才剛剛開始限制開發人員帳戶的權力,並轉向將開發人員操作放置在審核日誌中的系統。

引用自:https://serverfault.com/questions/164196