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 文件是空的。这些文件中有注释,如果你好奇我可以复制到这里。
概括:
我可以很好地配置 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 时,如果您不小心,您可能会完全破坏您登录服务器的能力。
我正在使用 .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 服务器初始化脚本相对应的任何内容)
我不再有 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 共享主机上没有其他解决方案。
| 归档时间: |
|
| 查看次数: |
39060 次 |
| 最近记录: |