SSHのポート番号を変更する方法|sshd_configのPort設定とfirewall-cmdでの開放手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, ディレクトリ・ファイル操作 > SSHのポート番号を変更する方法|sshd_configのPort設定とfirewall-cmdでの開放手順
「SSHのポートをデフォルトの22番から変更したいが、設定を間違えてサーバーにログインできなくなりそうで怖い」「firewall-cmdでポートを開けたのに繋がらない」——SSHのポート変更は、手順を間違えると自分をサーバーからロックアウトしてしまいます。

SSHのデフォルトポート22番は攻撃者がまず最初にスキャンするポートです。変更するだけでブルートフォース攻撃の試行回数を大幅に減らせます。

この記事では、sshd_configでSSHポートを変更する手順をステップごとに解説します。firewall-cmdによるポート開放、SELinuxへの対応、接続確認の方法まで実行例付きでまとめます。RHEL 9.4 / Rocky Linux 9で動作確認済みです。
【この記事でわかること】
・/etc/ssh/sshd_config でSSHポート番号を変更する手順
・firewall-cmdで新ポートを開放し、旧22番を閉じる方法
・SELinuxが有効な環境での semanage による設定追加
・接続確認の手順とロックアウトを防ぐ安全な切り替え方法

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

SSHポート変更の全体手順を把握する

ポート変更は「設定変更→サービス再起動→ポート開放→接続確認→古いポートを閉じる」の順番で行います。
順番を間違えると自分がロックアウトされるため、全体の流れを把握してから作業してください。
手順 作業内容
1 sshd_config で Port を変更する
2 SELinuxで新ポートを許可する(SELinux有効時のみ)
3 firewall-cmdで新ポートを開放する
4 sshdを再起動する
5 別ウィンドウから新ポートで接続確認する
6 firewall-cmdでデフォルト22番ポートを閉じる
重要:手順5の接続確認が成功するまでは、既存のSSHセッションを絶対に閉じないでください。

sshd_configでSSHポートを変更する

1. sshd_configを開く

# sshd_configファイルを開きます [root@server1 ~]# vi /etc/ssh/sshd_config

2. Port行を変更する

ファイル内の Port 行を探します(コメントアウトされている場合もあります)。

# デフォルトのPort設定(コメントアウトされている場合が多い) #Port 22 # 変更後(コメントを外して新しいポート番号に変更する) Port 2222

ポート番号は1024~65535の範囲で、他のサービスと重複しない番号を選んでください。
一般的によく使われるのは2222、10022、49152~65535の範囲の番号です。

注意:Port行をコメントのままにするとデフォルト22番が使用されます。必ず「Port 2222」のようにコメントを外した行を追加または変更してください。

3. sshd_configの設定確認

設定変更後、構文エラーがないか確認してからサービスを再起動します。

# sshd_configの構文チェック [root@server1 ~]# sshd -t # エラーが表示されなければOK # Portが正しく設定されているか確認します [root@server1 ~]# grep "^Port" /etc/ssh/sshd_config Port 2222

SELinuxで新ポートを許可する

1. SELinuxの状態を確認する

RHEL/Rocky Linuxではデフォルトでは SELinux が有効(enforcing)です。
SELinuxが有効な場合、sshd_configでポートを変更しただけではsshdが新ポートで起動できません。

# SELinuxの状態を確認します [root@server1 ~]# getenforce Enforcing

「Enforcing」の場合はSELinuxの設定が必要です。「Disabled」や「Permissive」の場合はスキップしてください。

2. 新ポートをSSH用途として登録する

# policycoreutils-pythonパッケージをインストール(未導入の場合) [root@server1 ~]# dnf install -y policycoreutils-python-utils # 2222番ポートをSSHとして登録します [root@server1 ~]# semanage port -a -t ssh_port_t -p tcp 2222 # 登録されたか確認します [root@server1 ~]# semanage port -l | grep ssh ssh_port_t tcp 2222, 22

ssh_port_t に2222番が追加されていれば設定完了です。

firewall-cmdで新ポートを開放する

1. firewalldの状態を確認する

# firewalldの状態を確認します [root@server1 ~]# systemctl status firewalld * firewalld.service - firewalld - dynamic firewall daemon Active: active (running) since ...

2. 新ポートを開放する

# 新ポート(2222/tcp)を永続的に開放します [root@server1 ~]# firewall-cmd --permanent --add-port=2222/tcp success # 設定を反映します [root@server1 ~]# firewall-cmd --reload success # 開放されたか確認します [root@server1 ~]# firewall-cmd --list-ports 2222/tcp

重要:この時点ではまだ22番ポートも開いたままにしておいてください。接続確認後に閉じます。

sshdを再起動して設定を反映する

