Каждый раз, когда я устанавливаю виртуальную машину в 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 - вы можете увидеть отпечаток пальца до того, как получите доступ к экземпляру).
Вы можете сделать это
иду к тебе Консоль управления EC2 страница
нажав ссылку "Экземпляры" на боковой панели,
выбор экземпляра, в который вы хотите войти, и
перейдя к Действиям> Настройки экземпляра> Получить системный журнал.
Если вы прокрутите этот вывод, вы увидите что-то вроде следующего:
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: можете остановить экземпляр, измените данные пользователя и перезапустите экземпляр.
Если вы запускаете новый экземпляр, вам просто нужно указать ключи, которые вы хотите использовать, если вы перезапускаете экземпляр, который уже запущен, вам нужно, чтобы 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
Обратите внимание, что показанный здесь отпечаток пальца совпадает с отпечатком, отображаемым при создании ключа.
Если вы останавливаете экземпляр и имеете доступ к другому экземпляру, вы также можете смонтировать корневой том и изменить ключи напрямую, без использования пользовательских данных (ключи не будут перезаписаны, так как 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 по умолчанию не включено ни в одном из основных веб-браузеров.