如何使用bash脚本将variables从一个虚拟机传递给另一个虚拟机

什么是通过bash脚本将variables从一台机器传递到另一台机器的正确方法? 在下面的代码中,我试图从用户那里得到input,并想把它们传递给远程机器,但是远程机器没有访问这个值,任何人都可以让我知道正确的方法吗?

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是回显空白

我原来的答案

 ssh VD_PASSWORD="$VD_PASSWORD" ... 

是错误的,因为它没有考虑heredoc,它把环境variables的设置放在了错误的地方。 即使你把环境variables放在正确的地方

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

由于heredoc,它不起作用。

我得到这个工作

 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 

要传递环境variables,可能需要更改sshd_config(5)中的 SendEnv和ssh_config(5)中的 SendEnv的条目。