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网络从临时实例连接到目标实例的密钥.之后,您可以丢弃临时实例.
joe*_*son 19
这两个解决方案在创建EC2系统时对我有用.
解决方案1:使用Amazon 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的回答.
| 归档时间: |
|
| 查看次数: |
11561 次 |
| 最近记录: |