Как правильно передавать переменную с одного компьютера на другой с помощью сценария 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).