Назад | Перейти на главную страницу

Отпечаток SSH RSA инстанса Amazon EC2

Каждый раз, когда я устанавливаю виртуальную машину в 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 способ самостоятельно проверить «да, это отпечаток пальца»? Если да, то как вы его нашли?

Вы можете проверить отпечаток пальца с помощью консоли AWS для экземпляров с cloud-init.

Следующее - на инстансе под управлением Amazon Linux.

Есть сценарий init.d под названием cloud-init:

cloud-init - это не зависящий от распространения пакет, который обрабатывает раннюю инициализацию экземпляра облака.

Некоторые из вещей, которые он настраивает:

  • установка языкового стандарта по умолчанию
  • установка имени хоста
  • генерировать закрытые ключи ssh
  • добавление ключей ssh ​​в .ssh / authorized_keys пользователя, чтобы они могли войти в систему
  • настройка эфемерных точек монтирования
  • подготовка репозиториев пакетов и выполнение различных действий по настройке при загрузке на основе пользовательских данных

После запуска экземпляра вы можете просматривать вывод системного журнала через консоль AWS без использования SSH. (Это позволяет избежать уловки-22 - вы можете увидеть отпечаток пальца до того, как получите доступ к экземпляру).

Вы можете сделать это

  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 root@example.com
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 root@example.com
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  root@example.com (RSA)
ec2: 1024 bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb  root@example.com (DSA)
ec2: -----END SSH HOST KEY FINGERPRINTS-----
ec2: #############################################################
[  OK  ]

Над каждым "произвольным" изображением указан тип подписи, например 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  root@example.com (RSA)

Альтернативный подход:

Чтобы избежать этой проблемы, вы можете использовать свои собственные ключи - поскольку вы сгенерировали ключ, вы знаете отпечаток пальца. Тогда проблема заключается в том, чтобы получить ваш новый ключ в экземпляре без использования SSH.

Большинство экземпляров используют cloud-init и поддерживают пользовательские данные. Это применимо к любому такому экземпляру. Поскольку вам необходимо остановить экземпляр, чтобы изменить данные пользователя, этот подход требует, чтобы вы либо: запускали экземпляр в первый раз (и настраиваете себя на использование известных ключей), либо b: можете остановить экземпляр, измените данные пользователя и перезапустите экземпляр.

  1. Сгенерируйте ключ Например, используя PuttyGen в Windows:

  2. Создайте сценарий пользовательских данных:

    Если вы запускаете новый экземпляр, вам просто нужно указать ключи, которые вы хотите использовать, если вы перезапускаете экземпляр, который уже запущен, вам нужно, чтобы cloud-init перенастроил SSH для получения новых ключей. По умолчанию модуль конфигурации SSH cloud-init запускается один раз для каждого экземпляра, поэтому вам нужно настроить его на запуск всегда (при каждой загрузке) (это может быть не идеально в некоторых обстоятельствах, но может быть изменено после того, как вы узнаете ключ, если необходимо)

    Пользовательские данные будут иметь следующую форму:

    #cloud-config
    cloud_config_modules: #only needed if restarting an instance, omit if launching a new instance
      ...list all existing modules
      - [ssh, always]  #this is changed to always (default is once per instance)
    
    ssh_keys:
      rsa_private: |
        -----BEGIN RSA PRIVATE KEY-----
        -----END RSA PRIVATE KEY-----
    
        ssh-rsa #public_key
    Например:
    #cloud-config
    cloud_config_modules:
      - locale
      - [ssh, always]
      - set-passwords
      - mounts
      - yum-configure
      - yum-add-repo
      - package-update-upgrade-install
      - timezone
      - puppet
      - disable-ec2-metadata
      - runcmd
    
    ssh_keys: #you can specify rsa, dsa, and ecdsa keys
      rsa_private: |
        -----BEGIN RSA PRIVATE KEY-----
        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==
        -----END RSA PRIVATE KEY-----
    
        ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAopbE8beKaKajF/SFOtntO9xt5XVZW5rlQCW6PVY1jXCq5dbjnEQoBGBIp6jsqLcnwYQW/tU4zXi7T0kX6NlVywiMOtjnyoOkLCX2R5OjMap3hlyjAO/PCKW7pE4vAHd7HyYvGW/gPezGW0WeFshp7J7dTXZdSmDquZI15rEsz07QsKWy/SH/rjYVObAQJN78CuU7C41LRshEeTSBM0jBSnp3jL1Ocw66qe4sV6jbcQN6QzK377e+KzpUDmcxaB7plTWDSpjxVFWbY6PQcsz5d/h60wSKu90Ia9fNMHWs7cbyELhKVPBRs4JtWKndjtISCd5T34UnKmtTpq6g/ocrrw== rsa-key-20140716

  3. Остановите свой экземпляр и измените пользовательские данные:

  4. Запустите экземпляр и подключитесь к нему:

    Обратите внимание, что показанный здесь отпечаток пальца совпадает с отпечатком, отображаемым при создании ключа.

Если вы останавливаете экземпляр и имеете доступ к другому экземпляру, вы также можете смонтировать корневой том и изменить ключи напрямую, без использования пользовательских данных (ключи не будут перезаписаны, так как cloud-init по умолчанию запускает конфигурацию SSH только один раз для каждого экземпляра ). Альтернативный подход, если вы планируете заранее, заключается в настройке cloud-init (или сценария инициализации) для регистрации ключей SSH при каждой загрузке, что увеличивает вероятность того, что вы найдете их в журнале консоли после перезапуска.

Я мог проверить физическую машину и подтвердить, что да, это отпечаток пальца.

Да. На сервере cat /etc/ssh/ssh_host_rsa_key.pub. Вы даже можете скопировать это в свой ~/.ssh/known_hosts файл на вашем клиенте, чтобы никогда не увидеть сообщение об ошибке.

Есть ли в консоли EC2 способ самостоятельно проверить «да, это отпечаток пальца»?

Да, либо вручную, как указано выше, либо вы можете опубликовать ключ в DNS и попросить ssh-клиент проверить его таким образом (примечание: вам нужно полагаться на DNS только в том случае, если у вас правильно настроен DNSSEC для вашего домена).

Вы можете настроить клиент для автоматического поиска DNS с помощью параметра файла конфигурации. VerifyHostKeyDNS или в командной строке с чем-то вроде ssh -o "VerifyHostKeyDNS Yes" user@system.example.com. Видеть man ssh_config для получения дополнительной информации.

В качестве примечания, вы можете настроить открытые ключи в DNS для множества таких служб - на ум приходят HTTPS и GPG, хотя сшивание сертификатов HTTPS по умолчанию не включено ни в одном из основных веб-браузеров.