将shell变量传递给ssh

5

我看了其他有关在远程ssh中传递变量的帖子,但那些解决方案似乎对我不起作用。

这是我的情况:我正在通过shell脚本(在本地机器上)填充变量的值,然后通过ssh在另一个系统上使用它们。我知道为什么这不起作用,但我想找到一种方法,在通过ssh访问的另一个系统上使用本地shell中的值。

BUILD_SERVER="my_server"
ANOTHER_SERVER="my_server2"
ssh $USERNAME@$BUILD_SERVER << 'ENDSSH'

echo "$BUILD_SERVER"
echo "$ANOTHER_SERVER"

ENDSSH

当我运行这段代码时,这些变量为空。有没有办法将值传递给ssh?
1个回答

12

我搞明白了,在我做以下操作的那一行:

ssh $USERNAME@$BUILD_SERVER << 'ENDSSH'

我去掉了单引号,现在它可以解释我的本地变量。如果我想在远程服务器上使用一个变量,我只需要用“\”转义它们。

ssh $USERNAME@$BUILD_SERVER << ENDSSH

echo $BUILD_SERVER     # echos the local server variable
LOCAL_SERVER="local_server"

echo \$LOCAL_SERVER    # echos the remote server variable

ENDSSH

那么local是我的本地机器,remote是服务器?我有一个类似的问题:ssh -p $deployServerPort -t $deployServerUser@$deployServerIp "sudo bash \"$deployShellScript\" 'true'" 我的问题是,字符串true没有被识别。我想将true传递给$deployShellScript脚本。 - Andi Giga
@AndiGiga 在我的解决方案中,$LOCAL_SERVER 变量位于您的本地计算机或调用 ssh 的计算机上,而 \$LOCAL_SERVER 是在远程计算机上展开的该变量。我认为您也需要转义 true。(例如 \"true\" - hax0r_n_code
1
我也试图避免这个问题,但我的脚本没有解决它。但现在我知道了,这是脚本内部的错误。还是谢谢。 - Andi Giga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接