如何从 Amazon AWS 下载公钥?

如何从 Amazon AWS 下载公钥?

我有一个正在运行的 amazon ec2 linux 实例,与一个密钥对 (p1) 相关联,并且我已将私钥下载到我的家用桌面。现在在工作中,我在工作桌面上创建了一个密钥对 (p2),并通过 AWS 控制台将公钥导入到 Amazon。

在家里,我想添加密钥对 p2 的公钥,以便将其添加到authorized_keys我的 AMI 实例中(目前我只能从家里访问)。但是,我忘了带 p2 的公钥,因此能否以某种方式从 Amazon 导出此公钥。

答案1

很棒的谜题,谢谢!以下是其中一个答案:

  1. 启动一个新的临时 EBS 启动 t1.micro 实例 A,指定密钥对 p2。指定一个可用区域,其中您已有一个实例 B 在运行,并且您有权访问该实例。(如果需要,启动一个临时实例)。

  2. 在实例 A 处于运行状态几分钟后停止(而不是终止)它,这样它就有机会将公钥保存到其 authorized_keys 文件中。

  3. 从已停止的实例 A 分离根 EBS 卷。将其附加并安装到正在运行的实例 B。

  4. 从已挂载的文件系统中复制公钥。

  5. 分离并删除 EBS 卷。终止临时实例 A。

答案2

但是正确的 ssh-keygen 命令是:

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

答案3

我已经提供了一个使用 EBS 卷获取 ssh 公钥的答案,但这里有另一种方法可以获取它,即使用用户数据脚本启动临时 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)

临时实例将在一小时内自动终止,但如果您想确保运行费用不超过两美分,您可以自行终止它。

答案4

另一个选择是在 user_data 中添加一个简短的脚本,只需向 root 添加另一个 ssh 密钥:

#!/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。

相关内容