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

通常、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の設定ファイルの優先順位は以下の通りです。

よーしじゃぁ、50-cloud-init.conf も「PasswordAuthentication no」にしちゃおう!
と早合点した者の末路がこちら。
鍵認証も通らなくなりVPSにログインできなくなる
終わったんだが??????
SSHキーは正常に発行できたし、管理画面からも登録しておいたよね!??!?? なに??!!? なんで!!!!!??(当時の発狂)
原因:~/.ssh/authorized_keys が存在していなかった
大前提なのですが、契約したてのまっさらなVPS上に ~/.ssh/ ディレクトリが存在するわけないんですよね。
そりゃ公開鍵も登録されてないし、鍵認証も失敗するわ。

パスワード認証を無効化する正しい手順
絶望の淵に立たされていた私ですが、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には、管理画面からコンソールでログインできる機能があるので、九死に一生を得ましたね…。ありがとうコンソール…。
ではまた次回!


