Amazon EC2 实例 SSH RSA 指纹

Amazon EC2 实例 SSH RSA 指纹

每当我在 EC2 中启动虚拟机并第一次通过 ssh 进入时,我总是收到以下消息:

The authenticity of host 'ec2-xxxxxx.compute-1.amazonaws.com (n.n.n.n)' 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

我了解指纹是什么、它为什么有用等等。我想知道的是,几年前,由于我设置的是一台物理机器... 我可以检查物理机器并确认这是指纹。

EC2 控制台中是否有某种方法可以独立验证“是的,这是指纹”? 如果有,您如何找到它?

答案1

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

以下是运行 Amazon Linux 的实例。

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

cloud-init 是一个与分布无关的包,用于处理云实例的早期初始化。

它配置的一些内容包括:

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

启动实例后,您可以通过 AWS 控制台查看系统日志输出,而无需使用 SSH。(这避免了您的困境 - 您可以在访问实例之前看到指纹)。

您可以通过以下方式进行

  1. 去你的EC2 管理控制台页,

  2. 点击侧边栏上的“实例”链接,

  3. 选择要登录的实例,然后

  4. 导航到操作>实例设置>获取系统日志。

获取系统日志

如果你滚动浏览该输出,你会看到类似以下内容:

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        |
|  a    a         |
|     aa   a   a  |
|  a    aaa       |
|     aaaaa   a   |
| a   a 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]----+
|                 |
|                 |
|                 |
|       b  b      |
|        b     b  |
|    b    b b     |
|  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  ]

系统日志输出

每个“randomart”图像上方是签名的类型,例如 RSA 或 DSA。找到您给出的类型(在您的例子中是 RSA),然后检查其上方的指纹。

如果您希望验证相同的密钥是否与实例上的密钥相同(作为概念证明,在您通过 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 并支持用户数据。这适用于任何此类实例。由于您需要停止实例才能修改用户数据,因此此方法要求您要么是 a:首次启动实例(并设置自己使用已知密钥)或 b:可以停止实例、修改用户数据并重新启动实例。

  1. 生成密钥例如,在 Windows 上使用 PuttyGen:

  2. 创建用户数据脚本:

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

    用户数据将采用以下形式:

    #云配置
    cloud_config_modules:#仅在重新启动实例时需要,如果启动新实例则省略
      ...列出所有现有模块
      - [ssh, always]#此项改为 always(默认每个实例一次)
    
    ssh_密钥:
      rsa_private:|
        -----开始 RSA 私钥-----
        -----结束 RSA 私钥-----
    
        ssh-rsa #公钥
    例如:
    #云配置
    云配置模块:
      - 区域设置
      - [ssh,总是]
      - 设置密码
      - 坐骑
      - yum 配置
      - yum-添加-repo
      - 软件包更新升级安装
      - 时区
      - 傀儡
      -禁用-ec2-元数据
      - 运行命令
    
    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 私钥-----
    
        ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAopbE8beKaKajF/SFOtntO9xt5XVZW5rlQCW6PVY1jXCq5dbjnEQoBGBIp6jsqLcnwYQW/tU4zXi7T0kX6NlVywiMOtjnyoOkLCX2R5OjMap3hlyjAO/PCKW7pE4vAHd7HyYvGW/gPezGW0WeFshp7J7dTXZdSm DquZI15rEsz07QsKWy/SH/rjYVObAQJN78CuU7C41LRshEeTSBM0jBSnp3jL1Ocw66qe4sV6jbcQN6QzK377e+KzpUDmcxaB7plTWDSpjxVFWbY6PQcsz5d/h60wSKu90Ia9fNMHWs7cbyELhKVPBRs4JtWKndjtISCd5T34UnKmtTpq6g/ocrrw== rsa-key-20140716

  3. 停止您的实例并修改用户数据:

  4. 启动实例并连接到它:

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

如果您要停止实例并可以访问另一个实例,您也可以挂载根卷并直接修改密钥而不使用用户数据(密钥不会被覆盖,因为默认情况下 cloud-init 仅对每个实例运行一次 SSH 配置)。如果您提前计划,另一种方法是设置 cloud-init(或 init 脚本)以在每次启动时记录 SSH 密钥,这会增加您在重启后在控制台日志中找到它们的可能性。

答案2

我可以检查物理机器并确认这是指纹。

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

EC2 控制台中是否有某种方法可以独立验证“是的,这是指纹”?

是的,要么像上面那样手动操作,要么将密钥发布到 DNS,并让 ssh 客户端通过这种方式进行验证(注意:如果您的域正确配置了 DNSSEC,您只需要依赖 DNS)。

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

附注一下,您可以在 DNS 中为各种此类服务配置公钥 - 首先想到的是 HTTPS 和 GPG,尽管任何主流 Web 浏览器均未默认启用 HTTPS 证书装订。

相关内容