Подтвердить что ты не робот

Какую команду я использую, чтобы узнать, что такое отпечаток ключа ECDSA моего сервера?

Я вижу во всем Google информацию о том, как увидеть отпечаток ключа RSA, но не отпечаток ECDSA.

4b9b3361

Ответ 1

Подождите, я нашел его. Выполните команду:

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

Ответ 2

С последним ssh (OpenSSH_6.0p1, OpenSSL 1.0.0j 10 мая 2012 г.) я написал это так:

ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=

Заметки:

  • если ваш sshd работает на пользовательском порту, добавьте ' -p portNumber ' к команде ssh-keyscan)
  • ssh-keyscan пишет на stderr, а не на stdout (!), поэтому перенаправление bash ' 2>&1 ' (может варьироваться в зависимости от вашей оболочки)

Это строка, которую я добавил в свой файл ~/.ssh/known_hosts, чтобы авторизовать ssh-запросы от localhost для моих тестов (в основном для gitolite, который использует ssh).


Даниэль Бёмер подтверждает в комментариях:

  • ssh-keyscan предоставляет полный открытый ключ (ключи) SSH-сервера.
  • вывод ssh-keygen практически идентичен формату файлов открытого ключа.
    Просто удалите 1-й столбец (IP-адрес или имя хоста) и сохраните его или ssh-keygen -l в ssh-keygen -l который представляет fingerprint.

Даниэль добавляет:

Показать отпечатки всех открытых ключей сервера, хранящихся в ~/.ssh/know_hosts:

cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done

Ответ 3

В моей системе мне нужно указать ключ MD5 вместо SHA256 по умолчанию:

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub

Это выводит строку в формате, который соответствует ошибке, которую я видел на клиенте.

Ответ 4

Используемые команды

  • Отобразите ascii-art открытого ключа хоста, хранящегося на сервере (это нужно сделать на стороне сервера, тот, к которому вы подключаетесь через ssh):

    ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    -l: Показать отпечаток указанного файла открытого ключа.

    -v: визуальный (ascii-art)

    -f: файл

  • Отобразите ascii-art открытого ключа хоста удаленного сервера (это делается на стороне клиента, тот, который вы подключаете с помощью ssh):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    

    -o: опция

    visualhostkey: visual (ascii-art)

    FingerprintHash: хэш-алгоритм для использования

Что нужно сделать, чтобы проверить подлинность хоста/сервера

Во-первых, 1. должен быть сделан локально на сервере (тот, к которому вы хотите подключиться через ssh): он даст вам первый ascii-art. Распечатайте это или сделайте снимок.

Во-вторых, 2. должно быть сделано при первом соединении SSH; это покажет второй ascii-art. Если ascii-art - то же самое, тогда вы можете ответить "да"? вопрос (т.е. Are you sure you want to continue connecting (yes/no)).

Еще немного объяснений

Первая команда отобразит ascii-art, соответствующий отпечатку файла, который вы даете в качестве ввода. Файл, который вы даете в качестве входных данных, является открытым ключом хоста сервера. Когда клиент подключается (не только в первый раз), сервер отправит свой открытый ключ хоста. Этот открытый ключ хоста будет ~/.ssh/known_hosts в ~/.ssh/known_hosts. Если в файле есть открытый ключ, то все в порядке: хост (сервер) известен, поэтому мы переходим к следующему шагу для аутентификации пользователя (аутентификация пользователя в этом посте не описывается). Если открытый ключ отсутствует в файле, клиент вычислит отпечаток этого открытого ключа хоста с помощью алгоритма хеширования (другой алгоритм хеширования даст другой отпечаток). Этот вычисленный ранее отпечаток отображается (вместе с ascii-art, если предоставлена соответствующая опция), и вам придется ответить "да" или "нет" в зависимости от того, распознаете вы этот отпечаток или нет (этот отпечаток является изображением/хешем открытого ключа хоста сервер). Если вы скажете "да", то в файл ~/.ssh/known_hosts будет добавлен открытый ключ сервера (а не его отпечаток).

Мы можем заметить, что ~/.ssh/known_hosts находится в вашем домашнем (~) каталоге, потому что вы доверяете этому хосту (серверу), но другой пользователь может не доверять так же, как вы. Кроме того, открытый ключ хоста сервера не зависит от пользователя, поэтому он хранится в /etc/ssh/.

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