まえがき

こんにちは
cloudpackサポートの伊藤です。

皆さんは、EC2にSSH接続しようとした際に秘密鍵を紛失してしまい、接続ができなくなった経験はありますしょうか。
AWS Systems Manager DocumentationのAWSSupport-ResetAccessというランブックを使用することで秘密鍵を紛失してしまった際にも追加することが可能になります。

本記事では、AWSSupport-ResetAccessを使って秘密鍵を追加する手順について説明させていただければと思います。

本記事の対象者

EC2にSSH接続するための秘密鍵を紛失してしまった方

事前確認

本記事を書くにあたって以下の公式ドキュメントを参考に作成いたしました。(※対象のEC2 はLinuxとなります)
AWSSupport-ResetAccess

設定手順

1.オートメーションを実行

AWS Systems Managerより[自動化]を選択しページを遷移する。

2.オートメーションドキュメントの検索

遷移したページの選択窓にて、「AWSSupport-ResetAccess」を検索。

3.対象インスタンスの選択

Execute automation runbookにて、simple exectionを選択し、[Input parameters]欄にて対象のEC2インスタンスを選択。

4.自動化ドキュメントの実行

Overall statusが成功になっていることを確認する。

5.パラメータストアの確認

パラメーターストアに作成ができていることを確認する。

6.秘密鍵の取得

暗号化された値を表示より秘密鍵を確認する。
テキスト形式にて保存した後、pem形式へ変換する。

7.SSH接続確認

①パーミッションの付与

以下のコマンドを実行することでパーミッションを変更する。

chmod 400 <取得したpemファイル>

②SSH接続の実施

SSH接続ができるか試してみる。

ta-ito2:~ ta-ito$ ssh -i <新しいpemファイル> ec2-user@xx.xx.xx.xx
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Tue Mar 4 01:30:08 2025 from xxx.xxx.xxx.xxx
[ec2-user@ip-xx-x-xx-xxx ~]$

無事接続できました!!

詰まったところ

秘密鍵の最終行に改行を入れる

上記まで実施した上でSSH接続をしたところ接続に失敗しました。
接続時のエラー分は以下となります。

Load key "xxxxxxxxxxxx": invalid format
ec2-user@xx.xx.xx.xx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

原因は、秘密鍵のファイルの最終行に改行を入れていないこと】が原因でした。
秘密鍵のファイルの最終行に改行入れてSSH接続してみたところ接続に成功しました。

補足

AWSSupport-ResetAccessを使って作成した秘密鍵は、あくまで【追加】であり、【差し替え】ではございません。
試しに、従来の鍵を使用してSSH接続したところ接続に成功しました。

最後に

今回、紹介させていただいたランブックの他にもAWS Support Automation Workflowsではさまざまな問題を解決するランブックがございます。
非常に便利な機能となりますので機会があれば是非使ってみてください。