CentOS
SSH
EC2

EC2でsshログインできなくなったとき(自爆)

More than 1 year has passed since last update.

経緯

EC2にログインした後、chownを間違った箇所に実行してしまいました。(自爆)
具体的には「/home/」に関係ない権限を与えてしまい、既存ユーザでsshできなくなりました。

当日はそれに気づかず、ターミナルはセッション切れに。
翌日ログインできなくなってました。。。

手順

  1. 該当インスタンスのボリュームをデタッチします
  2. デタッチしたボリュームは作業用インスタンスにアタッチします
  3. アタッチしたボリュームをマウントし、sshの設定を変え、rootログイン可能にします
  4. 再び元のインスタンスにアタッチし、rootログインします
  5. その後必要な権限設定のやり直しを行います

以下詳細です。

1.該当インスタンスのボリュームをデタッチします

ボリュームをデタッチします。
※事前にインスタンスの停止が必要です。

image.png

2. デタッチしたボリュームは作業用インスタンスにアタッチします

ボリュームを作業用インスタンスにアタッチします。
アタッチする際もインスタンスの停止が必要です。
※作業用インスタンスがなければ作成してください。

アタッチ時の「インスタンス」は同じアベイラビリティーゾーンのインスタンスから選択できます。
デバイスは「/dev/sdf」のままでOKです。

image.png

image.png

3. アタッチしたボリュームをマウントし、sshの設定を変え、rootログイン可能にします

アタッチした作業用インスタンスを起動し、sshログインします。
ログインしたら作業用ディレクトリを作成し、ボリュームをマウントします。

ボリュームの確認

lsblk

作業ディレクトリ(マウントポイント)の作成

sudo mkdir /mnt/xvdf

ボリュームをマウント

sudo mount /dev/xvdf1 /mnt/xvdf/

sshの設定変更

#編集(マウント先のファイルであることに注意!元のファイルはイジらないようにね。)
vim /mnt/xvdf/etc/ssh/sshd_config

#PermitRootLogin を下記へ変更(元は no でした)
PermitRootLogin without-password

公開鍵のコピー

#rootのバックアップ
cp /mnt/xvdf/root/.ssh/authorized_keys /mnt/xvdf/root/.ssh/authorized_keys_bk

#centosユーザの設定をコピー(上書き)
cp /mnt/xvdf/home/centos/.ssh/authorized_keys /mnt/xvdf/root/.ssh/authorized_keys

これでrootでログインする準備ができました。

4. 再び元のインスタンスにアタッチし、rootログインします

手順2の逆です。
作業用インスタンスを停止し、ボリュームをデタッチしてください。
その後、元のインスタンスにアタッチし、インスタンスを起動してください。

注意!

アタッチする際のデバイス欄には「/dev/sda1」を入力してください。
これを入力しないとインスタンスが起動できないので気づくと思います。

5. その後必要な権限設定のやり直しを行います

#ログイン
ssh -i "XXX.pem" root@XX.XX.XX.XX

#その後、冒頭のchownで間違えた設定を修正しました。。。

※手順3の「sshの設定変更」「公開鍵のコピー」も元に戻しておきましょう。

参考

AWSでSSH接続できなくなってしまったときの復旧方法
ec2-userの鍵を使ってrootで直にSSH接続してみる