如何使用 Bash 脚本将变量从一个虚拟机传递到另一个虚拟机

如何使用 Bash 脚本将变量从一个虚拟机传递到另一个虚拟机

通过 bash 脚本将变量从一台机器传递到另一台机器的正确方法是什么?在下面的代码中,我试图从用户那里获取输入并希望将其传递给远程机器,但远程机器无法访问该值,有人可以告诉我正确的方法吗?

NEWLINE=$'\n'
read -s -p "Enter App FQDN:${NEWLINE}" APP_FQDN
read -s -p "Enter App Password:${NEWLINE}" APP_PASSWORD
read -s -p "Enter VD Password:${NEWLINE}" VD_PASSWORD
sshpass -p "$APP_PASSWORD" ssh -o StrictHostKeyChecking=no -T root@$APP_FQDN << 'EOSSH'
if true; then
 su - presto << 'PRESTO'
 source ~/.bash_profile
 cd /opt/vm/vchs/presto_agent
 pwd
 KEY=$( cat /opt/vm/vchs/presto_agent/config/settings.yml |grep '^key:'|sed 's/^key: //')
 echo $KEY
 echo $VD_PASSWORD
 PASSWORD=$(ruby /opt/vm/vchs/presto_agent/lib/obfuscation_util.rb encrypt $KEY $VD_PASSWORD)
 echo $PASSWORD
PRESTO
else
 echo "False"
fi
EOSSH

执行上述脚本时$VD_PASSWORD会回显空白

答案1

我原来的答案

ssh VD_PASSWORD="$VD_PASSWORD" ...

是错误的,因为它没有考虑到 heredoc,并且将环境变量的设置放在了错误的位置。即使你将环境变量放在了正确的位置

ssh ... user@remote VD_PASSWORD="$VD_PASSWORD" <<'EOSSH' ...

由于存在此文档,它无法工作。

我让它工作了

VD_PASSWORD="$VD_PASSWORD"
ssh -o StrictHostKeyChecking=no -T user@remote <<EOSSH
echo $VD_PASSWORD
EOSSH

请注意 EOSSH 周围缺少什么',但这可能无法实现您想要的效果(我真的无法从脚本中看出)。

最好将脚本放在远程主机上,然后调用它

ssh ... VD_PASSWORD="$VD_PASSWORD" /path/to/remote/script

答案2

要传递环境变量,可能需要AcceptEnv更改sshd_配置(5)以及SendEnvssh_配置(5)

相关内容