SSHとTelnetを介して端末の長さと幅はどのように渡されますか?

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#

ローカルコンピュータでターミナルエミュレータウィンドウのサイズを変更すると、stty sizeリモートサーバーとIOSの「ターミナル表示」の両方が異なる行の長さと行数を表示します。 SSHとTelnetを介して端末の長さと幅はどのように渡されますか?

ベストアンサー1

Telnetプロトコルで説明されていますRFC 854、帯域内コマンドを送信する方法を含めるIACキャラクター, '\255', の後に数バイトが続きます。これらのコマンドは、リモートで割り込みを送信するなどの操作を実行できますが、通常は割り込みを送信するために使用されます。オプション

送信された交換の詳細を見る端子タイプオプションは以下にあります。マイクロソフトQ231866

これウィンドウサイズオプションは次のとおりです。RFC 1073。クライアントは最初にNAWSオプションを送信する意志を送信します。サーバーが応答すると、DO NAWSクライアントはNAWS2つの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。メッセージフローで構成されます。メッセージの1つは、"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

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

おすすめ記事