Ssh

SSH - 通過每個連接設置環境變數 - godaddy 共享主機

  • November 8, 2019

我的問題是,我必須在伺服器上設置環境變數(如 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 文件為空。這些文件中有註釋,如果您好奇,我可以在這裡複製。

  1. ~/.bash_profile 來自(僅通過 bash 連接),
  2. ~/.bashrc 從來沒有來源,
  3. ~/.profile 從未採購過,
  4. ~/.ssh/environment 從未採購過,
  5. ~/.ssh/rc 是來源(通過 bash 和遠端兩者),但我認為它在 subshel​​l 中呼叫,因為變數消失了。
  6. ~/.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 中執行,而不是在 subshel​​l 中,所以這是一個謎,為什麼 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 yesin /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 伺服器初始化腳本相對應的內容)

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