OpenSSHのアップグレード後にssh接続できなくなる不具合

概要

  • openssh 9.8p1 にアップグレードすると,ssh接続できなくなる不具合があります
  • 原因は openssh 9.8からの仕様変更です.古いopensshから9.8以降のopensshにアップグレードすると不具合が発生する場合があります.
  • この不具合はアップグレード後にサーバーを再起動すれば回避できます

以下,詳細

openssh を openssh 9.8p1 にアップグレードすると,外部からssh接続できなくなり,詰む場合があります.

すでに2024年7月に Archlinux で警告が出ていたようですが,手元の debian でも同じ問題が起き,酷い目に遭いました.注意喚起のためにもここに情報を書いておきます.

再現手順

  1. apt で openssh を openssh 9.8p1 にugradeする
  2. upgradeが終わると ssh接続できなくなります!

例)

$ ssh 該当ホスト名
kex_exchange_identification: read: Connection reset by peer
Connection reset by 該当ホスト名 port 22

普段ssh接続できていたサーバーが,ある日突然
「kex_exchange_identification: read: Connection reset by peer 」というエラーメッセージで接続できなくなった場合は,この不具合を踏んでる可能性が高いです

復旧方法

リモートからの復旧は不可能です

復旧方法は以下の三つぐらいでしょう

方法1:サーバーごと再起動
方法2:sshdをkillして sshdを再起動
方法3:LANケーブルを一度抜くと,設定によっては sshdが再起動するので復旧できる可能性がある

原因

今までの”古い”opensshでは,sshのコネクションは sshd というプログラムが処理していました.

openssh 9.8以降は, sshのコネクションは sshd-session というプログラムが処理するようになります,

そのため"古い”sshから 9.8以降のsshにアップグレードする場合は,
1) ”古い”sshを完全に停止
2) 新しいsshを起動する
という手順を踏む必要があるのですが,この手順がうまく実装できていない場合不具合が発生するようです.

また9.8以降のsshから,より新しいsshへのアップグレードではこの不具合は起こり得ません.つまり現時点で9.8以降が動いているサーバーでは,同じ不具合が起こる可能性はほぼゼロだと思われます.

対策

sshをアップグレードした後は,念の為サーバーを再起動しましょう

まとめ

  • openssh 9.8p1 にアップグレードすると,ssh接続できなくなる不具合があります
  • 原因は openssh 9.8からの仕様変更です.古いopensshから9.8以降のopensshにアップグレードすると不具合が発生する場合があります.
  • この不具合はアップグレード後にサーバーを再起動すれば回避できます