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

joe*_*son 32 ssh amazon-ec2 fingerprint amazon-web-services 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)? 
Run Code Online (Sandbox Code Playgroud)

登录前如何验证指纹?

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

Mar*_*ryl 29

正如@ 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)
Run Code Online (Sandbox Code Playgroud)

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

我准备了使用WinSCP安全连接到EC2实例的指南.


joe*_*son 19

这两个解决方案在创建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   
Run Code Online (Sandbox Code Playgroud)

输出显示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-----
Run Code Online (Sandbox Code Playgroud)

aws工具的工作原理类似

注意:这些解决方案仅在创建期间或您可以获取控制台日志时起作用.对于随时可用的更广泛的解决方案,请参阅Martin的回答.

  • 但这仅适用于实例的第一次运行,此时日志包含密钥生成.当您重新启动实例时,您无法在那里找到指纹.还有其他方法吗? (3认同)