はじめに
Ubuntu 24.04 で sshd にデフォルトの 22 以外のポートを追加しようとしたところ、通常の sshd_config への設定だけではうまくいかず、ssh.socket の設定を変更する必要がありました。
本記事では、そのトラブルシューティングの過程と、正しく複数のポートを設定する方法をまとめます。
なぜ複数のポートが必要か?
今回、SSHのポートを2つ設定するのは、異なる接続用途を分けるためです。
- ポート22: ローカルネットワークからの接続専用
- ポート8922: 外部からの接続用(公開鍵認証のみ)
外部からの不正アクセスを防ぐため、ポート8922では パスワード認証を無効にし、公開鍵認証のみ許可 する設定を行います。また、ルータのポート転送設定を行い、外部からのアクセスが適切な内部IPアドレスに転送されるように設定します。
複数ポートの設定方法
まず、/etc/ssh/sshd_config.d/ にカスタム設定ファイルを作成し、複数のポートを指定します。
sudo nano /etc/ssh/sshd_config.d/custom.conf
内容:
Port 22
Port 8922
Match Address 0.0.0.0/0
PasswordAuthentication no
PubkeyAuthentication yes
保存後、sshd を再起動します。
sudo systemctl restart sshd
ファイアウォール設定 (UFW)
追加したポート 8922 を開放します。
sudo ufw allow 8922/tcp
sudo ufw reload
設定が適用されたかを確認します。
sudo ufw status
期待する出力:
22/tcp ALLOW Anywhere
8922/tcp ALLOW Anywhere
sshd のポート確認
1. 開いているポートを確認
ss -tulnp | grep ssh
出力:
tcp LISTEN 0 4096 *:22 *:* users:("sshd",pid=4699,fd=3)
ポート 22 のみがリスンされており、8922 が適用されていません。
2. 設定を確認
sudo sshd -T | grep port
出力:
port 22
port 8922
設定自体は認識されていますが、実際には 8922 が開いていません。
AppArmor の影響を確認
一部のネット情報では AppArmor が sshd のポート制限をしているとありましたが、Ubuntu 24.04 ではデフォルトでそのような制限はないようです。
aa-status | grep ssh
このコマンドで sshd のポリシーが有効でないことを確認しました。
ssh.socket がポートを制限している可能性
Ubuntu 24.04 では systemd による ソケット起動 (socket activation) が有効になっており、ssh.socket によって sshd が開けるポートが制限されていました。
systemctl status ssh.socket
出力:
● ssh.socket - OpenSSH Server Socket
Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; preset: enabled)
Active: active (listening) since ...
Triggers: ● ssh.service
Listen: [::]:22 (Stream)
ポート 22 のみがリスンされていることが分かります。
ssh.socket に追加ポートを設定
以下の手順で ssh.socket に 8922 を追加します。
sudo systemctl edit ssh.socket
エディタが開くので、以下を追加。
[Socket]
ListenStream=
ListenStream=22
ListenStream=8922
設定を反映します。
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart sshd
その後、ポートのリスン状態を確認。
ss -tulnp | grep ssh
出力:
tcp LISTEN 0 4096 *:22 *:* users:("sshd",pid=12345,fd=3)
tcp LISTEN 0 4096 *:8922 *:* users:("sshd",pid=12345,fd=4)
systemd のソケット起動を無効化する方法(オプション)
もし ssh.socket を無効にし、従来通り sshd のみでポートを管理したい場合は、以下の手順を実行。
sudo systemctl disable --now ssh.socket
sudo systemctl restart sshd
その後、ss -tulnp | grep ssh でポートのリスン状態を確認。
まとめ
Ubuntu 24.04 では systemd の ssh.socket が有効になっているため、単に sshd_config に Port 8922 を追加するだけでは sshd に反映されません。
解決策:
-
/etc/ssh/sshd_config.d/custom.confにPort 22Port 8922を記述し、公開鍵認証のみ許可 -
sudo ufw allow 8922/tcp && sudo ufw reloadでファイアウォールを設定 -
systemctl edit ssh.socketでListenStream=8922を追加 sudo systemctl daemon-reload && sudo systemctl restart ssh.socket-
sudo systemctl restart sshdでsshdを再起動 -
ss -tulnp | grep sshでポートのリスン状態を確認
この手順を踏めば、追加のポートでも問題なく SSH 接続が可能になります!