SSH запускает команды из локального файла, а также передает локальные переменные env

#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