SSH - 通過每個連接設置環境變數 - godaddy 共享主機
我的問題是,我必須在伺服器上設置環境變數(如 GIT_EXEC_PATH)。我需要每個連接的變數(所以通過 bash 和遠端命令)。我設法通過 bash 使用 .bash_profile 設置這些變數,但是遠端命令有問題。我發現可以在 ~/.ssh/authorized_keys 在實際 rsa 密鑰之前編寫命令,但我不想總是在那裡寫,我需要一個永久的解決方案……我發現 ~/.ssh /rc 文件由每個 ssh 登錄執行,所以我把我的環境變數聲明放在那裡,但它沒有用。這些變數是在 rc 文件中設置的,但之後它們就消失了。:S 也許 rc 文件在子 shell 中執行 :S 有沒有辦法在 bash 和遠端命令中定義這些變數而無需重複程式碼?
編輯:
我編輯了這個問題,因為伺服器是一個 Godaddy 共享主機,所以它有一個獨特的配置。/etc/ssh/sshd_config 和 /etc/ssh/ssh_config 文件為空。這些文件中有註釋,如果您好奇,我可以在這裡複製。
- ~/.bash_profile 來自(僅通過 bash 連接),
- ~/.bashrc 從來沒有來源,
- ~/.profile 從未採購過,
- ~/.ssh/environment 從未採購過,
- ~/.ssh/rc 是來源(通過 bash 和遠端兩者),但我認為它在 subshell 中呼叫,因為變數消失了。
- ~/.ssh/authorized_keys 每次都來自,但我必須在每個 rsa 密鑰之前編寫命令(所以我不想配置它)。
概括:
我可以很好地配置 bash(使用 .bash_profile),但我無法配置遠端呼叫。那就是問題所在。我正在尋找一個由 bash 和遠端命令提供的文件。
例如:
git-upload-pack 命令找到 exe 文件,因為設置了 GIT_EXEC_PATH 環境變數,但是遠端:“git clone user@domain.com:myrepo local/myrepo”伺服器找不到該命令,因為 GIT_EXEC_PATH未設置。
編輯2:
據此,我的 printenv 日誌: ~/.ssh/rc 在普通 shell 中執行,而不是在 subshell 中,所以這是一個謎,為什麼 env 變數不粘著……
我創建了一個執行檔:~/logenv:
echo "" >> mylog.txt date >> mylog.txt printenv >> mylog.txt echo "" >> mylog.txt
並將其放入**~/.ssh/rc**:
export AAA=teszt source ~/logenv
通過 bash login & *“source logenv”*結果是:
Tue May 15 04:21:37 MST 2012 TERM=cygwin SHELL=/bin/bash SSH_CLIENT=censored SSH_TTY=/dev/pts/2 USER=myuser AAA=teszt MAIL=/var/mail/myuser PATH=/usr/local/bin:/bin:/usr/bin PWD=/home/content/65/7962465 SHLVL=3 HOME=/var/chroot/home/content/65/7962465 LOGNAME=myuser SSH_CONNECTION=censored _=/usr/bin/printenv Tue May 15 04:21:41 MST 2012 HOSTNAME=censored TERM=cygwin SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=censored
通過遠端*“ssh myuser@domain.com ’exec ~/logenv’”*,結果是:
Tue May 15 04:25:52 MST 2012 SHELL=/bin/bash SSH_CLIENT=censored USER=myuser AAA=teszt MAIL=/var/mail/myuser PATH=/usr/local/bin:/bin:/usr/bin PWD=/home/content/65/7962465 SHLVL=3 HOME=/var/chroot/home/content/65/7962465 LOGNAME=myuser SSH_CONNECTION=censored _=/usr/bin/printenv Tue May 15 04:25:52 MST 2012 SHELL=/bin/bash SSH_CLIENT=censored USER=myuser PATH=/usr/local/bin:/bin:/usr/bin MAIL=/var/mail/myuser PWD=/home/content/65/7962465 HOME=/var/chroot/home/content/65/7962465
所以rc文件是來源的,但在那之後變數消失了……:S
假設您有
UsePAM yes
in/etc/ssh/sshd_config
,並假設您希望為每個使用者設置這些環境變數,您可以讓 pam 為您設置環境變數。如果您在其中定義了環境變數,則/etc/gitenv
可以將此行添加到/etc/pam.d/sshd
auth required pam_env.so envfile=/etc/gitenv
或者通過檢查這個文件,您可能會發現已經有一個 pam_env.so 正在使用,並且已經有一個可以添加內容的文件。請小心,並確保在結束 ssh 會話之前徹底測試了您的更改,因為當您弄亂 pam 時,如果您不小心,可能會完全破壞您登錄伺服器的能力。
我正在使用
~/.ssh/environment
. 該文件可以包含表單中的變數VAR=value
,無需顯式導出它們。但是,預設情況下,SSH 伺服器程序會忽略此使用者配置文件,除非選項 PermitUserEnvironment 設置為 yes。因此,您需要確保在 SSH 伺服器上編輯 /etc/sshd_config 以添加或更新此參數:
PermitUserEnvironment yes
您需要重新載入 SSH 伺服器配置。在 RHEL 或 Suse Linux 上執行(以 root 身份)
/sbin/service sshd reload
(如果不起作用,可以用 ssh 替換 sshd)
在 Ubuntu 上(使用新貴)你做
sudo reload ssh
在任何其他 Linux 上,您可以嘗試(以 root 身份)
/etc/init.d/sshd reload
(將 sshd 替換為 ssh 或 openssh 或任何與 SSH 伺服器初始化腳本相對應的內容)