Posted at

EC2でsshやsudoできなくなった場合の対処法

More than 1 year has passed since last update.

EC2でデフォルトユーザを消したり、visudoを使わずに編集ミスした場合、sudoが使えなくなります。つまり、インスタンスのシャットダウンすら出来なくなります。

または、authorized_keysを間違えて消した場合などは、SSHの代替手段がないのでログインすらできなくなります。

そんな時でも、ルートデバイスがEBSなら、ディスクを他のインスタンスに付け替えられるので簡単に復旧できます。以下の例はubuntuですが、他のディストリビューションでも同じことが出来ます。


手順


問題が起きたインスタンスをAWSコンソールから停止

ログインできないので、コンソールから止めるしか無いです。

image.png


EBSのデタッチ

アタッチしているインスタンスが停止すると、デタッチできるようになります。

image.png


新規インスタンスの作成

一時的な救出用のインスタンスを作ります。

image.png


EBSアタッチして、マウントする

先程作った救出用インスタンスにデタッチしたEBSをアタッチして、適当なディレクトリにマウントすると、間違えて操作したインスタンスのルートディレクトリが操作できます。(ここはrootで作業)

root@ip-10-0-0-44:/home/ubuntu# mkdir hoge

root@ip-10-0-0-44:/home/ubuntu# mount /dev/xvdf1 hoge
root@ip-10-0-0-44:/home/ubuntu# ls hoge/
bin dev home initrd.img.old lib64 media opt root sbin srv tmp var vmlinuz.old
boot etc initrd.img lib lost+found mnt proc run snap sys usr vmlinuz


sudoersをいい感じに編集して、シャットダウン

アンマウントするか、綺麗にインスタンスを落とします。

nano hoge/etc/sudoers.d/90-cloud-init-users

umount hoge
halt


EBSをルート用にアタッチ

元のインスタンスにEBSを戻します。基本的には先程と逆の操作ですが、適当な名前でアタッチすると起動できないので、予約済みのデバイス名を参考に戻します。

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/device_naming.html#available-ec2-device-names

ubuntuでは/dev/sda1です。アタッチせずに起動するとエラーで教えてくれるようなので、それを参考にしても良いかも。

image.png

起動すると、なおっていますね。

juntaki@ec2 ~> sudo su

root@ec2:/home/juntaki#


まとめ

これで、EC2で設定ミスをしても戻せます。