Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

待ち受けポートをカスタムしたsshdをアプデしたらsshで繋げなくなってしまった問題のポストモーテム

事象

piyolog.hatenadiary.jp

CVE-2024-6387の対応のため、個人開発サービスを運用していてインターネットに露出しているサーバのopenssh-serverをアップデートしていた。

Google CloudのCompute Engineで立てているあるサーバのopenssh-serverをapt upgradeでアップデートしたところ、以後sshで接続することができなくなってしまった。

原因

当該サーバではSSHのポート番号を22とは異なるものに設定していた。また、Cloud Firewallではtcp 22のインバウンド通信を不許可としており、SSHの代替ポートについて許可するルールとしていた。

apt upgrade時にsshd_configを更新しますがよろしいですかという確認が表示されていて、何も考えずにYを押してしまったところ、sshd_configが書き換えられた。

Configuration file '/etc/ssh/sshd_config'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** sshd_config (Y/I/N/O/D/Z) [default=N] ? 

その結果、待ち受けポートを標準から変えていた設定がロールバックしてしまい、22番ポートでlistenするようになった。22番はFirewallでブロックしていたため、再接続できなくなってしまった。

影響

サーバの管理者である私がsshを経由して当該サーバにアクセスすることが不可能になった。個人開発サービスの可用性に影響はない。

対応

Firewallの設定を変更し、一時的に22番ポートのインバウンド通信を許可した。その結果22番ポート経由でsshで当該サーバに接続することができた。

sshd_configファイルを元の状態に書き換え、代替ポートで接続できることを確認した。

再発防止策

  • sshdをアップデートしたあと、そのセッションを閉じないまま別に接続してみて、これまでと変わらずに接続できることを確認する
    • sshdをアップデートしても、既存の接続は古いプロセスを使用し続ける
  • 設定ファイルを書き換えるようなメッセージが表示された場合にはノールックでYを押さずに差分を確認する