Я хочу установить для переменной среды TERM другое значение для каждой из моих удаленных машин, поэтому я использовал SetEnv TERM=myTermForRemoteVar
в ~/.ssh/config
. Удаленная машина все еще видит TERM=myLocalTermVar
.
я добавил AcceptEnv TERM
в /etc/ssh/sshd_config
на удаленной машине. Все равно не повезло.
Я пробовал просто для тестирования SetEnv FOO=smth
локально и AcceptEnv FOO
. Это работает отлично, и удаленная машина видит FOO=smth
.
Является TERM
лечится специально по ssh? SetEnv
работает в целом, но не для TERM
. Кто-нибудь еще видел такое поведение? По крайней мере, это не задокументировано. Это ошибка?
Эта ветка на openssh-unix-dev похоже, указывает на то, что TERM
действительно особенный, и вы не можете установить его через SetEnv
. Вот мое прочтение вещей:
Как отмечено в этом потоке, когда клиент SSH запрашивает новый PTY от sshd, запрос включает явное TERM
значение (см. RFC4254, «Протокол соединения Secure Shell (SSH)», раздел 6.2). Это отдельно от любых переменных среды, которые клиент хочет отправить.
В OpenSSH ssh.c
, функция ssh_session2_setup
, OpenSSH безоговорочно читает запрос PTY TERM
ценность из вашей текущей среды, независимо от каких-либо SetEnv
директивы. (Вы можете видеть переменные среды, в том числе из SetEnv
, отправляются отдельно в clientloop.c
, функция client_session2_setup
.)
Затем на стороне сервера session.c
с do_setup_env
функция настраивает среду для новой оболочки в порядке, обратном тому, как ее отправляет клиент: первый он устанавливает переменные среды из s->env
, затем это устанавливает TERM
из запроса PTY TERM
стоимость (s->term
), перезаписывая любое значение для TERM
отправляется как обычная переменная среды.
Из-за такого порядка операций на сервере SetEnv TERM
всегда будет переопределено значением TERM
в ssh
окружение клиента, а не из любого SetEnv
.
Кажется, есть веские аргументы в пользу изменения поведения OpenSSH в этом отношении в вышеупомянутой ветке, но я считаю, что из этого ничего не вышло. По крайней мере, один человек в этом потоке был убежден, что файлы инициализации удаленного хоста должны быть теми, которые нужно изменить. TERM
если нужно. (Лично я не согласен.)