仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

Ubuntu 22.10でSSHサーバーの待ち受けポートを変更するには

2022年10月21日(日本時間)、Ubuntu 22.10 Kinetic Kuduがリリースされました。

主な変更点についてはリリースノートを参照して頂きたいのですが、一般的なユーザーにとって影響するであろうポイントは、SSHサーバーがsystemdのSocket-Based Activation経由で起動されるようになった点でしょう。

wiki.ubuntu.com

この変更は、SSHサーバーの待ち受けポートを変更したい場合に影響があります。従来であれば/etc/ssh/sshd_configを直接書き換えていましたが、Ubuntu 22.10ではsystemd.socketのUnitファイルを変更する必要があります。デフォルトでは/etc/systemd/system/sockets.target.wants/ssh.socketというファイルに、以下の記述がされています。このListenStreamがポートの指定ですね。

[Unit]
Description=OpenBSD Secure Shell server socket
Before=sockets.target
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Socket]
ListenStream=22
Accept=no

[Install]
WantedBy=sockets.target

実は/etc/systemd/system/sockets.target.wants/ssh.socketは/lib/systemd/system/ssh.socketへのシンボリックリンクです。このファイルはopenssh-serverパッケージが提供しているファイルのため、直接書き換えるのはよろしくありません。そこでOverrideを作成します。以下のコマンドを実行してください。

$ sudo systemctl edit ssh.socket

すると/etc/systemd/system/ssh.socket.d/override.confというファイルが作成され、テキストエディタが開きます。ここに上書きしたいパラメータを適宜追加してください。今回はSSHの待ち受けポートを変更したいので、以下のようにListenStreamを書き換えるとよいでしょう。例えばデフォルトの22番のかわりに2222番で待ち受けたい場合は、以下のようにします。

[Socket]
ListenStream=
ListenStream=2222

ポイントはListenStream=という空の行です。systemdのUnitファイルでは、リストとして解釈される設定(よくあるのがService UnitのExecStartとか)は、後から設定したパラメータが追加されていくため、空の行を挟むことで既存のエントリを削除しているのです。もしもこの行を省略すると、22番と2222番の両方で待ち受けるようになってしまいます。

ファイルを保存したら、ssh.socketを再起動してください。

$ sudo systemctl restart ssh.socket

これでSSHサーバーの待ち受けポートを変更できました。