SSH - 通过每个连接设置环境变量 - Godaddy 共享主机

inf*_*rno 17 linux ssh environment-variables

我的问题是,我必须在服务器上设置环境变量(如 GIT_EXEC_PATH)。我需要每个连接的变量(所以通过 bash 和远程命令)。我设法通过 bash 使用 .bash_profile 设置了这些变量,但是我在使用远程命令时遇到了问题。我发现可以在实际 rsa 密钥之前在 ~/.ssh/authorized_keys 中编写命令,但我不想总是在那里写,我需要一个永久的解决方案......我发现 ~/.ssh /rc 文件由每次 ssh 登录执行,所以我把我的 env 变量声明放在那里,但它没有用。变量在 rc 文件中设置,但之后它们消失了。:S 也许 rc 文件在子外壳中运行 :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 和 remote 两者提供),但我认为它是在 subshel​​l 中调用的,因为变量消失了。
  6. ~/.ssh/authorized_keys 每次都来自,但我必须在每个 rsa 密钥之前编写命令(所以我不想配置它)。

概括:

我可以很好地配置 bash(使用 .bash_profile),但我无法配置远程调用。那就是问题所在。我正在寻找一个由 bash 和远程命令提供的文件。

例如:

git-upload-pack 命令找到 exe 文件,因为设置了 GIT_EXEC_PATH 环境变量,但是使用 remote: "git clone user@domain.com:myrepo local/myrepo" 服务器找不到该命令,因为 GIT_EXEC_PATH未设置。

编辑2:

根据this和我的printenv 日志: ~/.ssh/rc 在普通shell 中运行,而不是在子shell 中,所以这是一个谜语为什么env 变量不粘...

我创建了一个可执行文件:~/logenv

echo "" >> mylog.txt
date >> mylog.txt
printenv >> mylog.txt
echo "" >> mylog.txt
Run Code Online (Sandbox Code Playgroud)

并将其放入~/.ssh/rc

export AAA=teszt
source ~/logenv
Run Code Online (Sandbox Code Playgroud)

通过 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
Run Code Online (Sandbox Code Playgroud)

通过远程“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
Run Code Online (Sandbox Code Playgroud)

所以rc文件是来源,但在那之后变量消失了......:S

ste*_*tew 12

假设您有UsePAM yesin /etc/ssh/sshd_config,并假设您希望为每个用户设置这些环境变量,您可以让 pam 为您设置环境变量。如果您定义了环境变量,则/etc/gitenv可以将此行添加到/etc/pam.d/sshd

auth required pam_env.so envfile=/etc/gitenv
Run Code Online (Sandbox Code Playgroud)

或者通过检查这个文件,您可能会发现已经有一个 pam_env.so 正在使用,并且已经有一个可以添加内容的文件。请小心,并确保在结束 ssh 会话之前已经彻底测试了您的更改,因为当您使用 pam 时,如果您不小心,您可能会完全破坏您登录服务器的能力。


Huy*_*ens 5

我正在使用 .ssh 文件为我的 SSH 连接设置一些环境变量~/.ssh/environment。该文件可以包含表单中的变量VAR=value,无需显式导出它们。

但是,默认情况下,SSH 服务器进程会忽略此用户配置文件,除非选项 PermitUserEnvironment 设置为 yes。因此,您需要确保在 SSH 服务器上编辑 /etc/sshd_config 以添加或更新此参数:

PermitUserEnvironment yes
Run Code Online (Sandbox Code Playgroud)

您需要重新加载 SSH 服务器配置。在 RHEL 或 Suse Linux 上,您可以(以 root 身份)

/sbin/service sshd reload
Run Code Online (Sandbox Code Playgroud)

(如果不行的话可以用ssh替换sshd)

在 Ubuntu 上(使用 upstart)你可以

sudo reload ssh
Run Code Online (Sandbox Code Playgroud)

在任何其他 Linux 上,您可以尝试(以 root 身份)

/etc/init.d/sshd reload
Run Code Online (Sandbox Code Playgroud)

(将 sshd 替换为 ssh 或 openssh 或与 SSH 服务器初始化脚本相对应的任何内容)


inf*_*rno 2

我不再有 godaddy 共享主机,因此我无法检查建议的解决方案是否有效。这将保留为已接受的答案,因为当我提出问题时它对我有用。其他答案可能也有效。我让社区通过投票来决定。

好的。解决办法是godaddy共享主机上没有解决办法。我尝试了一切,但没有任何效果,所以我决定继续使用 ~/.ssh/authorized_keys:

command="~/connect.sh" ssh-rsa AAAAB3NzaC...
Run Code Online (Sandbox Code Playgroud)

在~/connect.sh中:

#!/bin/bash
if [ -f "${HOME}/.env_profile" ]; then
        source ~/.env_profile
fi;

if [ "x${SSH_ORIGINAL_COMMAND}x" == "xx" ]; then
        $SHELL --login
else
        eval "${SSH_ORIGINAL_COMMAND}"
fi;
Run Code Online (Sandbox Code Playgroud)

在 ~/.env_profile 中:

export PATH=$PATH:$HOME/bin:$HOME/git/libexec/git-core
export LD_LIBRARY_PATH=$HOME/git/lib
export GIT_EXEC_PATH=~/git/libexec/git-core
export GIT_TEMPLATE_DIR=~/git/share/git-core/templates
Run Code Online (Sandbox Code Playgroud)

所以我必须将命令=“...”复制到authorized_keys中的每个rsa密钥。这是代码重复,但我认为在 godaddy 共享主机上没有其他解决方案。