39

ssh当我创建一个新的 Amazon EC2 服务器时,我像往常一样使用它连接到它。

我看到了典型的警告:

$ ssh myserver  
The authenticity of host 'ec2-12-34-567-890.compute-1.amazonaws.com (12.34.567.890)'     can't be established.
ECDSA key fingerprint is 31:66:15:d2:19:41:2b:09:8a:8f:9f:bd:de:c6:ff:07.
Are you sure you want to continue connecting (yes/no)? 

登录前如何验证指纹?

理想情况下,答案基于原始创建控制台日志之外的其他内容——因为日志可能在系统重新启动后或在生成大量输出的大型系统安装脚本期间被刷新,或者连接到旧系统在创建时未跟踪的密钥。

4

2 回答 2

33

正如@joelparkerhenderson 的回答所涵盖的,您可以在生成主机密钥时(通过cloud-init脚本)从服务器的初始启动日志中收集主机密钥指纹:

在此处输入图像描述


如果您无法通过这种方式收集密钥,您可以通过从私有 Amazon 网络中的另一个受信任实例连接到您的目标实例来获取它们,从而保护您自己免受中间人攻击。

在受信任的实例(您知道指纹的那个)终端上,您可以使用以下命令收集指纹(172.33.31.199是私有 IP):

$ ssh-keyscan 172.33.31.199 > ec2key
$ ssh-keygen -l -f ec2key
256 SHA256:oZHeiMEPLKetRgd3M5Itgwaqr2zJJH93EvSdx5UoHbQ <ip> (ED25519)
2048 SHA256:8zg105EUFFrPFpVzdfTGsgXnxuSpTiQd85k0uNapUio <ip> (RSA)
256 SHA256:L7UXLw0djE5B9W7ZhvrkYVSTZyi1MEQ2dBaRtpkkUGY <ip> (ECDSA)

如果您没有另一个您知道其指纹的实例,请创建新的临时实例,仅用于收集密钥。首先使用它的初始启动日志找到新临时实例的密钥。从公共网络连接到临时实例。然后通过私有 Amazon 网络从临时实例连接到目标实例来收集目标实例的密钥。之后,您可以丢弃临时实例。


我已经准备好使用 WinSCP 安全连接到 EC2 实例的指南

于 2014-07-16T06:47:32.737 回答
25

以下是在创建 EC2 系统期间对我有用的两个解决方案。

解决方案 1:使用 Amazon EC2 控制面板

  • 转到https://console.aws.amazon.com
  • 点击“EC2”链接。
  • 点击左侧栏中的“实例”
  • 点按您想要的实例名称
  • 点击选择按钮“操作”并选择“获取系统日志”(又名“控制台输出”)
  • 在控制台输出中,您应该看到正在生成的密钥

解决方案 2:使用 AWS EC2 命令行

您可以使用aws命令或ec2-get-console-output命令。两者都可以从亚马逊下载。

要使用您的 EC2 私钥 pem 文件、证书 pem 文件、区域和实例:

ec2-get-console-output \
  --private-key pk-ABCDEF1234567890.pem \
  --cert cert-ABCDEF1234567890.pem \
  --region us-east-1c \
  i-e706689a   

输出显示 ssh 主机密钥指纹,如下所示:

ec2: -----BEGIN SSH HOST KEY FINGERPRINTS-----
ec2: 1024 e0:79:1e:ba:2e:3c:71:87:2c:f5:62:2b:0d:1b:6d:7b  root@ip-10-243-118-182 (DSA)
ec2: 256 31:66:15:d2:19:41:2b:09:8a:8f:9f:bd:de:c6:ff:07  root@ip-10-243-118-182 (ECDSA)
ec2: 2048 ce:ec:3b:d3:34:3f:f3:45:76:81:9e:76:7a:d9:f5:e8  root@ip-10-243-118-182 (RSA)
ec2: -----END SSH HOST KEY FINGERPRINTS-----

aws工具的工作原理类似。

注意:这些解决方案仅在创建期间或您可以获得控制台日志时有效。有关任何时候都可以使用的更广泛的解决方案,请参阅 Martin 的回答。

于 2012-12-09T21:31:45.887 回答