スキップしてコンテンツを表示

最初のインスタンスの起動後に SSH キーペアを紛失した場合に、Amazon EC2 インスタンスに接続する方法を教えてください。

所要時間3分
0

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続したいのですが、SSH キーペアを紛失しました。

簡単な説明

SSH キーペアを紛失した状態で EC2 インスタンスに接続するには、次のいずれかの方法を使用します。

  • ユーザーデータを入力して新しいキーペアを作成します。
  • マネージドノードであるインスタンスでは、AWS Systems Manager を使用してキーペアを復元します。
  • Amazon Linux 2 (AL2) バージョン 2.0.20190618 以降または Amazon Linux 2023 (AL2023) を実行するインスタンスでは、EC2 Instance Connect を使用します。
  • インスタンスがアクセス可能であり、EC2 シリアルコンソールへのアクセス許可がある場合は、シリアルコンソールを使用します。
    注: この方法では、インスタンスを停止して起動する必要はありません。
  • レスキューインスタンスを作成して新しいパブリックキーを作成します。

重要: インスタンスを停止して起動する前に、次の手順を実行してください。

注: インスタンスを停止または起動する際、インスタンスのパブリック IP アドレスは変更されます。外部トラフィックをインスタンスにルーティングするには、パブリック IP アドレスではなく Elastic IP アドレスを使用することをおすすめします。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

ユーザーデータスクリプトを入力する

重要: 機密データをユーザーデータスクリプトに保存しないでください。代わりに、AWS Secrets Manager などの安全な方法を使用してください。

インスタンスが cloud-init にアクセスできないか、cloud-init で問題が発生した場合は、「レスキューインスタンスを使用する」に進んでください。

新しいキーペアを作成する

次の手順を実行します。

  1. 新しいキーペアを作成します。
  2. Amazon EC2 コンソールでプライベートキーを作成する場合は、キーペアのパブリックキーを取得します。
  3. Amazon EC2 コンソールを開きます。
  4. インスタンスを停止します。
  5. [アクション] を選択し、[インスタンス設定] を選択します。
  6. [ユーザーデータを編集] を選択し、次のスクリプトを入力します。
    Content-Type: multipart/mixed; boundary="//"
    MIME-Version: 1.0
    
    --//
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [users-groups, once]
    users:
    - name: username
    ssh-authorized-keys:
    - PublicKeypair
    注: username を デフォルトユーザー名または作成したカスタムユーザー名に置き換えてください。PublicKeypair をパブリックキーに置き換えてください。パブリックキーの全文を入力する際、先頭は ssh-rsa である必要があります。
  7. [保存] を選択します。
  8. インスタンスを起動します。

cloud-init フェーズが完了したことを確認する

