Назад | Перейти на главную страницу

Как передать переменные из одной виртуальной машины в другую с помощью сценария 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 это эхо-пробелы

Мой оригинальный ответ

ssh VD_PASSWORD="$VD_PASSWORD" ...

был неправильным, потому что он не принимал во внимание heredoc и помещал настройку переменной окружения в неправильное место. Даже если вы поместите переменную среды в правильное место

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

Чтобы передать переменные среды, может потребоваться изменить записи для AcceptEnv в sshd_config (5) и SendEnv в ssh_config (5).