#linux #bash #ssh #openssh
Вопрос:
Мне нужно запустить SSH в Linux и выполнять команды из локального файла на удаленной машине. Это работает нормально, но мне также нужно передать локальные переменные среды на удаленную машину, чтобы команды могли использовать значения.
Вот команда, которую я выполняю:
ssh -i ${SSH_PRIV_KEY} ${SSH_USER}@${IP} < setup.sh
У меня есть набор переменных среды, и когда удаленная машина выполняет команды в setup.sh
файле, она должна иметь возможность использовать переменные env с локальной машины.
Я перепробовал много вещей, но решения из других потоков, подобных этому, работают неправильно:
myVar='4.0.23'
export $myVar
ssh -i ${SSH_PRIV_KEY} ${SSH_USER}@${IP} myVar=myVar < setup.sh
Единственное, что я могу придумать, — это добавить начало файла и жестко закодировать значения там перед выполнением ssh, но, если возможно, я хотел бы найти более чистое решение, потому что я хочу, чтобы его можно было использовать повторно, и единственное, что меняется для меня между запусками, — это переменные env.
Комментарии:
1. Не имеет отношения к вашему вопросу, но также обратите внимание, что
export $myVar
расширяется доexport 4.0.23
; вы, вероятно, захотитеexport myVar
.
Ответ №1:
В итоге я использовал этот код, чтобы получить нужные мне параметры env, которые нужно сохранить в файле, затем объединить файлы в один и передать его команде ssh as:
envvars="
envvar='$envvar'
envvar2='$envvar2'
"
echo $envvars > envfile
cat envfile setup.sh > finalScript
cat $()
ssh -i ${SSH_PRIV_KEY} ${SSH_USER}@${IP} < finalScript