[解決済み】既存のEC2インスタンスにキーペアを追加する。
質問
私は、以下のものを受け取りました。 AWS 私はシャットダウンすることができない2つのインスタンスが実行されているアカウントへのコンソールアクセス(実稼働中)。しかし、私はこれらのインスタンスにSSHアクセスしたいのですが、新しいキーペアを作成し、それをインスタンスに適用してSSHアクセスできるようにすることは可能でしょうか?既存の pem ファイルは、現在のところ、オプションではありません。
これが不可能な場合、インスタンスにアクセスするための他の方法はありますか?
解決方法は?
実行中のインスタンスにキーペアを適用することはできません。新しいキーペアは、新しいインスタンスを起動するときにのみ使用することができます。
リカバリの場合、EBSブートAMIであれば、停止してボリュームのスナップショットを作成することができます。それを元に新しいボリュームを作成します。そして、それを使って古いインスタンスを起動したり、新しいイメージを作成したり、データを回復したりすることができます。
エフェメラルストレージのデータは失われますが。
この質問と回答は人気があるため、Rodneyがコメントに投稿したリンクに情報を取り込みたかったのです。
クレジット表記は エリック・ハモンド について この情報 .
EC2インスタンスのルートEBSボリューム上のファイルを修正する
EC2インスタンスのルートEBSボリューム上のファイルは、以下のような悲惨な状況に陥っていても、調査・編集することができます。
- sshキーを紛失した、またはパスワードを忘れた場合
- etc/sudoersファイルの編集を間違えて、/etc/sudoersが使えなくなった。 sudo で root 権限を取得し、修正する
- 長時間稼働していたインスタンスが何らかの理由でハングアップしてしまい コンタクトが取れない、正常に起動しない
- インスタンスからファイルをリカバリする必要があるが、インスタンスにアクセスできない。
デスクにある物理的なコンピューターでは、CDやUSBメモリでシステムを起動し、ハードディスクをマウントしてファイルをチェックアウトして修正し、コンピューターを再起動すれば元通りになります。
しかし、遠隔地にあるEC2インスタンスは、このような状況に陥ったとき、遠くてアクセスできないように思われます。幸いなことに、AWSは、インスタンスストアではなくEBSブートインスタンスを実行していれば、このようなシステムをリカバリできるパワーと柔軟性を提供してくれています。
EC2でのアプローチは、物理的なソリューションと多少似ていますが、障害のある「ハードドライブ」(ルートEBSボリューム)を別のインスタンスに移動してマウントし、それを修正してから元に戻します。
状況によっては、新しいEC2インスタンスを起動して不良インスタンスを捨てる方が簡単な場合もありますが、本当にファイルを修正したいのであれば、多くの人がうまくいった方法を紹介します。
セットアップ
元のインスタンス(A)と、表示および編集したいファイルがある壊れたルートEBSボリュームを含むボリュームを特定します。
instance_a=i-XXXXXXXX
volume=$(ec2-describe-instances $instance_a |
egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)
元のEBSボリューム上のファイルを修正するために使用する、2番目のEC2インスタンス(B)を特定します。このインスタンスは、EBSボリュームをアタッチできるように、インスタンスAと同じアベイラビリティゾーンで稼働している必要があります。インスタンスがない場合は、一時的にインスタンスを起動する。
instance_b=i-YYYYYYYY
壊れたインスタンスAを停止し(完全に停止するのを待ちます)、インスタンスからルートEBSボリュームを切り離し(切り離されるのを待ちます)、そのボリュームを未使用デバイス上のインスタンスBにアタッチします。
ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume
インスタンス B に ssh してボリュームをマウントし、そのファイルシステムにアクセスできるようにします。
ssh ...instance b...
sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a
フィックス・イット
この時点で、インスタンス A のルートファイルシステム全体が、インスタンス B の /vol-a の下で表示および編集できるようになります。
- 正しいsshキーを/vol-a/home/ubuntu/.ssh/authorized_keysに配置する。
- vol-a/etc/sudoersを編集して修正します。
- vol-a/var/log/syslogでエラーメッセージを探します。
- 重要なファイルを/vol-a/からコピーする...
注:2つのインスタンスのuidは同一でない場合があります。したがって、非rootユーザーのファイルを作成、編集、コピーする場合は注意してください。例えば、インスタンス A の mysql ユーザーとインスタンス B の postfix ユーザーが同じ UID を持っている可能性があり、一方の名前でファイルを chown した後、ボリュームを A に戻すと問題が発生する可能性があります。
まとめ
vol-aの下のファイルを確認したら、ファイルシステムをアンマウントします(まだinstance-Bにあります)。
sudo umount /vol-a
sudo rmdir /vol-a
さて、ec2-api-tools を使ってシステムに戻り、EBS ボリュームを元のインスタンス A のホームに移動し続け、インスタンスを再度起動します。
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a
うまくいけば、問題は解決し、インスタンスAも正常に表示され、当初目指していたことが達成できるはずです。そうでない場合は、動作するようになるまで、この手順を繰り返す必要があるかもしれません。
注意:インスタンスAを停止した際にElastic IPアドレスを割り当てていた場合、再立ち上げ後に再関連付けが必要です。
覚えておいてください。この処理のためにインスタンスBを一時的に起動した場合は、忘れずに終了させてください。
関連
-
[解決済み] Terraformです。EFSアクセスポイントをEC2にマウントするには?
-
[解決済み] クラウドフォーメーション Fn::JoinとFn:GetAttの併用
-
[解決済み] RDS コンソールで Aurora の読み取りレプリカを作成するオプションが表示されない
-
[解決済み] amazon cloudfront と amazon s3 transfer acceleration の違いは何ですか?
-
[解決済み] AWSのロールを "アサイン "するとはどういうことですか?
-
[解決済み] AWSプライベートリンクとVPCエンドポイント
-
[解決済み] "保護されていない秘密鍵ファイル!" Amazon EC2インスタンス(AWS)へのSSH利用時のエラーについて
-
[解決済み] パスワードなしでec2インスタンスにscp(セキュアコピー)する
-
[解決済み】ec2インスタンスからインスタンスIDを取得する方法は?
-
[解決済み】EC2インスタンスにスワップを追加する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AWS::CloudFormation::Init どのように動作するのでしょうか?
-
[解決済み] Terraformです。EFSアクセスポイントをEC2にマウントするには?
-
[解決済み] DynamoDBテーブルの複数の項目を一度に更新する方法
-
[解決済み] AWS Secrets Managerで指定された秘密が見つからない
-
[解決済み] AWSでロールを引き受ける際のRoleSessionNameのユースケースとパフォーマンスへの影響について
-
[解決済み] Amazon Redshift - CSVからのCOPY - 行に二重引用符が一つある - CSVの引用符の書式が無効である エラー
-
[解決済み] AWSとPuTTy。悪いサービス要求のssh-connection [閉鎖]。
-
[解決済み] kubectlエラー EKSクラスタにアクセスする際、サーバーにログインする必要がある(Unauthorized)。
-
[解決済み】FilezillaとSFTPを使用してAmazon EC2のファイルディレクトリに接続する。
-
[解決済み】AWS sshアクセス「Permission denied (publickey)」問題【クローズド