Ros*_*ers 122 ssh environment-variables
当我ssh进入服务器时,如何将环境变量从客户端传递到服务器?这个环境变量在不同的 ssh 调用之间发生变化,所以我不想在$HOME/.ssh2/environment每次进行 ssh 调用时都覆盖。我怎样才能做到这一点?
Gil*_*il' 140
当然,您可以在命令中设置环境变量,但是您必须小心引用:请记住,您的 shell 将解析您的本地命令行,然后远程 shell 将对它的字符串进行处理收到。
如果您希望变量在服务器上获得与客户端上相同的值,请尝试以下SendEnv选项:
ssh -o SendEnv=MYVAR server.example.com mycommand
不过,这需要服务器的支持。使用 OpenSSH,变量名必须在/etc/sshd_config.
如果服务器只允许某些特定的变量名称,您可以解决这个问题;例如,通用设置允许LC_*通过,您可以执行以下操作:
ssh -o SendEnv=LC_MYVAR server.example.com 'MYVAR=$LC_MYVAR; 取消设置 LC_MYVAR;出口MYVAR;我的命令'
如果 evenLC_*不是一个选项,您可以在TERM环境变量中传递信息,该变量总是被复制(但是可能有长度限制)。您仍然需要确保远程 shell 不会限制TERM变量来指定已知的终端类型。-t如果您没有启动远程交互式 shell,请将选项传递给 ssh。
env TERM="额外信息:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:*}; TERM=${TERM##*:}; 出口MYVAR;我的命令'
另一种可能是直接在命令中定义变量:
ssh -t server.example.com 'export MYVAR="额外信息"; 我的命令'
因此,如果传递局部变量:
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; 我的命令'
但是,请注意引用问题:变量的值将直接插入到远程端执行的 shell 代码段中。上面的最后一个示例假定$LOCALVAR不包含任何单引号 ( ')。
小智 18
如果您可以管理目标主机,则可以配置 sshd 以允许将本地环境变量传递给目标主机。
从 sshd_config 手册页:
PermitUserEnvironment
Specifies whether ~/.ssh/environment and environment= options in
~/.ssh/authorized_keys are processed by sshd. The default is
"no". Enabling environment processing may enable users to bypass
access restrictions in some configurations using mechanisms such
as LD_PRELOAD.
Run Code Online (Sandbox Code Playgroud)
sshd 配置通常位于 /etc/ssh/sshd_config
ken*_*orb 12
在您的本地客户端上,~/.ssh/config您可以添加SetEnv,例如
Host myhost
SetEnv FOO=bar
Run Code Online (Sandbox Code Playgroud)
注意:检查man ssh_config.
然后在服务器上,确保允许客户端在您的/etc/ssh/sshd_config配置文件中传递某些环境变量:
AcceptEnv LANG LC_* FOO BAR*
Run Code Online (Sandbox Code Playgroud)
注意:检查man sshd_config.
小智 7
那么,在您的客户端上,您有一些环境变量,并且您希望它可用于远程命令?我不认为有办法让 ssh 神奇地传递它,但你可能可以做这样的事情。而不是使用,说:
ssh remote.host my_command
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
ssh remote.host env ENV_VAR=$ENV_VAR my_command
Run Code Online (Sandbox Code Playgroud)
小智 5
@emptyset 的回应(对我来说不起作用)让我得到了这个答案:
您可以将此命令添加到您的~/.ssh/authorized_keys文件中:
command="/usr/bin/env VARIABLE=<something> $SHELL" ssh-rsa <key>
Run Code Online (Sandbox Code Playgroud)
export VARIABLE=<something>立即退出,并且 SSH 连接被关闭(将我锁定在服务器之外),而/usr/bin/env ... $SHELL将使用修改后的环境运行默认 shell。
您可以尝试调用自定义命令,假设您有无密码 ssh 登录设置。在服务器上,编辑与客户端密钥对应的 ~/.ssh/authorized_keys 条目:
command="export VARIABLE=<something>" ssh-rsa <key>
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅“强制命令”部分中的此链接。