Я вижу во всем Google информацию о том, как увидеть отпечаток ключа RSA, но не отпечаток ECDSA.
Какую команду я использую, чтобы узнать, что такое отпечаток ключа ECDSA моего сервера?
Ответ 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-соединение.