Quantcast
Channel: All Open Tickets - Tera Term on OSDN
Viewing all articles
Browse latest Browse all 2128

SSH 認証ダイアログが閉じるまで、認証バナーが VTWindow に表示されない - Tera Term Ticket #46471 on OSDN

$
0
0

SSH 認証ダイアログが閉じるまで、認証バナーが VTWindow に表示されない

Eröffnet am: 2023-01-07 08:55

Letztes Update: 2023-02-07 23:57

Auswertung:nmayaVerantwortlicher:(Keine)
Priorität:5 - MittelMeilenstein:Tera Term 4.107 & 5.0
Typ:FehlerSchweregrad:5 - Mittel
Komponente:TTSSHStatus:Offen
LösungKeine

Einzelheiten

認証バナーを VTWindow に表示する設定になっていると、受け取った SSH_MSG_USERAUTH_BANNER は認証ダイアログを閉じるまで描画されません。

RFC は認証前に表示されることを想定しているように思います。

RFC 4252 5.4 Banner Message

In some jurisdictions, sending a warning message before authentication may be relevant for getting legal protection.

Many UNIX machines, for example, normally display text from /etc/issue, use TCP wrappers, or similar software to display a banner before issuing a login prompt.

もしかしたら #40995はこれと関連があるかも?

Letzte Aktualisierung für dieses Ticket

2023-02-07 23:57 Aktualisiert von: nmaya

Kommentar

SSH_MSG_USERAUTH_BANNER の message が長くて PKT_recv() に渡されているバッファの長さを超えた場合、続きを読む必要があります。

続きを読むために PostMessage() を呼んでいるようですが、続きが読み込まれず処理が止まっています。

この現象は、CheckAuthListFIrst が 1 のとき(SSH 認証ダイアログが表示されているとき)のみ発生します。

問題が起きているTCPパケット(SSH_MSG_USERAUTH_BANNER と SSH_MSG_USERAUTH_FAILURE が同じ TCP パケットに乗っている。これで1パケット)

  • SSH Packet 1 (1200 byte)
    • SSH packet length 4 byte (1164)
    • Padding length 1 byte (13)
    • Payload
      • Message Type 1 byte SSH_MSG_USERAUTH_BANNER
      • string message
        • string length 4 byte (0x475 = 1141)
        • string data 1141 byte
      • string language tag
        • string length 4 byte (0)
    • Padding 13 byte
    • MAC 32 byte
  • SSH Packet 2 (64 byte)
    • SSH packet length 4 bytes (28)
    • Padding length 1 byte (12)
    • Payload
      • Message Type 1 byte SSH_MSG_USERAUTH_FAILURE
      • string list
        • string len 4 byte
        • string data 9 byte ("publickey")
      • bool 1 byte
    • Padding 12 byte
    • MAC 32 byte

処理の流れ @ PKT_recv()

  • パケットが読み込まれる
    • pvar->pkt_state.buf にデータが入る
  • SSH2_handle_packet(), その先の handle_SSH2_userauth_banner() が呼ばれ、pvar->ssh_state.payload_datastart, pvar->ssh_state.payload_datalen がセットされる
  • while の先頭に来て、pvar->pkt_state.buf から 1024 バイトが buf にコピーされる(message の途中まで)
    • この段階で VTWindow への描画指示が行われているようだが、認証ダイアログが消えるまでは描画が行われない模様 ※2
  • データの長さが 1024 より大きいので buflen が 0 になる
    • while を抜ける
  • SSH_is_any_payload(pvar) が TRUE なので、pvar->NotificationWindow に PostMessage() する
    • ここでふたたび PKT_recv() に来て SSH_MSG_USERAUTH_BANNER の残りを読み取り、続けて SSH_MSG_USERAUTH_FAILURE が処理される。のが正しい動きだと思われるが、CheckAuthListFIrst が 1 だとそうはならない。※1
    • CheckAuthListFIrst が 0 だとふたたび PKT_recv() に来ている

まとめ

前のコメントに書いたように

  • ※1 #40995 SSH_MSG_USERAUTH_FAILURE が処理されずに先に進まない
  • ※2 #46471(このチケット)SSH認証ダイアログがあるうちは VTWindow への描画が反映されない

の二つの問題がありそう。


Viewing all articles
Browse latest Browse all 2128