AMIからEC2インスタンス作成するとパスワードログインができなくなる
AWSではセキュリティ向上のため、Linuxでパスワードログインをできる状態にしてAMIを作成しても、AMIからEC2インスタンスを作成するとパスワードログインができなくなります。
公開鍵認証を使わないケースはあまりないと思いますが、運用上の要件などで以下のように「/etc/ssh/sshd_conf」でパスワードのみのログインにするケースがあるかもしれません。
Match User ec2-user
PubkeyAuthentication no
PasswordAuthentication yes
この場合、AMIからインスタンスを再作成したときにPasswordAuthenticationがnoに書き換えられ、パスワードでも公開鍵でもログインができなくなってしまいます。
対処方法
実は対応方法は簡単で、インスタンス作成時に実行されるユーザデータに以下のスクリプトを書くだけです。
#!/bin/bash
/bin/cp /etc/ssh/sshd_config /tmp/sshd_config.bk
/bin/sed -i -e "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
/bin/systemctl restart sshd
関連情報
/etc/cloud/cloud.cfgという設定ファイルでこのパスワードログインを書き換えるかどうかを制御しているので以下の設定にすることで変更されなくなります。
ssh_pwauth: 1
その他
私もこの状況に陥って少し困ったのですが、公開鍵認証を使っているデプロイ用ユーザがあったのでログインすることができました。
その後、ユーザデータでできるのでは?と思い少しググって見たけれど、見つけられなかったので検証してみました。ちなみに、スクリプトの最初の「#!/bin/bash」を「/bin/bash」と書いていて、なかなかうまくいかないという凡ミスで時間がかかってしまいました。。