У меня есть хост, на котором нет записей termcap для нестандартных терминалов, и я не могу их добавить (политика).
Я использую tmux, который устанавливает тип терминала на то, что это устройство не распознает. Здесь нет проблем, в худшем случае я могу установить TERM на «xterm» и покончить с этим. Но:
Я настроил некоторые значения по умолчанию для клиента OpenSSH, среди прочего, я проинструктировал его не отправлять никакие переменные среды, кроме LANG и LC_ *.
Соответствующая часть ~ / .ssh / config:
Host *
SendEnv LANG LC_*
Моя версия клиента OpenSSH - 6.6.1.
Вот стенограмма моего сеанса SSH с удаленными нерелевантными строками:
% TERM=you.shall.not.pass ssh -vvv host
...
debug1: Connection established.
...
debug1: Authentication succeeded (publickey).
...
debug1: Sending environment.
...
debug1: Sending env LANG = en_GB.UTF-8
debug2: channel 0: request env confirm 0
...
debug3: Ignored env TERM
Как указано выше, он отправил LANG, написал, что игнорирует TERM, но каким-то образом он распространился на удаленный хост:
root@host% echo $TERM
you.shall.not.pass
Вы с этим сталкивались? Это не серьезная проблема, но я подумал, что если я не делаю что-то не так, это противоречит документации.
Ssh не передает значение TERM как переменную среды как таковую. Сообщение протокола SSH для запроса псевдотерминала (PTY) имеет поле для типа терминала, а также такие вещи, как ширина и высота терминала. Видеть RFC 4254, раздел 6.2.
Попробуйте выполнить команду без PTY, и вы, вероятно, получите другие результаты, например:
$ TERM=foo ssh localhost 'echo $TERM'
dumb