使用ECDSA对Amazon AWS EC2服务器进行SSH指纹验证?

时间:2012-12-09 20:02:33

标签: ssh amazon-web-services amazon-ec2 fingerprint ecdsa

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

我看到了典型的警告:

$ 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)? 

登录前如何验证指纹?

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

2 个答案:

答案 0 :(得分:28)

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

enter image description here

如果您未能以这种方式收集密钥,则可以通过从私有亚马逊网络中的另一个可信实例连接到目标实例来获取密钥,从而保护您免受中间人攻击。

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

$ ssh-keyscan 172.33.31.199 > ec2key
$ ssh-keygen -l -f ec2key
2048 02:fc:a5:ff:97:dd:41:63:bb:88:8b:29:4e:75:23:ed 172.33.31.199 (RSA)
256 ea:bc:4d:5f:ae:00:48:75:45:ba:97:43:fe:e1:a3:e9 172.33.31.199 (ECDSA)

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

我准备了Guide for connecting to EC2 instance safely using WinSCP

答案 1 :(得分:17)

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

解决方案1:使用Amazon EC2信息中心

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

解决方案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的回答。