Когда ssh'ing, как я могу установить переменную среды на сервере, который изменяется от сессии до сессии?

Когда я ssh в сервер, как я могу передать переменную среды от клиента к серверу? Эта переменная среды изменяется между различными вызовами ssh, таким образом, я не хочу перезаписывать $HOME/.ssh2/environment каждый раз я делаю вызов ssh. Как я могу сделать это?

93
задан 31.07.2018, 19:17

3 ответа

Так, на Вашем клиенте у Вас есть некоторая переменная среды, и Вы хотите, чтобы это было доступно удаленной команде? Я не думаю, что существует способ иметь ssh, волшебно проводят его, но можно, вероятно, сделать что-то вроде этого. Вместо использования скажите:

ssh remote.host my_command

Можно сделать это:

ssh remote.host env ENV_VAR=$ENV_VAR my_command
6
ответ дан 07.12.2019, 07:58

Конечно, можно установить переменную среды в команде, однако необходимо будет быть осторожны относительно заключения в кавычки: помните, что Ваша оболочка собирается проанализировать Вашу локальную командную строку, и затем удаленная оболочка будет делать попытку на строке, которую она получает.

Если Вы хотите, чтобы переменная получила то же значение на сервере, который оно имеет на клиенте, попробуйте SendEnv опция:

ssh -o SendEnv=MYVAR server.example.com mycommand

Это требует поддержки со стороны сервера, все же. С OpenSSH имя переменной должно быть авторизовано в /etc/sshd_config.

Если сервер только позволяет определенные определенные имена переменной, можно работать вокруг этого; например, общая установка позволяет LC_* через, и можно сделать следующее:

ssh -o SendEnv=LC_MYVAR server.example.com 'MYVAR=$LC_MYVAR; unset LC_MYVAR; export MYVAR; mycommand'

Если даже LC_* не опция, можно передать информацию в TERM переменная среды, которая всегда копируется (может быть предел длины однако). Необходимо будет все еще удостовериться, что удаленная оболочка не ограничивает TERM переменная для обозначения известного терминального типа. Передайте -t опция к ssh, если Вы не запускаете удаленную интерактивную оболочку.

env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:*}; TERM=${TERM##*:}; export MYVAR; mycommand'

Другая возможность состоит в том, чтобы определить переменную непосредственно в команде:

ssh -t server.example.com 'export MYVAR="extra information"; mycommand'

Таким образом, при передаче локальной переменной:

ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'

Однако остерегайтесь заключения в кавычки проблем: значение переменной будет интерполировано непосредственно в отрывок оболочки, выполняемый на удаленной стороне. Последний пример выше принимает это $LOCALVAR не содержит одинарных кавычек (').

112
ответ дан 07.12.2019, 07:58

Вы могли попытаться вызвать пользовательскую команду, предположив, что у Вас есть пароль меньше ssh установка входа в систему. На сервере отредактируйте свой ~/.ssh/authorized_keys запись, которая соответствует ключу от Вас клиент:

command="export VARIABLE=<something>" ssh-rsa <key>

Посмотрите на эту ссылку в разделе Forced Command для немного большего количества детали.

1
ответ дан 07.12.2019, 07:58

Теги

Похожие вопросы