Amazon EC2实例SSH RSA指纹

任何时候我在EC2站起来一个虚拟机,你第一次ssh进入它,我总是得到这个消息:

The authenticity of host 'ec2-xxxxxx.compute-1.amazonaws.com (nnnn)' can't be established. RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. 

和其他人一样,我只是说是的

 Are you sure you want to continue connecting (yes/no)? yes 

我明白指纹是什么,为什么它是好的,所有的。 我想知道的是,几年前,因为它是一个物理机器,我正在build立…我可以检查物理机器并validation是的,这是指纹。

有没有办法在EC2控制台上独立validation“是的,这是指纹”? 如果是这样,你怎么find它?

您可以使用AWS控制台validation具有cloud-init实例的指纹。

以下是运行Amazon Linux的实例。

有一个名为cloud-init的init.d脚本:

cloud-init是处理云实例的早期初始化的分发不可知的包。

它configuration的一些东西是:

  • 设置默认的语言环境
  • 设置主机名
  • 生成ssh私钥
  • 添加ssh密钥到用户的.ssh / authorized_keys,以便他们可以login
  • 设置临时挂载点
  • 准备软件包存储库并根据用户数据执行各种引导式定制操作

启动实例后,您可以通过AWS控制台查看系统日志输出,而无需使用SSH。 (这可以避免你的catch-22 – 你可以在访问实例之前看到指纹)。 如果你滚动输出,你会看到如下内容:

 Running cloud-init ... cloud-init: sshGenerating public/private rsa key pair. Your identification has been saved in /etc/ssh/ssh_host_rsa_key. Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub. The key fingerprint is: aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa [email protected] The key's randomart image is: +--[ RSA 2048]----+ | aa | | aa | | aa aa | | a aaa | | aaaaa a | | aa aa | |aaaa a aa | |aaaaaa a | | aa a | +-----------------+ Generating public/private dsa key pair. Your identification has been saved in /etc/ssh/ssh_host_dsa_key. Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. The key fingerprint is: bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb [email protected] The key's randomart image is: +--[ DSA 1024]----+ | | | | | | | bb | | bb | | bbb | | bb b bb | | b bbb bb b | | bbbb bbb | +-----------------+ ec2: ec2: ############################################################# ec2: -----BEGIN SSH HOST KEY FINGERPRINTS----- ec2: 2048 aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa [email protected] (RSA) ec2: 1024 bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb [email protected] (DSA) ec2: -----END SSH HOST KEY FINGERPRINTS----- ec2: ############################################################# [ OK ] 

系统日志输出

如果您希望validation实例上的密钥是否相同(作为概念certificate,则在您使用SSH之后),则可以运行:

 ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub 2048 aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa [email protected] (RSA) 

替代方法:

为了避免这个问题,你可以使用你自己的密钥 – 由于你生成了密钥,你就知道指纹了。 这个问题就变成了在不使用SSH的情况下将新密钥放到实例上的问题。

