如何进入服务器并运行需要bash变量和sshes到另一台服务器的bash脚本?

时间:2015-10-20 14:54:44

标签: linux bash shell

我已尝试过最流行的解决方案,即使用-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:~$ 

2 个答案:

答案 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对。

小心变量扩展;根据您使用的引号,变量在本地扩展,然后发送到远程端,或者按原样发送,然后远程扩展。