インスタンスコンソールの出力で次の要素を参照し、cloud-init フェーズが完了したことを確認します。

  • エラーメッセージは表示されないこと。
  • すべての cloud-init ディレクティブは Executed と表示されること。
  • cloud-init の Finished メッセージ例を次に示します。 「Finished [0;1;39mCloud-init: Final Stage[0m Cloud-init v.A.B.C finished at ..」

インスタンスのユーザーデータからコマンドを削除する

次の手順を実行します。

  1. インスタンスを停止します。
  2. [アクション] を選択し、[インスタンス設定] を選択します。
  3. [ユーザーデータの編集] を選択し、フィールドからすべての内容を消去します。
  4. [保存] を選択します。
  5. インスタンスを起動します。

Systems Manager を使用する

Systems Manager でマネージドノードであるインスタンスを復旧するには、AWSSupport-ResetAccess ランブックを使用してキーペアを復元します。AWSSupport-ResetAccess は、EC2Rescue を使用して新しい SSH キーペアを自動的に生成し、インスタンスに追加します。

Systems Manager は、インスタンスの新しい SSH プライベートキーを暗号化し、AWS Systems Manager の機能である Parameter Store に /ec2rl/openssh/instance_id/key として保存します。

Parameter Store からプライベート SSH キーを取得するには、AWS CLI コマンド get-parameters を実行します。

aws ssm get-parameters --names "/ec2rl/openssh/instance_id/key" --with-decryption --output json --query  "Parameters[0].Value" | sed 's:\\n:\n:g; s:^"::; s:"$::' >  key-pair-name

注: 実際のものでそれぞれ、instance_id をインスタンス ID に、key-pair-name をキーペアの名前に置き換えます。

次に、パラメータの値を内容に含む新しい .pem ファイルを作成します。この .pem ファイルを使用してアクセスできないインスタンスに再接続します。

次のコマンドを実行し、プライベートキーを .pem ファイルに変換します。

ssh-keygen -f key-pair-name -e -m pem > key-pair-name.pem

注: key-pair-name を実際のキーペアの名前に置き換えます。

オートメーションランブックは、パスワード対応のバックアップ Amazon マシンイメージ (AMI) を作成します。Amazon EC2 は新しい AMI を自動的に削除しないため、AMI は AWS アカウントに維持されます。

AMI を見つけるには、次の手順を実行します。

  1. Amazon EC2 コンソールを開きます。
  2. [AMI] を選択します。
  3. 検索フィールドにオートメーションの ID を入力します。

EC2 Instance Connect を使用する

Amazon Linux インスタンスに接続する方法については、「EC2 Instance Connect を使用して Linux インスタンスに接続する」を参照してください。

EC2 シリアルコンソールを使用する

Linux で EC2 シリアルコンソールにアクセスできる場合は、コンソールを使用してサポートされている Nitro ベースのインスタンスタイプをトラブルシューティングしてください。詳細については、「EC2 シリアルコンソールへのアクセスを設定する」を参照してください。

レスキューインスタンスを使用する

次の手順を実行します。

  1. インスタンスを停止します。

  2. ルート EBS ボリュームをインスタンスからデタッチします。

  3. 元のインスタンスと同じアベイラビリティーゾーン (AZ) でレスキューインスタンスを起動します。

  4. 元のインスタンスのルートボリュームを、セカンダリボリュームとしてレスキューインスタンスにアタッチします。

  5. レスキューインスタンスを起動します。

  6. ルートボリュームのデバイス名を取得するには、次のコマンドを実行します。

    sudo lsblk -f

    出力例:

    NAME FSTYPE LABEL UUID MOUNTPOINT
    xvda └─xvda1 xfs 1234abcd-56ef-78gh-90ij-1234klmnopqr /
     xvdf └─xvdf1 xfs abcd1234-ef56-gh78-ij90-qr1234klmnop
  7. アタッチされたボリュームをレスキューインスタンスにマウントするには、次のコマンドを実行します。

    sudo mkdir /mnt/target
    sudo mount /dev/xvdf1 /mnt/target

    注: /dev/xvdf1 を元のインスタンスのルートボリュームデバイス名に置き換えてください。

  8. 新しいパブリックキーを作成するには、次のコマンドを実行します。

    sudo mkdir -p /mnt/target/home/USER/.ssh
    echo "your_new_public_key" | sudo tee -a /mnt/target/home/USER/.ssh/authorized_keys

    注: USER を元のインスタンスのユーザー名に、your_new_public_key を使用するパブリックキーに置き換えてください。パブリックキー名は、ssh-rsa で始まります。

  9. インスタンス内のキーへのアクセスを設定するには、次のコマンドを実行します。

    OS_USER=os-user
    sudo chown -R $OS_USER:$OS_USER /mnt/target/home/$OS_USER/.ssh
    sudo chmod 700 /mnt/target/home/$OS_USER/.ssh
    sudo chmod 600 /mnt/target/home/$OS_USER/.ssh/authorized_keys

    注: os-user をインスタンスの起動に使用した AMI に関連付けられたユーザー名に置き換えてください。

  10. ボリュームをアンマウントするには、次のコマンドを実行します。

sudo umount /mnt/target
  1. ボリュームをレスキューインスタンスからデタッチし、元のインスタンスに再アタッチします。
  2. 元のインスタンスを起動します。
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