Проверка отпечатков пальцев SSH для сервера Amazon AWS EC2 с 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)? 

Как проверить отпечаток пальца перед входом в систему?

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


person joelparkerhenderson    schedule 09.12.2012    source источник
comment
Один из способов — использовать собственные ключи с известным отпечатком (см.: serverfault.com/a/581458/86472). Если вы управляете экземпляром (и планируете сценарий, т. е. настраиваете экземпляр), получить отпечатки пальцев при загрузке легко — что вы хотите с ними делать, зависит от вас (например, публиковать на S3, Route53, Cloudwatch, отправлять их по электронной почте). , так далее.). Одной из самых простых вещей было бы запускать задание cron каждый час, которое обновляет тег в вашем экземпляре (видимый из консоли).   -  person cyberx86    schedule 18.07.2014
comment
связанный вопрос amazon-ec2-instance-ssh-rsa-fingerprint   -  person Ricardo    schedule 21.04.2020


Ответы (2)


Как показывает ответ @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)

Если у вас нет другого экземпляра, отпечатки которого вам известны, создайте новый временный экземпляр только для сбора ключей. Сначала найдите ключи для нового временного экземпляра, используя его первоначальный журнал запуска. Подключитесь к временному экземпляру из общедоступной сети. Затем соберите ключи целевого экземпляра, подключившись к нему из временного экземпляра через частную сеть Amazon. После этого вы можете отказаться от временного экземпляра.


Я подготовил руководство по безопасному подключению к инстансу EC2 с помощью WinSCP.

person Martin Prikryl    schedule 16.07.2014
comment
Только что воспользовавшись этим ответом (Спасибо!), моя первая попытка (с экземпляром t2) ничего не сгенерировала с ssh-keyscan. Оказывается, t2 запускается в VPC, и мне пришлось использовать экземпляр, отличный от t2, для доступа к частной сети Amazon. - person Ryan Manes; 06.08.2015

Вот два решения, которые сработали для меня при создании системы EC2.

Решение 1. Используйте панель управления Amazon EC2

  • Перейдите на страницу https://console.aws.amazon.com.
  • Коснитесь ссылки «EC2».
  • Нажмите «Экземпляры» в левом столбце.
  • Коснитесь нужного имени экземпляра.
  • Нажмите кнопку выбора «Действия» и выберите «Получить системный журнал» (он же «Консольный вывод»)
  • В выводе консоли вы должны увидеть сгенерированные ключи

Решение 2. Используйте командную строку AWS EC2

Вы можете использовать команду aws или команду ec2-get-console-output. Оба доступны для загрузки с Amazon.

Чтобы использовать PEM-файл закрытого ключа EC2, PEM-файл сертификата, регион и экземпляр:

ec2-get-console-output \
  --private-key pk-ABCDEF1234567890.pem \
  --cert cert-ABCDEF1234567890.pem \
  --region us-east-1c \
  i-e706689a   

Вывод показывает отпечатки ключей хоста 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-----

Инструмент aws работает аналогично.

Примечание: эти решения работают только во время создания или когда вы можете получить журналы консоли. Более широкое решение, которое работает в любое время, см. в ответе Мартина.

person joelparkerhenderson    schedule 09.12.2012
comment
Но это работает только для первого запуска инстанса, когда в журнале есть генерация ключей. Когда вы перезапустите инстанс, вы больше не сможете найти там отпечатки пальцев. Любым другим путем? - person Martin Prikryl; 15.07.2014
comment
@Мартин Хороший вопрос! В идеале Amazon может добавить отпечатки пальцев в виде столбца на приборной панели EC2. Я добавлю награду к этому вопросу, чтобы побудить людей помочь. - person joelparkerhenderson; 16.07.2014
comment
Спасибо, это была огромная помощь. AWS — это моя первая настроенная env, поэтому возможность доступа к ключам через тире e2c была гораздо менее запутанной. - person ouonomos; 07.02.2016
comment
Мои ключи показаны под BEGIN SSH HOST KEY FINGERPRINTS, как в этом ответе, однако в base64. И ни один из них не соответствует ключу, показанному при подключении через ssh (даже при преобразовании в шестнадцатеричный). В чем проблема? - person Snackoverflow; 20.03.2018