大多数实例使用cloud-init并将支持用户数据。 这适用于任何这样的情况。 由于您需要停止实例以修改用户数据,因此此方法要求您首先启动一个实例(并设置自己使用已知密钥),或者b:可以停止实例,修改用户数据,然后重新启动实例。

  1. 生成密钥例如,在Windows上使用PuttyGen:
  2. 创build一个用户数据脚本:

    如果要启动一个新实例,只需指定要使用的密钥,如果要重新启动已在运行的实例,则需要让cloud-init重新configurationSSH以提取新密钥。 默认情况下,每个实例运行一次cloud-init的SSHconfiguration模块,因此您需要将其设置为始终运行(每次启动)(在某些情况下,这可能并不理想,但可以在知道密钥后进行修改,如果需要)

    用户数据将采取以下forms:

      #云configuration
     cloud_config_modules:#如果重新启动实例,则仅需要,如果启动新的实例,则省略
       ...列出所有现有的模块
       -  [ssh,always]#这个改为always(默认是每个实例一次)
    
     ssh_keys:
       rsa_private:|
         -----开始RSA私钥-----
         -----完RSA PRIVATE KEY -----
    
         ssh-rsa #public_key 

    例如:

      #云configuration
     cloud_config_modules:
       - 语言环境
       -  [ssh,永远]
       - 设置密码
       - 坐骑
       -  yum-configure
       -  yum-add-repo
       -  package-update-upgrade-install
       - 时区
       - 傀儡
       - 禁用ec2元数据
       -  runcmd
    
     ssh_keys:#你可以指定rsa,dsa和ecdsa键
       rsa_private:|
         -----开始RSA私钥-----
         MIIEoQIBAAKCAQEAopbE8beKaKajF / SFOtntO9xt5XVZW5rlQCW6PVY1jXCq5dbj
         nEQoBGBIp6jsqLcnwYQW / tU4zXi7T0kX6NlVywiMOtjnyoOkLCX2R5OjMap3hlyj
         AO / PCKW7pE4vAHd7HyYvGW / gPezGW0WeFshp7J7dTXZdSmDquZI15rEsz07QsKWy
         / SH / rjYVObAQJN78CuU7C41LRshEeTSBM0jBSnp3jL1Ocw66qe4sV6jbcQN6QzK3
         77E + KzpUDmcxaB7plTWDSpjxVFWbY6PQcsz5d / h60wSKu90Ia9fNMHWs7cbyELhK
         VPBRs4JtWKndjtISCd5T34UnKmtTpq6g / ocrrwIBJQKCAQB7Ck / ZG / oKAZAtzcyb
         PSI7I1oVbY + 68cI + Yb1e2XSiYxmLVoK7cdkYEYMXGA0KDhA / auD4MqeGvDq4ildI
         bR5UdSvZgYzQmvjHdqyJMXSUSaaPMVjCcEmlrdobeW + TU3 / Ei5lDrpvb1caKQoV5
         BL3 / LB0YBovJlXNb // FwTrogVhYFexcda + DxN5a2oNSCwMosdgCP4gz + hX9zTAl9
         K / VOkLaj2h7URfsuAmwwZ + m24Bpz1r7vEtec0PraoKkBpVxBeNDPwMdosTrpGS49
         V + YRRiM8yShuRPF9mAwo62kcD7K5bToppyb6CLdCi06CTcAmQ5Sb + UwHqC / rdZI0
         wmnNAoGBAPxj6ecjM0AwrPf2TPJOtdEUHvFnc6bB23C32Yr7IWjNhij0BGG / D8Cv
         smCXDwYDH7Ss4CN / mMzG43QhfyyAz0T0BjpFmZEYqYOJAB7cwpdx4zjHzoc7WKiI
         vXPml2hdd37iVRNq6raUgDLpKfVkpY8FKcJjzFuiCXDOU1 + mNxPbAoGBAKTqD / + X
         oDGsf6hkV7vgPLIXc3 / BZco0l9kNkemto9RVIsr3D40bfe4PuJg3fjwFYDTq9s79
         WFR5sG / eSpNJtSGTz6LN5TQoL5xLMCIysajc + JN64w4TYCDGSEk4Xgv0X0cCgJfF
         RCedv9qObGT9 / KCI / 9Y / 5jlZsVphNsAk4Xm9AoGBAKO2bjUP6eRymbWY1 / ceTGvx
         YC3iPS3lh2u1hjCi5T0PsPf4OjGQsEWiZd3JxI5HNykWMIW6jKCBAj19guxvOlY9
         a9LFXLEkwPtfyLoSp7wuMoWyCWx5hZ3AeuNlI / CrVG36mAyYYOUiDfeCfBTLqajg
         wSQlDu9UWSaTq7OqFeNdAoGAFkkkway0yHFBrvjNle3esEhbt1F8dUVgoMp7gHFp
         KogLnuMdxvXglcrF6w5rATEorTSCN6Wx / ZPnaRAzl1z8zS + MB / JPZ + nBPqJgc1L1
         ADIR + EEJ7SU2gPgzSCo2OPeCfzewgzZVUXYurtT55CJSkjwG5Znurc3ZskR9BTVq
         K + kCgYARZXWS0Wyy5piq7WX7w2Hc6bVEPMCU + yJcbJ8E + F8meoQ1kXIRqIB + cAsq
         / 3z3JmU19yOGms557POXgEFseMMFai3i2wTQ4mGPOM3a7yEeeKl1Zg5eHVUdVd + N
         PDzs9D + 9umc6mXrRiRwJPQWo8pIKXb7SqjIA73M7H + 98CBtb5w ==
         -----完RSA PRIVATE KEY -----
    
         SSH-RSA AAAAB3NzaC1yc2EAAAABJQAAAQEAopbE8beKaKajF / SFOtntO9xt5XVZW5rlQCW6PVY1jXCq5dbjnEQoBGBIp6jsqLcnwYQW / tU4zXi7T0kX6NlVywiMOtjnyoOkLCX2R5OjMap3hlyjAO / PCKW7pE4vAHd7HyYvGW / gPezGW0WeFshp7J7dTXZdSmDquZI15rEsz07QsKWy / SH / rjYVObAQJN78CuU7C41LRshEeTSBM0jBSnp3jL1Ocw66qe4sV6jbcQN6QzK377e + KzpUDmcxaB7plTWDSpjxVFWbY6PQcsz5d / h60wSKu90Ia9fNMHWs7cbyELhKVPBRs4JtWKndjtISCd5T34UnKmtTpq6g / ocrrw == RSA的密钥-20140716 
  3. 停止您的实例并修改用户数据:
  4. 启动实例并连接到它:

    请注意,此处显示的指纹与生成密钥时显示的指纹相匹配。

如果您正在停止实例并访问另一个实例,则还可以直接装载根卷并修改密钥,而不使用用户数据(密钥不会被覆盖,因为cloud-init默认情况下每个实例只运行一次SSHconfiguration)。 另一种方法是,如果你打算提前计划的话,就是设置cloud-init(或者一个初始化脚本)来logging每次启动时的SSH密钥,这将增加在重新启动后在控制台日志中find它们的概率。

我可以检查物理机器并validation是的,这是指纹。

是。 在服务器cat /etc/ssh/ssh_host_rsa_key.pub 。 你甚至可以将它复制到客户端的~/.ssh/known_hosts文件中,以避免看到“错误”信息。

有没有办法在EC2控制台上独立validation“是的,这是指纹”?

是的,或者手动如上,或者你可以发布到DNS的密钥,并让ssh客户端validation这种方式(注意:如果您的域名已正确configurationDNSSEC,只需要依靠DNS)。

您可以将客户端configuration为通过configuration文件选项VerifyHostKeyDNS自动执行DNS查找,或在命令行上使用ssh -o "VerifyHostKeyDNS Yes" [email protected] 。 有关更多信息,请参见man ssh_config

值得一提的是,您可以在DNS中为公钥设置各种服务 – HTTPS和GPG,但HTTPS证书装订在任何主要Web浏览器中均未默认启用。