# sshdを再起動します [root@server1 ~]# systemctl restart sshd # 再起動後のsshdの状態を確認します [root@server1 ~]# systemctl status sshd * sshd.service - OpenSSH server daemon Active: active (running) since Tue 2026-04-07 09:30:15 JST; 5s ago ... Process: ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) # 新ポートでListenしているか確認します [root@server1 ~]# ss -tlnp | grep sshd LISTEN 0 128 0.0.0.0:2222 0.0.0.0:* users:(("sshd",pid=12345,fd=4)) LISTEN 0 128 [::]:2222 [::]:* users:(("sshd",pid=12345,fd=6))

ss -tlnpの出力で2222番ポートが表示されていれば、sshdが正常に新ポートで起動しています。

別ウィンドウから新ポートで接続確認する

1. 別のターミナルから接続テストする

現在のSSHセッションを維持したまま、別のターミナルウィンドウを開いて新ポートで接続します。

鉄則:既存のSSHセッションを閉じないまま接続テストを行うこと。接続に失敗した場合でも、既存セッションから設定を修正できます。

# 別のターミナルから新ポート(2222)で接続します $ ssh -p 2222 user@www.example.com # 接続できた場合は成功です The authenticity of host '[www.example.com]:2222' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

接続に成功したら次のステップに進みます。
接続に失敗した場合は、SELinux設定・firewall設定・sshd_configのPort番号を見直してください。

デフォルト22番ポートを閉じる

1. firewall-cmdでsshサービスを削除する

新ポートでの接続を確認できたら、22番ポートを閉じます。

# sshサービス(22番ポート)を永続的に削除します [root@server1 ~]# firewall-cmd --permanent --remove-service=ssh success # 設定を反映します [root@server1 ~]# firewall-cmd --reload success # 現在の開放状況を確認します(22番が消えていることを確認) [root@server1 ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ports: 2222/tcp protocols: forward: yes masquerade: no ...

22番ポートが表示されなくなっていれば完了です。

2. ~/.ssh/configで接続設定を更新する

クライアント側の~/.ssh/configに接続設定を書いている場合は、ポート番号を更新してください。

# ~/.ssh/config の設定例 Host myserver HostName www.example.com User pakira Port 2222 IdentityFile ~/.ssh/id_rsa

トラブルシュート・よくあるエラー

sshdの再起動に失敗する場合

SELinuxで新ポートが許可されていないと、sshdの再起動時に次のエラーが出ることがあります。

# エラーの確認(journalctlで詳細を表示) [root@server1 ~]# journalctl -u sshd -n 20 Apr 07 09:30:15 server1 sshd[12345]: error: Bind to port 2222 on 0.0.0.0 failed: Permission denied. # SELinuxのAVCログを確認します [root@server1 ~]# ausearch -m AVC -ts recent | grep sshd type=AVC msg=audit(...): avc: denied { name_bind } for pid=12345 comm="sshd" src=2222 ...

この場合、手順2のsemanageでポートを登録してからsshdを再起動してください。

「Connection refused」になる場合

新ポートで接続しようとして「Connection refused」になる場合の確認手順です。

# sshdが正しいポートでListenしているか確認します [root@server1 ~]# ss -tlnp | grep sshd # firewall-cmdで該当ポートが開いているか確認します [root@server1 ~]# firewall-cmd --list-ports # SELinuxでポートが許可されているか確認します [root@server1 ~]# semanage port -l | grep ssh

EC2/クラウド環境の場合はセキュリティグループも変更が必要

AWSのEC2などクラウド環境では、セキュリティグループ(またはネットワークACL)でも22番が許可されている設定になっています。
新ポートをセキュリティグループに追加してから、22番のインバウンドルールを削除してください。
クラウドコンソール上での変更はSSHの接続を切断しないため、ロックアウトのリスクなく変更できます。

本記事のまとめ

SSHポート変更は手順通りに行えば難しくありません。「新ポートで繋がることを確認してから22番を閉じる」の原則さえ守れば安全です。
やりたいこと コマンド
sshd_configのPort設定を変更する vi /etc/ssh/sshd_config(Port 2222と記述)
sshd_configの構文チェック sshd -t
SELinuxで新ポートを許可する semanage port -a -t ssh_port_t -p tcp 2222
firewall-cmdで新ポートを開放する firewall-cmd --permanent --add-port=2222/tcp
sshdを再起動する systemctl restart sshd
新ポートで接続を確認する ssh -p 2222 user@hostname
22番ポートを閉じる firewall-cmd --permanent --remove-service=ssh
SSHの設定強化に興味がある方は、「CentOS 7でrootのSSHログインを無効化する」も合わせてご覧ください。

Linuxサーバーのセキュリティ設定を体系的に学びたい方へ

SSHポート変更はサーバーセキュリティ強化の第一歩です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、「Linuxサーバー構築入門マニュアル(図解60P)」を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。