Когда я ssh
в сервер, как я могу передать переменную среды от клиента к серверу? Эта переменная среды изменяется между различными вызовами ssh, таким образом, я не хочу перезаписывать $HOME/.ssh2/environment
каждый раз я делаю вызов ssh. Как я могу сделать это?
Так, на Вашем клиенте у Вас есть некоторая переменная среды, и Вы хотите, чтобы это было доступно удаленной команде? Я не думаю, что существует способ иметь ssh, волшебно проводят его, но можно, вероятно, сделать что-то вроде этого. Вместо использования скажите:
ssh remote.host my_command
Можно сделать это:
ssh remote.host env ENV_VAR=$ENV_VAR my_command
Конечно, можно установить переменную среды в команде, однако необходимо будет быть осторожны относительно заключения в кавычки: помните, что Ваша оболочка собирается проанализировать Вашу локальную командную строку, и затем удаленная оболочка будет делать попытку на строке, которую она получает.
Если Вы хотите, чтобы переменная получила то же значение на сервере, который оно имеет на клиенте, попробуйте 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
не содержит одинарных кавычек ('
).
Вы могли попытаться вызвать пользовательскую команду, предположив, что у Вас есть пароль меньше ssh установка входа в систему. На сервере отредактируйте свой ~/.ssh/authorized_keys запись, которая соответствует ключу от Вас клиент:
command="export VARIABLE=<something>" ssh-rsa <key>
Посмотрите на эту ссылку в разделе Forced Command для немного большего количества детали.