Как передать переменные из одного VM в другой VM, используя скрипт 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
это эхо-бланки
2 ответа
Мой оригинальный ответ
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
Чтобы передать переменные среды, может потребоваться изменить записи для AcceptEnv
в sshd_config(5) и SendEnv
в ssh_config (5).