【ubuntu26.04】Ubuntu Server 26.04でSSHのポート変更と鍵認証を設定する

【ubuntu26.04】Ubuntu Server 26.04でSSHのポート変更と鍵認証を設定する

Ubuntu Serverを構築したあと、最初に見直したい設定の一つがSSHだ。

SSHはサーバーへリモートログインするための重要な入口だ。設定を間違えると外部からの攻撃対象になりやすく、逆に変更手順を誤ると自分自身がサーバーへ接続できなくなる。

この記事では、Ubuntu Server 26.04 LTSでSSHの待ち受けポートを変更し、公開鍵認証でログインできるようにしたうえで、パスワード認証を無効化する手順をまとめる。

なお、SSHポートの変更は攻撃を根本的に防ぐ対策ではない。標準ポートである22番への総当たりアクセスやログノイズを減らす目的として考えるのがよい。本命の対策は、鍵認証を使い、パスワードログインを無効化することだ。

検証環境

この記事の手順は、以下の環境で確認した。

今回の環境は次のとおり。

項目
OSOS: Ubuntu Server 26.04 LTS
SSHサーバーOpenSSH Server
OpenSSHOpenSSH_10.2p1
変更後のSSHポート2222

Ubuntu 26.04では、SSHの待ち受けにssh.socketが使われる。そのため、/etc/ssh/sshd_configや/etc/ssh/sshd_config.d/*.confでPortを変更したあと、ssh.serviceだけを再起動しても待ち受けポートが変わらない場合がある。

Ubuntu 26.04でSSHポートを変える場合は、設定変更後に以下も実行する。

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh.service

この点が、従来のUbuntu Server向け手順と大きく違うところだ。

作業前の注意点

SSH設定の変更は、手順を間違えるとリモート接続できなくなる。

作業前に以下を守る。

  • 既存のSSH接続は閉じない
  • 新しいターミナルから接続確認してから古い接続を切る
  • 設定変更後は必ずsudo sshd -tで構文チェックする
  • UFWなどのファイアウォールを使っている場合は、SSH再起動前に新しいポートを許可する
  • クラウドやVPSの場合は、管理画面側のセキュリティグループでも新しいポートを許可する

物理サーバーや仮想環境でコンソールに入れるならまだ復旧しやすいが、VPSやクラウドでSSHしか入口がない場合は特に注意する。

OpenSSH Serverをインストールする

Ubuntu Serverインストール時にSSHサーバーを入れていない場合は、以下でインストールする。

sudo apt update sudo apt install -y openssh-server

サービスの状態を確認する。

systemctl status ssh.service --no-pager

結果としてactive (running)になっていればよい

ubuntu@ubuntu-2604-autoinstall:~$ systemctl status ssh.service --no-pager
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; disabled; preset: enabled)
     Active: active (running) since Wed 2026-05-13 00:48:53 JST; 8min ag

Ubuntu 26.04では、待ち受けポートは主にssh.socket側で確認する。

sudo ss -tlnp | grep ssh

初期状態では、以下のように22番で待ち受けていればSSHサーバーは動作している。

ubuntu@ubuntu-2604-autoinstall:~$ sudo ss -tlnp | grep ssh
[sudo: authenticate] Password:
LISTEN 0      4096         0.0.0.0:22        0.0.0.0:*    users:(("sshd",pid=1299,fd=3),("systemd",pid=1,fd=102))
LISTEN 0      4096            [::]:22           [::]:*    users:(("sshd",pid=1299,fd=4),("systemd",pid=1,fd=104))

接続できるかも確認しておく。

ssh ユーザー名@サーバーIP

例:

ssh ubuntu@192.168.1.100

現在のSSH設定をバックアップする

設定変更前にバックアップを取る。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Ubuntuでは、/etc/ssh/sshd_config本体を直接編集することもできる。ただし、カスタム設定は/etc/ssh/sshd_config.d/配下に分けて置く方が管理しやすい。

今回は以下のファイルを作成する。

/etc/ssh/sshd_config.d/00-custom.conf

最小構成の Ubuntu Server だと nanovi が入っていないことがある。

vi 系を使いたいなら、一般的には vim を入れる。

sudo apt update
sudo apt install -y vim

ファイルを作成する。

sudo vi /etc/ssh/sshd_config.d/00-custom.conf

ここで99-custom.confではなく00-custom.confにしているのは、Ubuntu環境では50-cloud-init.confなどの設定ファイルが先に存在することがあるためだ。

OpenSSHでは、多くの設定項目について「最初に読み込まれた値」が優先される。たとえば50-cloud-init.confにPasswordAuthentication yesがある環境では、99-custom.confにPasswordAuthentication noを書いても反映されない。

SSHのポートを変更する

00-custom.confに以下を記載する。

Port 2222

保存したら、設定の構文チェックを行う。

sudo sshd -t

何も表示されなければ構文エラーはない。

現在の有効設定を確認する場合は、以下を使う。

sudo sshd -T | grep '^port '

以下のように表示されれば、OpenSSHの設定としては2222番が有効になっている。

port 2222

ただし、Ubuntu 26.04ではこれだけでは実際の待ち受けポートが変わらない場合がある。次の手順でssh.socketへ反映する。

ssh.socketへポート変更を反映する

Ubuntu 26.04では、SSHの待ち受けにssh.socketが使われる。

Portを変更したら、以下を実行する。

sudo systemctl daemon-reload

sudo systemctl restart

ssh.socket sudo systemctl restart ssh.service

待ち受けポートを確認する。

sudo ss -tlnp | grep 2222

以下のように2222で待ち受けていれば成功だ。

ubuntu@ubuntu-2604-autoinstall:~$ sudo ss -tlnp | grep 2222
LISTEN 0      4096         0.0.0.0:2222      0.0.0.0:*    users:(("sshd",pid=2766,fd=3),("systemd",pid=1,fd=66))
LISTEN 0      4096            [::]:2222         [::]:*    users:(("sshd",pid=2766,fd=4),("systemd",pid=1,fd=67))
ubuntu@ubuntu-2604-autoinstall:~$

ssh.socket側でも確認できる。

systemctl status ssh.socket --no-pager

ubuntu@ubuntu-2604-autoinstall:~$ systemctl status ssh.socket --no-pager
● ssh.socket - OpenBSD Secure Shell server socket
     Loaded: loaded (/usr/lib/systemd/system/ssh.socket; enabled; preset: enabled)
    Drop-In: /run/systemd/generator/ssh.socket.d
             mqaddresses.conf
     Active: active (running) since Wed 2026-05-13 01:05:39 JST; 37s ago
 Invocation: f54348cdcbf54356ad02f968deb70548
   Triggers: ● ssh.service
     Listen: 0.0.0.0:2222 (Stream)
             [::]:2222 (Stream)
      Tasks: 0 (limit: 4030)
     Memory: 12K (peak: 256K)
        CPU: 669us
     CGroup: /system.slice/ssh.socket

May 13 01:05:39 ubuntu-2604-autoinstall systemd[1]: Listening on ssh.socket - OpenBSD Secure Shell server socket.
ubuntu@ubuntu-2604-autoinstall:~$

Listen: 0.0.0.0:2222やListen: [::]:2222が表示されていれば、socket側にも反映されている。

ファイアウォールで新しいポートを許可する

UFWを使っている場合は、新しいSSHポートを許可する。

sudo ufw allow 2222/tcp

UFWの状態を確認する。

sudo ufw status

以下のように2222/tcpが許可されていればよい。

ubuntu@ubuntu-2604-autoinstall:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
2222/tcp                   ALLOW       Anywhere
2222/tcp (v6)              ALLOW       Anywhere (v6)

まだ接続確認が終わるまでは、既存の22番ポートは閉じない方が安全だ。

新しいポートでSSH接続する

別のターミナルを開き、新しいポートで接続できるか確認する。

ssh -p 2222 ユーザー名@サーバーIP

例:

ssh -p 2222 ubuntu@192.168.1.100

TeraTermを使用している場合はTCPポートに2222を設定する

接続できればポート変更は完了だ。

ここで接続できない場合は、既存のSSH接続を切らずに以下を確認する。

sudo sshd -t
systemctl status ssh.socket --no-pager
systemctl status ssh.service --no-pager
sudo journalctl -u ssh.service -n 50 --no-pager
sudo ufw status
sudo ss -tlnp | grep ssh

SSH鍵を作成する

次に、鍵認証を設定する。

接続元PCでSSH鍵を作成する。すでにSSH鍵を使っている場合は、この手順はスキップしてもよい。

ssh-keygen -t ed25519

今回はPowerShellで実行する

PS C:\Users\kyoro> ssh-keygen -t ed25519

以下のように保存先を聞かれたら、通常はそのままEnterでよい。

Enter file in which to save the key (C:\Users\kyoro/.ssh/id_ed25519):

パスフレーズも設定しておくと安全性が上がる。

作成されるファイルは主に以下の2つだ。

%USERPROFILE%\.ssh\id_ed25519 秘密鍵
%USERPROFILE%\.ssh\id_ed25519.pub 公開鍵

秘密鍵であるid_ed25519は外部に渡してはいけない。サーバーに登録するのは.pubが付いた公開鍵の方だ。

公開鍵をサーバーへ登録する

PowerShellで公開鍵の内容を確認する

PS C:\Users\kyoro> type ~/.ssh/id_ed25519.pub

以下のような表示が出る

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@PC

出力内容をすべてコピーしUbuntu側で以下コマンドを実行し~/.ssh/authorized_keysに貼り付ける

sudo vi ~/.ssh/authorized_keys

パスワードではなく、秘密鍵でログインできれば成功だ。

鍵認証でログインできるか確認する

新しいターミナルから、鍵認証でログインできるか確認する。

ssh -p 2222 ユーザー名@サーバーIP

TeraTermの場合はIPアドレスとポートを指定して「OK」を押したあとに秘密鍵を指定してログインする。

うまくいかない場合は、詳細ログ付きで接続して原因を見る。

ssh -vvv -p 2222 ユーザー名@サーバーIP

サーバー側では以下でSSHログを確認する。

sudo journalctl -fu ssh.service

よくある原因は以下だ。

  • 公開鍵を登録するユーザーを間違えている
  • authorized_keysに貼り付けた公開鍵が途中で改行されている
  • .sshやauthorized_keysの権限が緩すぎる
  • 接続元で別の秘密鍵を使っている
  • サーバー側のファイアウォールで新ポートが許可されていない

特定の秘密鍵を指定する場合は-iを使う。

ssh -i ~/.ssh/id_ed25519 -p 2222 ユーザー名@サーバーIP

パスワード認証を無効化する

鍵認証でログインできることを確認してから、パスワード認証を無効化する。

ここを先にやると、自分がログインできなくなる可能性がある。

00-custom.confを編集する。

sudo vi /etc/ssh/sshd_config.d/00-custom.conf

以下のように設定する。

Port 2222 
PubkeyAuthentication yes 
PasswordAuthentication no 
KbdInteractiveAuthentication no 
PermitRootLogin no

それぞれの意味は以下の通りだ。

設定意味
Port 2222SSHの待ち受けポートを2222にする
PubkeyAuthentication yes公開鍵認証を有効にする
PasswordAuthentication noパスワード認証を無効にする
KbdInteractiveAuthentication noキーボード対話型認証を無効にする
PermitRootLogin norootユーザーでのSSHログインを禁止する

設定後、構文チェックする。

sudo sshd -t

有効設定も確認する。

sudo sshd -T | grep -E '^(port|pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|permitrootlogin) '

以下のようになっていれば意図通りだ。

ubuntu@ubuntu-2604-autoinstall:~$ sudo sshd -T | grep -E '^(port|pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|permitrootlogin) '
port 2222
permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
kbdinteractiveauthentication no

問題なければ、socketとサービスへ反映する。

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh.service

パスワード認証が無効化されたか確認する

まず、鍵認証でログインできることを確認する。

ssh -p 2222 ユーザー名@サーバーIP

次に、あえてパスワード認証を指定して接続してみる。

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no -p 2222 ユーザー名@サーバーIP

パスワードでログインできなければ、パスワード認証の無効化は成功だ。

PS C:\Users\kyoro> ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no -p 2222 ubuntu@192.168.11.40
ubuntu@192.168.11.40: Permission denied (publickey).
PS C:\Users\kyoro>

もしここでまだパスワード認証が有効な場合は、以下を確認する。

sudo sshd -T | grep passwordauthentication ls -l /etc/ssh/sshd_config.d/

50-cloud-init.confなど、00-custom.confより先に読み込まれる設定ファイルがないか確認する。

22番ポートを閉じる

新しいポートでログインでき、鍵認証も問題ないことを確認したら、必要に応じて22番ポートを閉じる。

Ubuntu 26.04でPort 2222だけを指定した場合、ssh.socketの待ち受けは2222番に切り替わるため、22番は待ち受けなくなる。

UFWを使っていて、22番を明示的に許可していた場合は削除する。

sudo ufw delete allow 22/tcp

状態を確認する。

sudo ufw status

ただし、クラウド環境ではUFWだけでなく、クラウド側のセキュリティグループやファイアウォール設定も確認する。

最終的な設定例

今回のサーバー側設定は以下の通りだ。

port 2222
permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
kbdinteractiveauthentication no

設定変更後は必ず以下を実行する。

sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh.service

トラブルシューティング

SSHの待ち受けポートが22番のまま

Ubuntu 26.04ではssh.socket側に変更が反映されていない可能性がある。

以下を実行する。

sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh.service

その後、待ち受けを確認する。

systemctl status ssh.socket --no-pager sudo ss -tlnp | grep ssh

SSHサービスが起動しない

構文エラーの可能性が高い。

sudo sshd -t

ログも確認する。

sudo journalctl -u ssh.service -n 100 --no-pager

新しいポートで接続できない

待ち受けポートを確認する。

sudo ss -tlnp | grep 2222

ファイアウォールも確認する。

sudo ufw status

クラウドやVPSの場合は、管理画面側のセキュリティグループで新しいポートが許可されているか確認する。

鍵認証できない

サーバー側で権限を確認する。

ls -ld ~/.ssh ls -l ~/.ssh/authorized_keys

目安は以下だ。

~/.ssh 700 ~/.ssh/authorized_keys 600

修正する場合は以下を実行する。

chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

接続元で秘密鍵を指定して試す。

ssh -i ~/.ssh/id_ed25519 -p 2222 ユーザー名@サーバーIP

パスワード認証を無効化したのにまだ有効

設定ファイルの読み込み順を確認する。

ls -l /etc/ssh/sshd_config.d/ sudo sshd -T | grep passwordauthentication

Ubuntu環境では、50-cloud-init.confに以下のような設定が入っていることがある。

PasswordAuthentication yes

OpenSSHでは先に読み込まれた値が優先されるため、99-custom.confにPasswordAuthentication noを書いても上書きできない。

この記事では、より早く読み込まれる00-custom.confを使っている。

パスワード認証を無効化したら入れなくなった

既存のSSH接続が残っている場合は、設定を戻す。

sudo vi /etc/ssh/sshd_config.d/00-custom.conf

一時的に以下のように戻す。

PasswordAuthentication yes
KbdInteractiveAuthentication yes

構文チェックして反映する。

sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh.service

既存接続もなく、コンソールにも入れない場合は、VPSやクラウドの管理画面からコンソール接続・レスキューモード・スナップショット復元などを使う必要がある。

まとめ

Ubuntu Server 26.04でSSHを最低限安全に使うなら、以下の流れで設定する。

  1. OpenSSH Serverをインストールする
  2. SSH設定をバックアップする
  3. /etc/ssh/sshd_config.d/00-custom.confを作成する
  4. SSHポートを変更する
  5. systemctl daemon-reloadとssh.socket再起動でポート変更を反映する
  6. ファイアウォールで新ポートを許可する
  7. 新ポートで接続確認する
  8. SSH鍵を作成する
  9. 公開鍵をサーバーへ登録する
  10. 鍵認証でログインできることを確認する
  11. パスワード認証を無効化する

ポート変更だけではセキュリティ対策としては弱い。

実運用では、鍵認証、パスワード認証の無効化、rootログイン禁止、ファイアウォール設定、ログ確認までセットで考えるのがよい。

参考

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *