PR

【備忘録】Ubuntu22.04.3以降でSSH接続できない病を何とかする

こんにちは。
自分はCentOSが分からんのでUbuntu派なのですが、SSHの接続を待ち受けるポートの変更について、
少し前くらいから下記ファイルの「Port=●●」の箇所を編集しても、うまく反映されなくなってしまいました。

/etc/ssh/sshd_config

正確には何か色々弄ったら反映されるっちゃされるんですが、
コンテナ再起動したタイミングで繋がらなくなったりと不安定すぎて常用には問題アリだなと思っていました。

最近になってVPS熱が再燃してきたので、ようやく重い腰を上げて簡単に調べたところ、
まずUbuntu22.10以降では設定ファイルの場所自体が下記に変わったよ~との情報がありました。

/etc/systemd/system/ssh.socket.d/addresses.conf
Ubuntu 22.10 その15 - sshd(OpenSSH)が接続を要求されるまで起動しないように変更・変更によるユーザーへの影響
sshdが接続を要求されるまで起動しないように変更 「Ubuntu 22.10」では「sshd(OpenSSH/open...


ただ、自分が使っているのはあくまで「22.04系」のUbuntuなので該当のファイルは見つからないようです。
目指すゴールとしては、標準の22番ポートの待ち受けを無効にしつつ他のポートで待ち受けるといったことなので、
引き続き調べて、以下の方法で対応してみることにしました。

SSHd now uses socket-based activation (Ubuntu 22.10 and later)
in README.Debian you write mkdir -p /etc/systemd/system/ssh....

本記事に転記しつつ、備忘録として残しておきたいと思います。

  1. 設定ファイルの置き場所として、下記ディレクトリを作成します。
    mkdir -p /etc/systemd/system/ssh.socket.d
  2. 「listen.conf」という名称の設定ファイルをエディタで作成します。
    自分のお気に入りはnanoですが、好きなものを使ってもらってかまいません。

    nano /etc/systemd/system/ssh.socket.d/listen.conf
  3. 設定ファイルには待ち受けポートに関する記述のみを書いておきます。
    ここで、ポート名を空にした「ListenStream=」行を作っておくのがワンポイントのようです。
    そのように記述しておかないと、デフォルトの22番ポートと変更後のポートの両方で待ち受け状態になってしまうようです。

    [Socket]
    ListenStream=
    ListenStream=※任意のポート※
  4. この手順は必要ないかもしれませんが、SSH接続をソケット接続でのみ待ち受けるように設定します。
    systemctl disable --now ssh.service
    systemctl enable --now ssh.socket
  5. 念のためステータスを確認してみます。きちんと変更後のポートで待ち受け状態になっていますね。
    ※セキュリティ云々で黒塗りだらけで申し訳ないのですが…


なお、そもそも「/etc/ssh/sshd_config」で設定するセオリーを維持したいという場合には
下記のようにソケット接続の待ち受けを無効化してしまえば問題ないみたいなので、ぶっちゃけこちらの方が楽です。

systemctl disable --now ssh.socket
systemctl enable --now ssh.service

アップデートで突然仕様が変わる…というのは珍しいことではありませんが、
きちんと英語圏以外の方向けにも周知してから配布してほしいなぁ、としみじみ思うところでした。

以上です。

コメント 本記事へのご質問やご感想など、お気軽にどうぞ

タイトルとURLをコピーしました