Установка переменной для данного хоста SSH

17

В ssh_config, вы можете экспортировать некоторые переменные среды на хост, используя SendEnv.

Есть ли способ принудительно задать заданное значение для этой переменной для каждого хоста? Например, можно ли экспортировать переменную $FOOсо значением barтолько при подключении к хосту example.com?

ℝaphink
источник

Ответы:

16

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

Host example.com
    SendEnv FOO

Чтобы завершить цепочку:

FOO=bar ssh user@example.com

Наконец, удаленный сервер должен иметь переменное окружение , перечисленные в AcceptEnvв своем sshd_config.

AcceptEnv FOO
Майкл Хэмптон
источник
Чего именно вы хотели бы избежать?
Майкл Хэмптон
1
Необходимость написать псевдоним для отправки переменной с заданным значением.
ℝaphink
Извините, больше ничего вы не можете сделать ... если вы не можете заставить компьютер читать ваши мысли. :)
Майкл Хэмптон
6
Спасибо за подтверждение моих подозрений , хотя ;-) Я бы хотел бы было что - то вроде SetVar FOO='bar'в ssh_config;)
ℝaphink
2
Повторяющийся случай для меня заключается в том, что старые системы не поддерживают, TERM=tmux-256colorпоэтому я бы хотел использовать запасной вариант для удаленного хоста (с подстановочными знаками).
Джед
4

Вы можете дать конкретное значение, используя SetEnvв вашем ~/.ssh/config, например,

Host *
  SetEnv FOO=bar

Согласно man ssh_config:

Непосредственно укажите одну или несколько переменных среды и их содержимое для отправки на сервер. Аналогично SendEnv, сервер должен быть готов принять переменную среды.

Предполагая, что ваш сервер получил следующую строку /etc/ssh/sshd_config:

AcceptEnv LANG LC_* FOO

Проверьте также: man ssh_configи man sshd_config.

kenorb
источник
2
Примечание для озадаченного читателя (как и я, когда я впервые прочитал это): это новинка с момента выпуска OpenSSH 7.8, выпущенного в августе 2018 года, и потребуется некоторое время, чтобы он стал доступен для обычного пользователя через обновления ОС. (Но как только оно станет распространенным, оно станет лучшим решением проблемы)
Ирфи
1

Другая идея состоит в том, чтобы установить переменные окружения в команде ssh и запустить интерактивную оболочку, например. я пытаюсь вызвать интерактивную оболочку с env-var 'MANWIDTH':

ssh example.com 'MANWIDTH=120 bash -li'
хучь
источник
0

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

Host example.com
SendEnv FOO

Обратите внимание, что сервер также должен поддерживать это.

user156525
источник