터미널 에뮬레이터의 길이와 너비를 볼 때 길이 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 terminal) 창의 크기를 조정하면 stty size
원격 서버와 IOS의 “show terminal”에서 서로 다른 줄 길이와 줄 수가 표시됩니다. SSH와 텔넷을 통해 터미널 길이와 너비는 어떻게 전달됩니까?
답변
에서 설명하는 텔넷 프로토콜, RFC 854 의 구성, 대역 명령을 보낼 수있는 방법을 포함 IAC 문자 , '\255'
몇 가지 더 바이트 하였다. 이러한 명령은 원격으로 인터럽트를 보내는 것과 같은 작업을 수행 할 수 있지만 일반적으로 옵션 을 보내는 데 사용됩니다 .
터미널 유형 옵션 을 전송하는 교환에 대한 자세한 내용 은 Microsoft Q231866에 나와 있습니다.
창 크기 옵션에 설명되어 RFC 1073 . 클라이언트는 먼저 NAWS
옵션 을 보내려는 의지를 보냅니다 . 서버가 응답 DO 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 (e.g., vt100)
uint32 terminal width, characters (e.g., 80)
uint32 terminal height, rows (e.g., 24)
uint32 terminal width, pixels (e.g., 640)
uint32 terminal height, pixels (e.g., 480)
string encoded terminal modes
텔넷 및 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).
내가 (in 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