🐭

ec2-userのキーペアを紛失した。AWS re:Post通りにやっても出来なくて困ったけどなんとかできた話

2024/10/26に公開

こんな方向けの記事です。

・EC2のユーザのキーペアを紛失したので交換したい。
・私のようにAWS re:Post通りにやっても出来ない(泣)
 
 
ちなみにre:Postは記事はこちらです。
https://repost.aws/ja/knowledge-center/user-data-replace-key-pair-ec2

やってみてできなかったという方は下に進んでください。

さっそく紹介

ユーザデータの編集で下記コードを入れましょう。

#cloud-config
cloud_final_modules:
- [users-groups,always]
users:
  - name: ec2-user
    groups: [ wheel ]
    sudo: "ALL=(ALL) NOPASSWD:ALL"
    shell: /bin/bash
    ssh-authorized-keys:
    - ssh-rsa XXXXXX~XXXX  # ここに新しい公開鍵を設定

これで新しい秘密鍵でログインすることが出来ます。
「re:Postとちょっとしか違わないやんけ!」と思ったあなた。
その通りです。

ユーザデータの変更だけじゃなくて交換方法を一から丁寧に説明してほしい!
という方はさらに下に読み進めてもらえたらと思います。

前提

LinuxかMacOS環境が用意できる方向けです。
AWS CloudShellでも大丈夫です。
AWS CloudShellの使い方は下記ドキュメントを参照ください。
https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/welcome.html

新しいキーペアの発行

AWSコンソールから新しいキーペアを作成しましょう。

 
鍵は既存の鍵と同じ設定にしましょう。
多くの方は、「RSA」で「.pem」をお使いかと思います。

 

作成出来たら秘密鍵(pemキー)が強制的にダウンロードされますので
代替のキーペアの作成完了です。

秘密鍵を使って公開鍵の生成

秘密鍵を任意のサーバ上に運びましょう。
LinuxかMacOSのコマンド手順になります。
ここではCloudShell上に運びます。
右上の「アクション」から「ファイルのアップロード」でホームディレクトリに運ぶことが出来ます。

 
運べたら秘密鍵のファイルの権限を変えましょう。

chmod 400 ./<アップロードしたpemキー>
例:chmod 400 ./mokomap-test.pem

 
次に秘密鍵から公開鍵を生成しましょう

ssh-keygen -y -f ./<アップロードしたpemキー>
例:ssh-keygen -y -f ./mokomap-test.pem

 
そうすると下記のようなssh-rsaから始まるものが返ってくると思います。

ssh-rsa AAAABXXXXX....

これが公開鍵ですので、テキストファイルなどに控えましょう。

キーペアの差し替え

差し替えたいインスタンスを選択して、「インスタンスの状態」から「インスタンスを停止」させましょう。

 

停止が出来たら「アクション」の「インスタンスの設定」から「ユーザーデータを編集」まで行きましょう。

 

 
「ユーザデータをテキストで変更」にチェックが入っている状態で
冒頭でお伝えしている下記を入力しましょう。

#cloud-config
cloud_final_modules:
- [users-groups,always]
users:
  - name: ec2-user
    groups: [ wheel ]
    sudo: "ALL=(ALL) NOPASSWD:ALL"
    shell: /bin/bash
    ssh-authorized-keys:
    - ssh-rsa XXXXXX~XXXX  # ここに新しい公開鍵を設定

 
こんな感じであればOKなので保存してください。
※「入力は base64 でエンコード済みです」にチェックは入れないでください。

 
「インスタンスの状態」から「インスタンスを開始」を押下してEC2インスタンスを起動しましょう。

対象のインスタンスのステータスチェックが完了したら接続できますので
新しい秘密鍵を使って接続してみましょう。
 

正しく接続が出来ていますね!

あとがき

「sudo: "ALL=(ALL) NOPASSWD:ALL"」これがあるだけで
パスワードなしで、全てのコマンドをスーパーユーザとして実行できようになります。
またユーザデータは基本的にインスタンス作成後の初回起動時に実行されるものですが
こういった形で再度、実行させることができるんですね。
とても勉強になりました。
私のようにどハマりする方が一人でも減れば幸いです。

この記事は下記AWSドキュメントを参考にしています。

https://repost.aws/ja/knowledge-center/user-data-replace-key-pair-ec2

https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/welcome.html

Discussion