はじめに
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 22
Port 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 接続が可能になります!