Amazon AWSから公開鍵をダウンロードする方法は?


25

キーペア(p1)に関連付けられた実行中のAmazon ec2 Linuxインスタンスがあり、ホームデスクトップにプライベートキーをダウンロードしました。仕事中に、仕事用デスクトップにキーペア(p2)を作成し、AWSコンソールを介して公開キーをAmazonにインポートしました。

自宅でauthorized_keysは、AMIインスタンスのキーペアp2の公開キーを追加します(現在は自宅からのみアクセスできます)。ただし、p2の公開キーを忘れてしまったため、この公開キーを何らかの方法でAmazonからエクスポートすることは可能です。

回答:


6

素敵なパズル、ありがとう!答えは1つです。

  1. キーペアp2を指定して、新しい一時的なEBSブートt1.microインスタンスAを開始します。別のインスタンスBが既に実行されており、アクセスできるアベイラビリティーゾーンを指定します。(必要に応じて一時的なものを開始します)。

  2. インスタンスAが数分間実行状態になった後、インスタンスAを停止します(終了しません)。そのため、authorized_keysファイルに公開鍵を保存する機会があります。

  3. 停止したインスタンスAからルートEBSボリュームを切断します。実行中のインスタンスBに接続してマウントします。

  4. マウントされたファイルシステムから公開キーをコピーします。

  5. EBSボリュームを切り離して削除します。一時インスタンスAを終了します。


1
これが元の質問を実際にどのように解決するかはわかりません... EBS-backedインスタンスを使用している場合にのみ、AWS EC2インスタンスに対処する方法の1つです。
ジェレミーボーズ

一時インスタンスを実行して公開キーを取得する場合を除き、EBSブートインスタンスを使用する必要はありません。あなたがしたいのは、このアプローチが行う公開鍵を取得することです。
エリックハモンド

1
秘密鍵を持っている場合、そのような手段を経ることなく公開鍵を再生成できます。
ジェレミーボーズ

2
ジェレミー:元の質問に基づいて、秘密鍵は彼のオフィスに戻っており、彼はそれを取得できません。そして、オフィスに戻ると、そのオフィスの秘密キーの公開キーがないため、EC2インスタンスにアクセスできません。それが彼がAmazonから公開鍵を取得したい理由であり、それを行う唯一の方法はその公開鍵でインスタンスを起動することです。次に、そのインスタンスから公開キーを取得する必要がありますが、これはトリッキーな部分です。
エリックハモンド

1
うわー!公開鍵を取得するための多くの作業。Amazonが「公開キーのエクスポート」オプションを配置する方が簡単だったでしょう。
Jus12

37

ただし、正しいssh-keygenコマンドは次のとおりです。

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey

これは、前の回答に対するコメントまたは編集案でなければなりません。あなたは正しいです。
Jコットン

これはコメントであるはずです。残念ながら、私はまだコメントする権限を持っていません:-(
rsmoorthy

ハハ、よくそこに行きます。修正にご協力いただきありがとうございます。
-JCotton

この答えは、彼が秘密鍵にアクセスできれば機能しますが、元の質問では、秘密鍵は別の場所にあり、アクセスできません。
エリックハモンド

1
chmod 400 your_private_key.pem「アクセス許可がオープンすぎます」エラーが表示された場合に実行します
crizCraig 14

7

EBSボリュームを使用してssh公開キーを取得する1つの回答を既に提供しましたが、公開キーをコンソール出力に送信するユーザーデータスクリプトを使用して一時的なEC2インスタンスを開始することで取得できる別の方法があります。手順は次のとおりです。

次のコードをoutput-ssh-key.userdataローカルコンピューター上の名前のファイルに保存します。これらのコマンドをローカルで実行しないでください!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

上記のファイルをユーザーデータスクリプトとして、ストックのUbuntu 10.04 LTSインスタンスを実行します。ssh公開鍵を取得する鍵ペアを指定します。

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

ssh公開キーが表示されるまで、インスタンスからコンソール出力をリクエストし続けます。run-instancesコマンドから返されたインスタンスIDを指定します。

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

2〜10分以内に、次のような出力が得られます。

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

一時インスタンスは1時間以内に自動的に終了しますが、実行にかかる2セントを超えて請求されないようにする場合は、自分で終了できます。


awscliの最新のインストールでこれを試しましたが、ユーザーデータスクリプトで機能しました。ただし、コマンドを少し調整する必要がありました。これはeu-west-1リージョンで機能しました:aws ec2 run-instances --key-name mykey --instance-type t1.micro --instance-initiated-shutdown-behavior terminate --user-data file:// output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get-console-output --instance-id i-0ce56c0e02086160d; aws ec2 terminate-instances --instance-id i-0ce56c0e02086160d
ホルム

(編集済み)OKのフォーマットはここでは恐ろしいです。別の回答として投稿します。
ベルンハルト

5

秘密のSSHキーがある場合は、次のssh-keygenコマンドを実行するだけで、公開キーコンポーネントを再生成できます

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

これだけが簡単な部分です... AWSコンソールとAPIは、EC2インスタンスの起動時に2つのキーペアのプッシュをサポートしていません。これは、システム管理者が他の手段で行うために残された演習です。

すでに許可されているIDキーにアクセスできる場合は、次のssh-copy-idコマンドを実行するだけで済みます。

 ssh-copy-id -i /path/to/public-key user@EC2-instance

これにより、指定された公開鍵がサーバーにコピーされ、 ~user/.ssh/authorized_keysファイルに自動的にファイルに対する適切な権限が確保されます。

よりエレガントな方法は、構成管理プロセスに追加のIDキーを含めることです。私の場合、これにはノードのPuppet構成に追加のキーを追加する必要があります。

補足として、個人的な好みですが、職場と自宅の場所に別々のキーを含めるだけでなく、より良いSSHキー管理方法を利用します。前の質問で述べたように、キーは、使用するコンピューターではなく、USBドライブに保持します。


0

別のオプションは、rootに別のsshキーを追加するだけの短いスクリプトをuser_dataに追加することです。

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

次に、rootとしてマシンにログインし、ssh -l root -i <KEYFILE> URLユーザーec2_user、ubuntu、またはそれが呼び出されているユーザーのauthorized_keysからキーを読み取ることができます。

唯一のもの-マシンをパブリックに到達可能にし、外部からポート22へのアクセスが可能であることを確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.