AWS

AWSキーペア(pemファイル)を紛失した時の復旧手順!EC2 Instance ConnectでSSH接続を復元する方法

EC2へSSH接続するために必要なAWSキーペア(.pemファイル)は、一度紛失するとAWSから再ダウンロードできません。

「もうサーバーへ接続できないのでは?」と不安になる方も多いと思います。

しかし、EC2 Instance Connectが利用できる環境であれば、ブラウザからインスタンスへ接続し、新しいキーペアを登録することでSSH接続を復旧できます。

本記事では、実際に.pemファイルを紛失した状態を再現し、EC2 Instance Connectを使ってSSH接続を復旧する手順を画像付きで解説します。

補足:AWSキーペアとは

AWSキーペアとは、EC2へSSH接続するための公開鍵・秘密鍵の組み合わせです。

秘密鍵(.pem)は利用者のみが保持し、公開鍵はEC2へ登録されます。

AWSでは秘密鍵を保持しないため、一度紛失すると再ダウンロードできません。

1.pemファイルを紛失したらどうなる?

AWSから、秘密鍵(pemファイル)は再ダウンロードできません。
EC2インスタンスはそのまま動作し続けますが、SSH接続はできなくなります。

ただし、EC2インスタンスへ接続する方法が完全になくなるわけではありません。Systems Managerを利用する方法や、ルートボリュームを別のインスタンスへ接続して公開鍵を書き換える方法などがあります。

また、AWSコンソールから鍵を再発行することはできませんが、ブラウザ経由でログインして新しい鍵を登録すれば、再び自分のPCからSSH接続できるようになります。 次章で、実際にpemファイルをゴミ箱に捨てて復旧させた具体的な手順を解説します。

2.復旧できる条件

今回紹介する方法は「EC2 Instance Connect」を使ってブラウザからアクセスするため、以下を満たす場合に利用できます。

  • Amazon Linux 2(2.0.20190618以降)または Amazon Linux 2023
  • EC2 Instance Connectに対応している
  • IAMユーザーに接続権限がある
  • セキュリティグループでSSH(22番ポート)が許可されている
  • インスタンスにパブリックIPアドレスがある(コンソールから接続する場合)

利用できない場合は、本記事後半の「復旧できない場合の対処法」をご覧ください。

3.EC2 Instance Connectとは

EC2 Instance Connectとは、AWSコンソールからブラウザ経由でEC2へSSH接続できるサービスです。

通常のSSH接続では秘密鍵で認証しますが、 EC2 Instance ConnectではAWSが一時的な公開鍵をインスタンスへ送信するため、秘密鍵(pemファイル)がなくてもログインできます。

4.【実証】pemファイルを紛失したときの復旧手順

疑似的にpemファイルを紛失した状態にしたいので、pemファイルをゴミ箱に入れて検証してみました。今回、「EC2 Instance Connect」を使ってブラウザからアクセスし、公開鍵を書き換える方法を試しています。

ゴミ箱に秘密鍵を入れた画像

検証環境

・AWS EC2
・Amazon Linux 2023
・Windows 11
・PowerShell(OpenSSH)

鍵ファイルがない状態でターミナルから接続を試みると、鍵が見つからず接続エラーになりました。

No such file or directory と表示された画像

サイトの表示はできるためインスタンスは稼働していますが、やはりSSHで中に入ることはできません。

STEP1:EC2 Instance Connectでブラウザからログインする

EC2 Instance Connectは、「一時的な公開鍵をAWSがインスタンスへ送り、その鍵を使ってSSH接続する仕組み」です。秘密鍵を紛失していても、条件を満たしていれば接続できます。

EC2 Instance ConnectはAWS内部のEC2 Instance Connect用サーバーを経由してSSH接続する方式です。そのため、セキュリティグループでSSHを許可する必要があります。

セキュリティグループの管理画面に移動します。
インスタンスに適応されているセキュリティグループを選択し、「インバウンドのルールを編集」をクリックします。

AWS管理画面でセキュリティグループのインバウンドのルールを変更をする様子

EC2 Instance Connectへ接続するためのインバウンドルールの設定を追加します。

インバウンドルールの設定を追加している様子

①「ルールを追加」をクリックします。

②タイプ:SSH を選択します。

③ソース:カスタム を選択します。

④「com.amazonaws.ap-northeast-1.ec2-instance-connect」を選択します。
※東京リージョンの場合です。

⑤「ルールを保存」をクリックします。

インスタンスの管理画面へ行き、接続したいインスタンスを選んだ状態で「接続」をクリックします。

インスタンスの管理画面で接続をクリックする様子

接続方法:「EC2 Instance Connect」を選択

インスタンスに接続する画面でEC2 Instance Connectを選択する様子

ユーザー名:AMIによってユーザー名が異なります。

OSユーザー名
Amazon Linux 2 / 2023ec2-user
Ubuntuubuntu
RHELec2-user (または root)
Debianadmin (または debian)

