Intereting Posts
для чего используется kbuildsycoca4? Как запустить команду для списка пакетов? История bash усечена до 2000 при новом входе в систему после обновления до ubuntu 16.04 Как рекурсивно синхронизировать временные метки файлов по серверам? Как я могу скомпилировать, установить и запустить инструменты внутри ядра / инструментов? Не удалось найти файл после добавления в Docker Как управлять ip-маршрутизацией в новом firewalld? Какое правильное решение для веб-сервера пытается записать в каталог? Как запустить ld в скрипте с меньшим размером памяти? Какая версия sed не является GNU sed 4.0? Почему пакет Debian, который я создал для одного сценария Python, пуст? Как копировать рекурсивно и изменять имена файлов, чтобы быть уникальными Почему шалфей не сотрудничает с urxvt? Как получить право владения внешним HDD (и всеми файлами / папками), установленными в / mnt Как разбить строку – Bash

Как длина и ширина терминала передаются через SSH и telnet?

Когда я просматриваю длину и ширину моего эмулятора терминала со stty size он имеет длину 271 символ и 71 линию. Когда я вхожу на другой сервер через SSH и выполняю stty size , тогда он также составляет 271 символ и 71 строчка. Я даже могу войти в какое-то устройство Cisco IOS, и терминал по-прежнему имеет длину 271 символ и 71 строку:

 C1841#show terminal | i Len|Wid Length: 71 lines, Width: 271 columns C1841# 

Теперь, если я изменю размер окна терминала терминала терминала Gnome на локальном компьютере, stty size на удаленном сервере и «show terminal» в IOS показывают разную длину строки и количество строк. Как длина и ширина терминала передаются через SSH и telnet?

Протокол telnet, описанный в RFC 854 , включает способ отправки внутриполосных команд, состоящих из символа IAC , '\255' , а затем еще нескольких байтов. Эти команды могут делать такие вещи, как отправка прерывания на пульт, но обычно они используются для отправки параметров .

Подробный обзор обмена, который отправляет параметр типа терминала, можно найти в Microsoft Q231866 .

Опция размера окна описана в RFC 1073 . Клиент сначала отправляет свою готовность отправить опцию NAWS . Если сервер отвечает DO NAWS , клиент может затем отправить NAWS опций NAWS , которые состоят из двух 16-битных значений.

Пример сеанса, на столбце столбца 47 строк 80:

 telnet> set options Will show option processing. telnet> open localhost Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SENT WILL NAWS RCVD DO NAWS SENT IAC SB NAWS 0 80 (80) 0 47 (47) 

Протокол ssh описан в RFC 4254 . Он состоит из потока сообщений. Одним из таких сообщений является "pty-req" , который запрашивает псевдотерминал, а его параметры включают в себя высоту и ширину терминала.

 byte SSH_MSG_CHANNEL_REQUEST uint32 recipient channel string "pty-req" boolean want_reply string TERM environment variable value (eg, vt100) uint32 terminal width, characters (eg, 80) uint32 terminal height, rows (eg, 24) uint32 terminal width, pixels (eg, 640) uint32 terminal height, pixels (eg, 480) string encoded terminal modes 

Клиенты telnet и ssh поймают сигнал SIGWINCH , поэтому, если вы измените размер окна терминала во время сеанса, они отправят соответствующее сообщение на сервер с новым размером. Ssh отправляет сообщение изменения размера окна:

 byte SSH_MSG_CHANNEL_REQUEST uint32 recipient channel string "window-change" boolean FALSE uint32 terminal width, columns uint32 terminal height, rows uint32 terminal width, pixels uint32 terminal height, pixels 

Я подозреваю, что это сигнал SIGWINCH вероятно, доставлен по трубе.

Из Википедии :

 SIGWINCH The SIGWINCH signal is sent to a process when its controlling terminal changes its size (a window change). 

Если я делаю (в zsh ):

 [romano:~] 1 % TRAPWINCH() {echo hi;} 

… и я изменяю размер терминала:

 [romano:~] % stty size 35 99 [romano:~] % hi [romano:~] % hi [romano:~] % hi [romano:~] % stty size 31 80 

RFC 4254 Раздел 6.9 Имя сообщения «изменение окна» отправляется с новыми измерениями. На стороне клиента может быть правдой, что оригинальный SIGWINCH пойман, но он отправляется через это сообщение, которое я считаю. https://www.ietf.org/rfc/rfc4254.txt