SSH接続できない!?そんなときにEC2を復旧する方法【AWS】

EC2アイキャッチ画像

みなさん、EC2の設定作業をしていて、SSH接続が一切できなくなった経験はありませんか?

たとえば…

  • ~/.ssh/authorized_keys を消してしまった
  • ec2-user のホームディレクトリごと消してしまった
  • sshd_config を変にいじって再起動、接続不能に…

焦りますよね。

普段はセッションマネージャーやフリートマネージャーを使えばいいですが、ec2-user 自体が破損していたらそれも使えない…。

今回は、そんな「詰んだ」状態から復旧する方法を、画像付きでわかりやすく解説していきます!

・EC2にSSH接続できない!原因分析できない!
・サーバー側の鍵情報を消してしまった
・ec2-userのホームディレクトリを消してしまった
・ssh_configを変に修正してしまった

前提構成

  • RHEL9-broken:SSH接続できなくなったEC2(復旧対象)
  • Linux:SSH接続可能な作業用EC2

この作業用EC2を使って、壊れたサーバーの中身を修正していきます。

作業の流れ

  1. RHEL9-broken のスナップショットを作成
  2. そのスナップショットから新たにボリュームを作成し、作業用EC2にアタッチ
  3. 作業用EC2でマウント・ファイル修正
  4. 修正済みボリュームを切り離して、RHEL9-broken に再アタッチ
  5. SSH接続を確認!

EC2を破壊

まずは実験のため、SSH接続不能な状態にします。
(※このステップは再現用なので、読み飛ばしてOK)

ホームディレクトリの.sshをリネームします。

破壊後

接続できません…。
ということで、復旧作業を開始します。

スナップショットを作成

まずは壊れたEC2インスタンスのルートボリュームからスナップショットを作成します。

ストレージタブに移動し、アタッチされているボリュームをクリック
※EC2は停止した状態で作業するのが望ましいです。

アクション>スナップショットを作成」をクリック

名前は任意で、今回は「RHEL9-broken-yyyymmdd」とし「スナップショット作成」をクリックします。

スナップショットより完了済みを確認

スナップショットからボリュームを作成

作成したスナップショットを元に新しいボリュームを作成します。

EC2ダッシュボードに移動し左部メニューのスナップショットを選択
先ほど作成したスナップショットにチェックを入れ「アクション>スナップショットからボリュームを作成」をクリック

ボリューム作成

デフォルトのまま「ボリュームの作成」をクリック
サイズだけは分かりやすく11Gbにしていますが、お気になさらず。

EC2ダッシュボード>ボリューム」より作成されたことを確認します。
名前は任意でつけてください(今回はRHEL9-broken-beforeにしました)

作業用EC2にボリュームをアタッチ

作成したボリュームを、作業用のEC2にアタッチします。

チェックを入れた状態で「アクション>ボリュームのアタッチ」をクリック

インスタンスはSSH接続できるEC2を選択してください。
デバイス名は使われていないところであればどこでも良いです。

作成完了

ボリュームをマウントして修正

作業用EC2にSSHログインし、ボリュームをマウントします。

# マウント例
sudo mkdir /mnt/RHEL9-broken
sudo mount /dev/xvdf1 /mnt/RHEL9-broken

その後、壊れていたファイルを修正!

/mnt/RHEL9-broken/home/ec2-user/.ssh/authorized_keys を作り直します。

ファイル(.broken_ssh)を直す

修正済みボリュームをデタッチ

アタッチしたEC2のタブメニューよりアタッチしたボリュームのリンクを確認します。
※色々ついていますが、一個下アタッチしていない場合はルートボリュームと追加したボリュームの2つのはずです。

アクション>ボリュームのデタッチ」をクリック

正常にデタッチできました。

修正したボリューム名はRHEL9-broken-afterに変更しておきます。

壊れたEC2のルートボリュームを切り離す

壊れたEC2にチェックをいれストレージタブよりボリュームIDをクリック
この際デバイス名を忘れずにメモしておきましょう。

ボリュームのデタッチ」を行います。

デタッチが完了しました

今壊れたEC2には何もストレージがついていない状態です。

修正済みボリュームをRHEL9-brokenにアタッチ

ついに最後のステップです!
修正済みボリュームを、RHEL9-broken にアタッチします。

EC2ダッシュボード>ボリューム>修正したボリューム」にチェックを入れ
アクション>ボリュームのアタッチ」をクリック

ボリュームのアタッチ」をクリック
デバイス名は先ほどメモしたデバイス名であることを確認しましょう。

成功しました。復旧しているかみてみましょう。

SSH接続の確認!

いざ、接続!

ssh -i ~/.ssh/your-key.pem ec2-user@<パブリックIP>

無事接続できました!

おわりに

今回は、SSH接続できなくなったEC2を復旧する手順を紹介しました。
ポイントは以下の通り:

  • スナップショット作成はバックアップとしても有効
  • 作業用EC2を使って直接ファイル修正
  • 安易に削除や設定変更をせず、IAMやSSMの設定も整備しておく

EC2が壊れても諦めず、データがあれば復旧できます!
トラブルに備えて、この手順をぜひ覚えておいてくださいね。