Ubuntu 24.04でSSHのポート番号を22番から8022番へ変更しようとしたところ、sshd_configを書き換えても22番で待ち受けたままになった。
同じ現象に遭遇した人向けに原因と対処法をまとめる。
環境
Ubuntu 24.04
OpenSSH Server
systemd
やったこと
/etc/ssh/sshd_configを編集。
Port 8022
設定に問題はなさそうなのでサービスを再起動。
sudo systemctl restart ssh
しかし状態を確認すると22番で待ち受けていた。
sudo systemctl status ssh
出力(一部)
Server listening on 0.0.0.0 port 22.
Server listening on :: port 22.
原因調査
まず、sshdが実際に読み込んでいる設定を確認した。
sudo sshd -T | grep ^port
結果
port 8022
つまり、sshd_configの設定自体は正しく反映されていた。
では、なぜ22番で待ち受けているのか。
ssh.socketの設定を確認した。
systemctl cat ssh.socket
すると以下の設定になっていた。
[Socket]
ListenStream=0.0.0.0:22
ListenStream=[::]:22
原因
Ubuntu 24.04では、デフォルトでsystemdのSocket Activationが有効になっている。
そのため、SSH接続の待ち受けはsshdではなくsystemdが担当する。
構成は以下のようになる。
SSHクライアント
│
▼
systemd (ssh.socket)
ListenStream=22
│
▼
sshd
Port 8022
つまり、
Portはsshdが利用するポート
ListenStreamはsystemdが待ち受けるポート
であり、Portだけ変更してもListenStreamが22番のままだと22番で待ち受け続ける。
対処方法
方法1(おすすめ)
Socket Activationを無効化し、従来どおりsshdに待ち受けさせる。
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
sudo systemctl restart ssh.service
確認
ss -tlnp | grep ssh
方法2
ssh.socketのListenStreamも変更する。
オーバーライドを作成。
sudo systemctl edit ssh.socket
以下を記述する。
[Socket]
ListenStream=
ListenStream=0.0.0.0:8022
ListenStream=[::]:8022
設定を反映。
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
まとめ
Ubuntu 24.04では、SSHの待ち受けがsystemdのSocket Activationへ変更されている。
そのため、sshd_configのPortだけ変更しても、ssh.socketのListenStreamが22番のままだと22番で待ち受け続ける。
設定変更時は、以下を確認すると原因の切り分けがしやすい。
sudo sshd -T | grep ^port
systemctl cat ssh.socket
ss -tlnp | grep ssh
Ubuntu 22.04以前の手順だけを参考にすると、この違いでハマる可能性があるため注意したい。