EC2のボリュームを別のEC2にアタッチ/デタッチする手順

2021.02.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

テクニカルサポート部の 丸屋 正志(まるちゃん)です。

1. はじめに

例えば・・・ /etc/hosts.allow(deny) の設定を誤って sshd : 192.168.0.5 などにした後に GlobalIP で SSH しようとしても出来なかったことは有りませんか?僕は物凄くあります。

SSH 接続をしようとした時に【kex_exchange_identification: read: Connection reset by peer】などが出てログイン出来なくってしまった時などにも、使用することが出来る対処方法になります。

2. 環境構築

EC2 インスタンスを 2台構築して、SSH接続が出来るようにしておいてください。

  • 【ログイン不可用】 : 現在接続が出来ないインスタンスを指しています。
  • 【調査用】 : 別途、調査用に立てたインスタンスを指しています。

2.1.【ログイン不可用】にて事前準備

ブラックリストの設定で全てがアクセス出来ないようにする。

sudo vim /etc/hosts.deny
=================
#↓を追加
ALL: ALL
=================
sudo systemctl relooad sshd
exit

再度 SSH 接続をすると・・・

ssh -i ~/.ssh/鍵.pem ec2-user@GlobalIP
kex_exchange_identification: read: Connection reset by peer

これで、【ログイン不可用】にログインすることが出来なくなりました。

それでは、今から再度SSH接続が出来るように対応していきます・・・の前にまずはバックアップを取得しましょう。

下記サイトを参考にバックアップをしてください。

本番環境で実施している場合は、必ずバックアップを取得しましょう。(大事なことなので2回!)

2.2.【ログイン不可用】にてボリュームのデタッチ

  1. 【ログイン不可用インスタンス】のバックアップが完了したら、インスタンスの停止(Stop)
  2. [Elastic Block Store] -> [ボリューム]に移動
    • 【ログイン不可用】を選択
    • [アクション]を選択
    • [ボリュームのデタッチ]を選択
    • [デタッチする]を選択
  3. 状態が [in-use] から [available] に切り替わったことを確認

2.3. 【調査用】に【ログイン不可用】のボリュームをアタッチ

  1. [Elastic Block Store] -> [ボリューム]に移動
    • 【ログイン不可用】を選択
    • [アクション]を選択
    • [ボリュームのアタッチ]を選択
      • インスタンス : 【調査用】を選択
      • デバイス : 任意(基本的には操作不要)
    • [アタッチ]を選択

2.4. 【調査用】に【ログイン不可用】のボリュームをマウント

先ほど設定したデバイスへのリンクを確認します。

 ll /dev/ | grep sdf
lrwxrwxrwx 1 root root 4 2月 22 13:12 sdf -> xvdf
lrwxrwxrwx 1 root root 5 2月 22 13:12 sdf1 -> xvdf1

ディスクのパーティションを確認します。

lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 8G 0 disk
└─xvdf1 202:81 0 8G 0 part

[xvdf1] が ディスク[xvdf] のパーティションであることがわかりましたので、マウントポイントを作成し、ボリュームをマウントします。

sudo mkdir /mnt/ebs
sudo mount -t xfs -o nouuid /dev/xvdf1 /mnt/ebs

マウントされていることを確認します。

lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   8G  0 disk
└─xvdf1 202:81   0   8G  0 part /mnt/ebs

2.5. 【ログイン不可用】のhosts.deny を編集

ブラックリストの設定で削除もしくは、コメントアウトしていきます。

sudo vim /mnt/ebs/etc/hosts.deny
=================
#↓を削除/コメントアウト
#ALL: ALL
=================

2.6. 【ログイン不可用】のボリュームをアンマウント

ボリュームをアンマウントしていきます。

sudo umount -d /mnt/ebs/

マウントが解除されていることを確認します。

lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 8G 0 disk
└─xvdf1 202:81 0 8G 0 part

2.7.【ログイン不可用】にてボリュームのデタッチ

  1. [Elastic Block Store] -> [ボリューム]に移動
    • 【ログイン不可用】を選択
    • [アクション]を選択
    • [ボリュームのデタッチ]を選択
    • [デタッチする]を選択

2.8.【ログイン不可用】にてボリュームの再度アタッチ

  1. [Elastic Block Store] -> [ボリューム]に移動
    • 【ログイン不可用】を選択
    • [アクション]を選択
    • [ボリュームのアタッチ]を選択
      • インスタンス : 【調査用】を選択
      • デバイス : 【/dev/xvda】を指定
    • [アタッチ]を選択
  2. 【ログイン不可用インスタンス】のアタッチが完了しましたら、インスタンスの開始(Start)
  3. 再度 SSH 接続をしてみると接続することが出来ました。

参照サイト一覧

最後に

やはりトラブルシュートをしている時が一番楽しいですね。