WordPressで技術ブログを運営しつつ、練習がてら作ったツール系アプリも同じサーバーで公開したい!
そんなケチな目標を掲げ、ConoHa VPSを契約して本番環境を構築した記録です。
前回はConoHa VPSの申し込みから、root権限でのSSH接続・ユーザー追加まで実施しました。
今回はSSHキーの登録から、セキュリティを強固にした2222ポートでの接続までを追っていきます。
前回の記事はこちら。

SSH鍵の登録
鍵の生成
root権限でのSSH接続は、一旦exit。ログアウトしましょう。
これからは作成した一般ユーザー(ここではuser)で再ログインし作業していきます。
今はパスワードでログインしているわけですが、いずれはSSHキーのみでログインしたいところ。
というわけで、まずはローカル環境で鍵を生成していきます。
$ ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/example_vps(好きなファイル名に)
今回生成されるファイル
~/.ssh/example_vps:秘密鍵(絶対に公開しない)
~/.ssh/example_vps.pub:公開鍵(サーバーに登録する)
lsコマンドで該当キー2種類が確認できたら次の工程へ。
公開鍵をVPSに登録
今回はConoHa管理画面からSSHキーを登録しました。
セキュリティタブにあります。

現在は空っぽ。契約時に登録しておくとここに入るのかな?
$ cat ~/.ssh/example_vps.pub
このコマンドを実行し表示された1行(ssh-ed25519 AAAA…メールアドレスまで全て)をConoHa管理画面から「追加」ボタンを押下し貼り付けます。

今回はlocal-ubuntuという名前にしました。
まじでエンジニアになりたての頃、ここに秘密鍵のほう貼ってて震撼した記憶があるな。
sshd_configの更新・反映
sshd_configの更新
公開鍵を設定しましたら、まずはパスワードでSSH接続しましょう。
後続の作業で、パスワードログインを撤廃し、SSH公開鍵だけでログインできるようにしていきます。
$ ssh user(ユーザー名)@IPアドレス
ログインができたら、sshd_configを編集します。
$ sudo vi /etc/ssh/sshd_config
sshd_configファイルのうち、編集するのは以下の4項目。
新規追記ではなく、既存の行(コメントアウトされている場合は # を外して)を編集します。
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
各設定の意味
自分がそうだったのですが PermitRootLogin が2箇所に記述されている場合があります。
後に書かれた行が優先されるので、下の行を no に変更してください(あるいはどっちもnoに)。
ssh.socketの無効化
設定変更後に sudo systemctl restart ssh を実行しましたが、なぜか2222番ポートでListenされず、22番ポートのままだったんですよね。
確認コマンド
$ sudo systemctl status ssh.socket
→ Listen: 0.0.0.0:22 (Stream) と表示された
これ、Ubuntu 24.04の仕様によるものなんですが、 ssh.socket というsystemdのソケット管理機能が22番ポートを固定で管理しているみたいなんです。
このせいで、せっかく編集した sshd_config の設定が上書きされてました。
ssh.socketを無効化していきましょう。
$ sudo systemctl stop ssh.socket
$ sudo systemctl disable ssh.socket
$ sudo systemctl restart ssh
- Qこんな簡単に無効化していいの?
- A
調査したところ、セキュリティ上の問題はないらしい。
ssh.service が代わりに常駐するため、SSH接続は引き続き可能で、鍵認証などのセキュリティ設定も全て機能するとのこと。
無効化後、2222番でちゃんとListenされていることを確認します。
$ sudo ss -tlnp | grep ssh
→ LISTEN 0 128 0.0.0.0:2222 と表示
以下は実際にコマンドを叩いた際の記録です。
$ sudo systemctl stop ssh.socket
$ sudo systemctl disable ssh.socket
Removed "/etc/systemd/system/sockets.target.wants/ssh.socket".
Removed "/etc/systemd/system/ssh.service.requires/ssh.socket".
$ sudo systemctl restart ssh
$ sudo ss -tlnp | grep ssh
LISTEN 0 128 0.0.0.0:2222 0.0.0.0:* users:(("sshd",pid=xxxxx,fd=3))
LISTEN 0 128 [::]:2222 [::]:* users:(("sshd",pid=xxxxx,fd=4))
余談:実は後々大問題になってた。
sshd_configを更新しても、とある別のファイルが優先されていたようであやうく二度ととログインできなくなるところでした…。
詳細はこちら。

さて、まだVPSにSSH接続したまま(重要)作業を続けていきましょう。
UFW(ファイアウォール)の設定
先ほど2222番ポートの設定をしたのですが、この段階では接続しようとしてもうまくいかない可能性が高く(というか自分がそうだった)、事前にUFWも設定しておきました。
ConoHaのセキュリティグループ:ネットワークレベルの外側のファイアウォール
UFW:VPS内部のソフトウェアファイアウォール
状況の確認
$ sudo ufw status
UFWが有効になっている場合は Status: active とコマンドラインに表示されます。
2222番ポート、およびHTTP、HTTPS接続をUFWで許可しておきましょう。
$ sudo ufw allow 2222/tcp
$ sudo ufw allow 80/tcp # HTTP
$ sudo ufw allow 443/tcp # HTTPS
$ sudo ufw reload
実際に叩くとこんな感じ。
$ sudo ufw allow 2222/tcp
Rule added
Rule added (v6)
$ sudo ufw reload
Firewall reloaded
最終的な結果
$ sudo ufw status
Status: active
To Action From
-- ------ ----
2222/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
デフォルトポリシーも確認しておきます。
$ sudo ufw default deny incoming # 外部からの通信をデフォルトで全拒否
$ sudo ufw default allow outgoing # サーバーからの送信は全て許可
別ターミナルで接続確認
sshd_config の設定ミスがあった場合、再起動後に一切SSH接続できなくなるリスクがあります。
必ずターミナルAは閉じずに、ターミナルBで新しい設定での接続を確認してから進めます。
$ ssh -i ~/.ssh/example_vps -p 2222 user@IPアドレス
もしここでパスワードを求められていたら、SSHキーでは接続できていないです!!!
自分はこれでしくじりました!!!!!
絶対にさっきの記事を読んで!!!
無事に接続できたそこのあなたは、遠慮なく次へどうぞ。
ターミナルAでexit→再接続を実施します。
22番ポートを削除
2222番でのSSH接続が確認できたら、ConoHa管理画面から22番ポートのインバウンドルールを削除しちゃってOKです。
22番を残しておくと不要な攻撃の入り口になるため、確認後は速やかに削除します。
ここでVPSにSSH接続したまま作業していたんですが、ConoHa管理画面で22番ポートを削除した瞬間に(当たり前に)コマンドラインが微動だにしなくなりました。ばか??
慌ててセキュリティグループに22番を追加したところ、コマンドラインが動き出しました。
必ずexitしてからセキュリティグループの更新はしようね…。
ではまた次回、パッケージ・アプリケーションのインストール編にて!


