SSH 从本地文件运行命令并传递本地环境变量

Posted

技术标签:

【中文标题】SSH 从本地文件运行命令并传递本地环境变量【英文标题】:SSH run commands from local file and also pass local env variables 【发布时间】:2021-09-01 19:26:09 【问题描述】:

我需要在 Linux 上运行 SSH 并从本地文件执行命令到远程机器。这工作正常,但我还需要将本地环境变量传递给远程机器,以便命令可以使用这些值。

这是我正在运行的命令:

ssh -i $SSH_PRIV_KEY $SSH_USER@$IP < setup.sh

我设置了一堆环境变量,当远程机器运行setup.sh 文件中的命令时,它需要能够使用本地机器上的环境变量。

我尝试了很多东西,但是来自其他类似线程的解决方案无法正常工作:

myVar='4.0.23'
export $myVar
ssh -i $SSH_PRIV_KEY $SSH_USER@$IP myVar=myVar < setup.sh

我唯一能想到的就是在执行 ssh 之前附加文件的开头并硬编码那里的值,但如果可能的话,我想找到一个更干净的解决方案,因为我希望它是可重用的,并且唯一的运行之间对我来说的变化是环境变量。

【问题讨论】:

与您的问题无关,但还要注意export $myVar 扩展为export 4.0.23;你可能想export myVar 【参考方案1】:

我最终使用此代码获取需要存储在文件中的环境变量,然后将文件合并为一个并将其作为命令传递给 ssh:

envvars="
envvar='$envvar'
envvar2='$envvar2'

"
echo $envvars > envfile
cat envfile setup.sh > finalScript
cat $()
ssh -i $SSH_PRIV_KEY $SSH_USER@$IP < finalScript

【讨论】:

以上是关于SSH 从本地文件运行命令并传递本地环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Linux 更加优雅地运行 JAR 文件,并将日志文件输出到本地目录,并优雅的查看日志文件信息

无法使用 Runtime.Exec 传递远程命令 (ssh)

您如何使用本地属性从 gradle 运行 micronaut

Laravel 本地运行 artisan 命令效果 VM 环境

如何通过ssh在服务器上启动jupyter笔记本并在本地浏览器上运行?

SSH连接时发送/设置环境变量