選択後、「接続」をクリックすると、ブラウザ上にターミナルが表示されます。

EC2 Instance ConnectでSSH接続をしている様子

無事にログインできれば成功です。

こちらは再度使用するため、ログアウトせずに開いておきます。

STEP2:ローカルPCで新しいキーペアを作成する

AWSコンソールから新しくキーペアを作成しても、既存のインスタンスに後から公開鍵を自動登録することはできません。そのため、普段のLinuxやmacOS、PowerShellから新しいキーペアを取得します。

今回はpowerShellを使用しRSAの鍵を作成しています。

以下のコマンドを入力してください

RSAの場合

ssh-keygen -t rsa -b 4096

ED25519の場合

ssh-keygen -t ed25519
powerShellを使用しRSAの鍵を作成している様子

Enter file in which to save the key(保存場所) :そのままEnterを押します

Enter passphrase:パスフレーズを入力します(なにも入れずにEnterを2回押すことで設定を省略できますが、非推奨です)

Enter same passphrase again:もう一度同じパスフレーズを入力します

最後に
id_rsa (秘密鍵)
id_rsa.pub (公開鍵)
が作成されます。

powershellを使用しRSAの鍵ができた様子

作成された公開鍵を表示します。

Get-Content C:\Users\ユーザー名\.ssh\id_rsa.pub

公開鍵をAWSへ置くためにコピーします。

作成された公開鍵を表示している様子

STEP3:新しい公開鍵をEC2に登録・置換する

先ほどのインスタンスの接続画面に戻ります。

まず、現在の内容を確認します。(省略可)

cat ~/.ssh/authorized_keys

すると既に登録されている公開鍵が表示されます。

現在の公開鍵を確認している様子

設定ファイルを編集します。

nano ~/.ssh/authorized_keys

上記のコードを入力すると、既に登録されている公開鍵が表示されます。

その下に、先ほどコピーした公開鍵を1行そのまま貼り付けます。(途中で改行しないように注意してください)

公開鍵を張り付けている様子

nanoでは

Ctrl + O(アルファベットの O)
「File Name to Write:」と表示されたら Enter
Ctrl + X で終了です。

念のためファイルの権限を保護しておきます。
以下のコマンドを実行してください。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

そのままログアウトでOKです。

exitを入力してSSHをログアウトした様子

STEP4:新しい鍵でSSH接続テスト&古い鍵の削除

PowerShellに戻り、接続確認を行います。

ssh -i C:\Users\ユーザー名\.ssh\id_rsa ec2-user@インスタンスのパブリックIP

接続できれば成功です。

新しい鍵でSSH接続を試みている様子

古い公開鍵を削除

PowerShellからEC2にログインした状態のまま

nano ~/.ssh/authorized_keys

を開き、古い公開鍵の行を削除して保存します。

新しい公開鍵のみ残っていればOKです。

古い公開鍵の行を削除している画像

以上で、新しい公開鍵への切り替えは完了です。以降は、新しく作成した秘密鍵を使用してSSH接続できます。

5.復旧できない場合の対処法

EC2 Instance Connectが利用できない場合

EC2 Instance Connectが利用できない場合でも、復旧方法はいくつかあります。

・Systems Manager Session Managerを利用する
Session Managerが事前に設定されている場合は、AWSコンソールからインスタンスへ接続できます。接続後は、本記事と同じように authorized_keys に新しい公開鍵を登録することでSSH接続を復旧できます。

・ルートボリュームを別のインスタンスへ接続する
EC2へログインできない場合は、

  1. インスタンスを停止
  2. ルートEBSを切り離す
  3. 別のEC2へアタッチ
  4. authorized_keys を編集
  5. 元へ戻す

という方法でも復旧できます。

・AMI(バックアップ)から復元する
AMIやEBSスナップショットがある場合は、新しいインスタンスを作成して復旧することも可能です。
ただし、この方法ではSSH鍵そのものを復元するわけではなく、新しい環境を作成する形になります。

6.まとめ

AWSキーペア(.pemファイル)はEC2へSSH接続するために必要な秘密鍵であり、一度紛失するとAWSから再ダウンロードすることはできません。

しかし、EC2 Instance Connectが利用できる環境であれば、ブラウザからインスタンスへ接続し、新しい公開鍵を登録することでSSH接続を復旧できます。

万が一に備えて、秘密鍵は安全な場所へ保管するとともに、Systems Managerや複数ユーザー用の公開鍵登録など、代替の接続手段もあわせて検討しておくと安心です。

【おすすめの関連記事】

AWS EC2インスタンスの作成方法を詳しく解説した記事です。

【IPアドレス固定化】Elastic IPとは?使う理由から設定まで徹底解説
固定IPが必要な理由から、無駄な料金を発生させないための正しい設定・解除手順まで分かりやすく解説しています。

TOP