初めまして
いつもお世話になってるQiitaの皆様、色々な情報をご掲載いただきありがとうございます。
今回Qiitaに初めて投稿させていただきます。
どうぞよろしくお願いいたします。
障害内容
開発用の AWS EC2インスタンスにSSH接続できない
発生原因
先日メンテナンス時に /etc/passwd 内の一部ユーザに設定されている
ホームディレクトリ位置を変更した事がわかりました。
ディレクトリ位置変更でSSH接続に使用する秘密鍵の参照位置が変わり
鍵ファイルを見つけることができず認証が失敗しておりました。
復旧対応
指定ユーザのホームディレクトリ位置をメンテナンス前の状態に戻すように対応。
復旧の流れ
- 復旧用のインスタンスを新規作成
- 障害インスタンスの停止、ボリュームのデタッチ
- 復旧インスタンスに上記ボリュームをアタッチ
- 復旧インスタンスの起動、ログイン
- 復旧インスタンスにマウント
- 復旧インスタンスで修正作業
- 復旧インスタンスからアンマウント
- 復旧インスタンスの停止、ボリュームのデタッチ
- 障害インスタンスに修正したボリュームをアタッチ
- 再起動
復旧作業 (詳細)
1. 復旧用のインスタンスを新規作成
AWS EC2のコンソールからインスタンスを1点新規作成します。
障害インスタンスのOSはAmazon Linux 2のため同じOSを設定しました。
また、インスタンスの種類やストレージ容量は t2.nano 8GB にしています。
2. 障害インスタンスの停止、ボリュームのデタッチ
インスタンスを停止させてEC2 ボリュームのコンソールに移動します。
対象のボリュームに掲載されているアタッチ済み情報のインスタンスIDと障害インスタンスのIDが一致していることを確認します。
**(重要)このとき「ボリュームID」と「アタッチのパス」をメモ等に記録して下さい。 **
上記完了後にボリュームを選択してアクションからデタッチをします。
3. 復旧インスタンスに上記ボリュームをアタッチ
デタッチ済みのボリュームを選択してアクションからボリュームのアタッチを選択します。
インスタンス名とデバイスを指定する画面でインスタンス名: 復旧用のインスタンス
デバイス: /dev/sdf を指定します。
4. 復旧インスタンスの起動、ログイン
復旧用インスタンスを起動してSSH接続をします。
接続後、rootユーザにスイッチします。
5. 復旧インスタンスにマウント
llコマンドにて先ほどアタッチした/dev/sdf内容を確認します。
ll /dev/ | grep sdf
lrwxrwxrwx 1 root root 4 2月 20 12:36 sdf -> xvdf
lrwxrwxrwx 1 root root 5 2月 20 12:36 sdf1 -> xvdf1
下記コマンドでマウントまでの作業を行います。
mkdir /mnt/data
mount /dev/sdf1 /mnt/data
6. 復旧インスタンスで修正作業
マウント作業を行うと /mnt/data のディレクトリ内が障害インスタンスのボリュームになっています。
今回修正を行うファイルは /mnt/data/etc/passwd のためvi コマンドで開いて修正をおこないます。
vi /mnt/data/etc/passwd
7. 復旧インスタンスからアンマウント
下記コマンドにて障害インスタンスのボリュームをアンマウントします。
umount /dev/sdf1
8. 復旧インスタンスの停止、ボリュームのデタッチ
復旧インスタンスを停止します。
停止後、EC2 ボリュームのコンソールに移動します。
(2)の工程でメモした「ボリュームID」のボリュームを見つけて選択後、アクションからデタッチします。
9. 障害インスタンスに修正したボリュームをアタッチ
上記ボリュームを障害インスタンスにアタッチします。
デバイスは(2)の工程でメモした「アタッチのパス」を入力してください。
今回 /dev/xvda になります。
10. 再起動
障害インスタンスを再起動して、SSH接続が正常にできることを確認します。