我已尝试过最流行的解决方案,即使用-t parameter on ssh并在bash初始化之前运行命令。可悲的是,我试图运行的脚本需要bash变量,所以这不是我的选择。这些是我尝试过的方法:
方法1:
只是为了展示我在上面尝试的内容:
ssh -A me@proxy -t 'echo 0 | /usr/local/bin/hop-server.sh <parameters> && bash -l'
它进入代理但后来从脚本中吐出了许多缺少的环境变量。
方法2:
将脚本添加到〜/ .bashrc:
if [ "$HOP" = "dev1" ]; then
/usr/local/bin/hop-server.sh <parameters>
fi
连接:
ssh -A me@proxy -t 'HOP=dev1 bash -l'
这不会导致环境变量丢失,但是跳不成功,我被困在代理中:
me@proxy:~$ ~/proxytodev1
Setting environment variables...
Setting project...
Resolving 'dev1'...
Connecting to 123.123.123.123...
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-63-generic x86_64)
* Documentation: https://help.ubuntu.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
17 packages can be updated.
9 updates are security updates.
me@proxy:~$
答案 0 :(得分:2)
您可以使用ssh配置选项SendEnv
ssh -o 'SendEnv HOP' ...
请注意,必须将ssh服务器配置为接受它(sshd中为AcceptEnv
)。
或者,您可以使用服务器端的.ssh/environment
文件来设置要在ssh连接上出现的变量:
HOP=<destination>
要让服务器接受它,您必须将PermitUserEnvironment
sshd配置选项设置为true。
答案 1 :(得分:1)
您可以使用以下语法将环境变量传递给流程:
foo=bar ./script.sh
会将foo
设置为值bar
并将其传递给脚本。您可以根据需要拥有尽可能多的name=value
对。
小心变量扩展;根据您使用的引号,变量在本地扩展,然后发送到远程端,或者按原样发送,然后远程扩展。