SSHのパスワード認証を無効化したらログインできなくなった話【authorized_keysに気をつけろ】

インフラ関連

ことの発端

こちらのシリーズにて、セキュリティを強固にするためSSHキーでのログインのみを許可しようとしておりました。

ConoHa VPSでWordPress+ツール系アプリを公開するまでの奮闘記2【SSH鍵登録~2222ポート接続編】
ConoHa VPS構築記録の第2回。SSH鍵の生成・公開鍵登録からsshd_configの編集、Ubuntu 24.04特有のssh.socket問題の解消、UFW設定、2222番ポートでの接続確認まで、実際のつまずきポイントを交えて解説します。


通常、SSH接続の際はパスワード認証も可能なのですが、万が一パスワードが漏洩した際にSSHキーのみでのログインに絞っていたら安全じゃないですか。

で、よくよく作業を振り返ると、パスワード認証を無効にしたはずなのにパスワードでログインできちゃってたわけです。

なぜパスワード認証が有効のままだったのか?

初期構築時に「PasswordAuthentication no」を設定したはずだったのになんで?

$ sudo sshd -T | grep -E "passwordauthentication|pubkeyauthentication|port"
# port 2222
# pubkeyauthentication yes
# passwordauthentication yes  ← yesになっている!

先の記事でも明記しておりますが、sshd_configファイルにはしっかりと「PasswordAuthentication no」って書いてあります。

原因:/etc/ssh/sshd_config.d/50-cloud-init.conf が設定を上書きしていた

ConoHaのVPSはcloud-initという初期設定ツールが動いており、 sshd_config.d/50-cloud-init.conf がメインの sshd_config の設定を上書きしていました。

$ sudo cat /etc/ssh/sshd_config.d/50-cloud-init.conf
# PasswordAuthentication yes  ← これが原因

SSHの設定ファイルの優先順位は以下の通りです。

  • sshd_config.d/50-cloud-init.conf  ← こちらが優先され…
  • sshd_config                        ← 無視されていた
筆者
筆者

よーしじゃぁ、50-cloud-init.conf も「PasswordAuthentication no」にしちゃおう!

と早合点した者の末路がこちら。

鍵認証も通らなくなりVPSにログインできなくなる

終わったんだが??????

SSHキーは正常に発行できたし、管理画面からも登録しておいたよね!??!?? なに??!!? なんで!!!!!??(当時の発狂)

原因:~/.ssh/authorized_keys が存在していなかった

大前提なのですが、契約したてのまっさらなVPS上に ~/.ssh/ ディレクトリが存在するわけないんですよね。
そりゃ公開鍵も登録されてないし、鍵認証も失敗するわ。

管理画面の「SSH key」に追加するだけじゃだめなのかもしれん…。先に言ってくれ…。

パスワード認証を無効化する正しい手順

絶望の淵に立たされていた私ですが、Conohaの管理画面にはコンソール機能という救世主がいます。
さっそくVPSに接続し、復旧を試みることにしました。

Step1:.sshディレクトリを作成

$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh

Step2:公開鍵を登録

ローカルPCで公開鍵の内容を確認しておいてくださいね。

$ echo "ssh-ed25519 AAAA...(公開鍵の内容)" >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

Step3:別ターミナルでログイン確認

別ターミナルで!!!必ず!!!!鍵認証ログインを確認しましょう。
ここではexample_vpsが鍵の名前、userがユーザー名です。

$ ssh -i ~/.ssh/example_vps -p 2222 user@IPアドレス

Step4:鍵認証が通ることを確認してからパスワード認証を無効化

$ sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf
# PasswordAuthentication yes → no に変更
$ sudo systemctl restart ssh

Step5:再度別ターミナルでログイン確認

$ ssh -i ~/.ssh/example_vps -p 2222 user@IPアドレス

ここまでしてようやく、パスワードを使わず鍵でSSH接続ができました!
あ~~~~生きた心地がしなかった。

【authorized_keysの正しい形式】
ssh-ed25519 AAAAxxxxxx… user@hostname
3つの要素が半角スペース区切りで1行に収まっている状態が正しい形式です。途中で改行が入ったり、先頭に空白があるとログインできません。

まとめ

ということで、今回はSSH接続にまつわる失敗談でした。
Conoha VPSには、管理画面からコンソールでログインできる機能があるので、九死に一生を得ましたね…。ありがとうコンソール…。

ではまた次回!

タイトルとURLをコピーしました