Linux VPS で SSH ポート番号と root パスワードを安全に変更する方法

12 分で読めます 6 回閲覧 0
目次

SSH を 22 番ポートから移しても本気の攻撃者は防げませんが、ログに溜まる自動スキャンの大半は消えます。また新しいサーバーでは、まず root パスワードを変更するのが基本です。このガイドでは、締め出されずに Linux VPS の SSH ポートと root パスワードを変更する方法を説明します。sshd_config の編集、Rocky Linux / AlmaLinux での SELinux ラベル付け、ファイアウォールの開放、Ubuntu 22.10・24.04 の ssh.socket への対応、そして問題発生時の VNC コンソールからの復旧までを扱います。JUSTG のクラウドサーバー・専用サーバー上の Debian、Ubuntu、CentOS 7、Rocky/AlmaLinux 8・9 が対象です。

ステップ1:root パスワードを変更

通常どおり接続できるうちに最初に行います。VNC コンソールで復旧する際に入力するのもこの root パスワードなので、パスワードマネージャーに保存しておきましょう。16 文字以上のランダムな文字列を推奨します。

# Generate a random 24-character password (optional)
openssl rand -base64 18
# Set the new root password (type it twice)
passwd root

別アカウントのパスワードを変える場合は passwd ユーザー名 を実行します。

ステップ2:新しい SSH ポート番号を決める

1024~49151 の範囲で未使用のポート(例:2222 や 22022)を選び、他のサービスが使っていないことを確認します。以下では 2222 を例にします。

# Nothing should be listening on the new port yet
ss -tlnp | grep ':2222' || echo "port 2222 is free"

ステップ3:sshd_config に新しいポートを追加

バックアップを取ってから、旧ポートと新ポートの両方で待ち受けるよう設定します。作業中は 22 番を残しておくことで、後のステップで失敗しても締め出されません。

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
nano /etc/ssh/sshd_config
# Replace the "#Port 22" line with BOTH ports during the change:
Port 22
Port 2222

ステップ4:SELinux で SSH ポートを許可(Rocky Linux / AlmaLinux / CentOS)

Red Hat 系では、SELinux が ssh_port_t ラベルの付いたポートにしか sshd のバインドを許可しません。この手順を省くと「Permission denied」のバインドエラーで sshd が新ポートで起動しません。Debian / Ubuntu は標準で SELinux を使わないため不要です。

# Rocky Linux / AlmaLinux 8, 9
dnf install -y policycoreutils-python-utils
# CentOS 7
yum install -y policycoreutils-python

semanage port -a -t ssh_port_t -p tcp 2222
semanage port -l | grep ssh_port_t

ステップ5:ファイアウォールで新しい SSH ポートを開放

# Debian / Ubuntu with UFW
ufw allow 2222/tcp
ufw status

# CentOS / Rocky / AlmaLinux with firewalld
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
firewall-cmd --list-ports
UFW や firewalld ではなく独自の iptables / nftables スクリプトを使っている場合は、そちらに TCP 2222 の許可ルールを追加してください。JUSTG のクラウドサーバーには無料で IPv6 も付いており、UFW と firewalld はルールを IPv6 にも自動適用します。

ステップ6:SSH を再起動(Ubuntu 22.10 以降・24.04 の ssh.socket 対応)

構文を確認してからサービスを再起動します。現在のセッションは切れません。

sshd -t                         # syntax check, no output = OK

# Debian, Ubuntu 22.04 and older
systemctl restart ssh
# CentOS / Rocky / AlmaLinux
systemctl restart sshd

# Confirm sshd is listening on both ports
ss -tlnp | grep sshd

Ubuntu 22.10 以降は systemd のソケットアクティベーションで SSH を起動します。待ち受けポートは ssh.socket が管理しているため、ssh を再起動するだけではポートは変わりません。バージョンに合った方法を使ってください。

# Is socket activation in use?
systemctl is-active ssh.socket

# Ubuntu 24.04 (and 23.10+): the Port lines in sshd_config are read
# by a systemd generator, so reload and restart the socket
systemctl daemon-reload
systemctl restart ssh.socket

# Ubuntu 22.10 / 23.04: add the ports to a socket override instead
mkdir -p /etc/systemd/system/ssh.socket.d
cat > /etc/systemd/system/ssh.socket.d/listen.conf <<'EOF'
[Socket]
ListenStream=
ListenStream=22
ListenStream=2222
EOF
systemctl daemon-reload
systemctl restart ssh.socket
# Alternative on any of these Ubuntu releases: go back to the classic service
systemctl disable --now ssh.socket
systemctl enable --now ssh.service

ステップ7:2 つ目のセッションで新しい SSH ポートをテスト

