我需要在Linux上运行SSH,并从本地文件执行命令到远程机器。这很好,但我还需要将本地环境变量传递到远程机器,以便命令可以使用这些值。
这是我正在运行的命令:
ssh -i ${SSH_PRIV_KEY} ${SSH_USER}@${IP} < setup.sh
我设置了一组环境变量,当远程机器运行setup.sh
文件中的命令时,它需要能够使用本地机器的env-var。
我尝试了很多方法,但来自其他线程的解决方案无法正常工作:
myVar='4.0.23'
export $myVar
ssh -i ${SSH_PRIV_KEY} ${SSH_USER}@${IP} myVar=myVar < setup.sh
我唯一能想到的就是在执行ssh之前附加文件的开头并硬编码那里的值,但如果可能的话,我想找到一个更干净的解决方案,因为我希望它是可重用的,并且在运行之间唯一会改变的是env-vars。
我最终使用了这段代码来获取需要存储在文件中的env-vars,然后将这些文件合并为一个文件,并将其作为命令传递给ssh:
envvars="
envvar='$envvar'
envvar2='$envvar2'
"
echo $envvars > envfile
cat envfile setup.sh > finalScript
cat $()
ssh -i ${SSH_PRIV_KEY} ${SSH_USER}@${IP} < finalScript