今のセッションは開いたままにします。新しいターミナルから新ポートで接続し、ログインに成功してから次へ進んでください。
# From a SECOND terminal on your computer
ssh -p 2222 [email protected]

# Optional ~/.ssh/config entry so you can just type "ssh myvps"
Host myvps
    HostName 203.0.113.40
    Port 2222
    User root

「Connection timed out」はファイアウォールがまだ遮断している可能性が高く、「Connection refused」は sshd がそのポートで待ち受けていない状態です。SELinux、ssh.socket、ss -tlnp を確認しましょう。

ステップ8:22 番ポートを閉じる

新ポートで問題なく入れたら、SSH 設定とファイアウォールから旧ポートを削除し、もう一度再起動して新しいターミナルで再テストします。

# Remove "Port 22" from sshd_config (and from listen.conf on Ubuntu 22.10/23.04)
sed -i '/^Port 22$/d' /etc/ssh/sshd_config
sshd -t && systemctl restart sshd      # use "ssh" on Debian/Ubuntu
# Ubuntu 22.10+ with ssh.socket: systemctl daemon-reload && systemctl restart ssh.socket

# UFW
ufw delete allow 22/tcp
ufw delete allow OpenSSH
# firewalld
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload

ステップ9:VNC コンソールでロールバック

締め出された場合でも、VNC コンソールはネットワークや SSH を経由しないため使えます。JUSTG クライアントエリア → 製品とサービス → 対象の VPS → 管理パネルからコンソールを開いてください。見つからない場合はチケットでお問い合わせください。ステップ1 の root パスワードでログインし、設定を元に戻します。

# In the VNC console, logged in as root
cp /etc/ssh/sshd_config.bak.* /etc/ssh/sshd_config   # or re-add "Port 22"
ufw allow 22/tcp                       # Debian / Ubuntu
firewall-cmd --add-service=ssh         # CentOS / Rocky / AlmaLinux (runtime)
systemctl restart ssh || systemctl restart sshd

よくある質問

SSH ポートを変えればサーバーは安全になりますか?

ボットによるログのノイズは減りますが、それだけでは本当の防御になりません。SSH 鍵認証、パスワード認証の無効化、ファイアウォールと組み合わせてください。

sshd_config を変えたのに Ubuntu 24.04 が 22 番で待ち受けています。

ssh.socket がポートを握っているためです。systemctl daemon-reload の後に systemctl restart ssh.socket を実行するか、ステップ6 のとおりソケットを無効にして ssh.service を使ってください。

Rocky Linux でポート変更後に sshd が起動しません。

原因はほぼ SELinux です。journalctl -u sshd -n 20 でバインドエラーが出ていれば、semanage port -a -t ssh_port_t -p tcp 2222 でポートを追加して再起動します。

SSH ポート変更後も接続できない場合は、https://www.justg.com/submitticket.php からチケットを送信してください。JUSTG テクニカルサポートが対応いたします。

この回答は役に立ちましたか?

関連チュートリアル

root@vps: ~ $ ssh-keygen -t ed25519 -C "laptop-2026"$ ssh-copy-id -i ~/.ssh/id_ed25519.pub root@203…$ ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 … Linuxサーバー Linux SSH 鍵認証の設定方法:ed25519 鍵でログインしパスワード認証を無効化 ed25519 鍵で Linux VPS に SSH 鍵認証を設定し、authorized_keys の権限を整えてパスワード認証を安全に無効化する手順。 10 分で読めます 7 チュートリアルを読む root@vps: ~ $ ss -tulpn$ sshd -T | grep -i '^port'$ nohup sh -c 'sleep 600; ufw disable' >/dev/nu… Linuxサーバー Linux ファイアウォール設定:VPS で UFW と firewalld を使う方法(IPv6 対応) UFW / firewalld で Linux ファイアウォールを設定。SSH 優先許可、Web ポート、送信元 IP 制限、IPv6、締め出し時の復旧まで。 12 分で読めます 2 チュートリアルを読む root@vps: ~ $ free -h$ swapon --show$ df -h / Linuxサーバー Linux VPS にスワップ領域を追加する方法(512MB・1GB の小容量プラン向け) 小容量 Linux VPS にスワップを追加。fallocate / dd でスワップファイル作成、fstab 登録、swappiness 調整まで。 8 分で読めます 2 チュートリアルを読む root@vps: ~ $ df -hT$ df -i$ du -xh --max-depth=1 / 2>/dev/null | sort -h … Linuxサーバー Linux のディスク容量不足:VPS で空き容量を調べて解放する方法 Linux のディスクがいっぱいなら df・du・ncdu で原因を特定し、ジャーナル・キャッシュ・Docker・ログ・削除済みファイルを解放。 11 分で読めます 2 チュートリアルを読む