Рассчитать отпечаток ключа RSA


903

Мне нужно провести аудит ключа SSH для GitHub, но я не уверен, как найти мой отпечаток ключа RSA. Первоначально я следовал руководству по созданию ключа SSH в Linux.

Какую команду мне нужно ввести, чтобы найти мой текущий отпечаток ключа RSA?


21
Кстати, я продолжаю возвращаться к этому посту, потому что на github я вижу отпечатки пальцев на клавишах и хочу убедиться, что использую соответствующий закрытый ключ. может быть , это действительно гарантировать GitHub тегу , поскольку этот пост помогает , что GitHub связанного запросу?
hamx0r

4
@ hamx0r Я вернулся к этому посту, потому что Gitlab также использует эти отпечатки пальцев ...
Рэй Фосс,

1
Я пришел к нему из-за Трэвиса, который тоже этим пользуется. : D
Пер Лундберг

4
Для всех тех, кто использует Linux и которые «продолжают возвращаться на эту страницу», скопируйте это на свой bashrc: function fingerprint() { ssh-keygen -lf $1 -E md5 }затем (после того, как вы получите исходный код bashrc), вы можете получить отпечаток пальцаfingerprint ~/.ssh/key_file
Джефф Дидерикс,

1
Для тех, кто пытается использовать функцию @JeffDiederiks и интересуется, почему она не работает, функциям Bash нужен трейлинг ;в теле, поэтому используйте function fingerprint() { ssh-keygen -lf $1 -E md5; }вместо этого.
tjjfvi

Ответы:


1261

Выполните следующую команду, чтобы получить отпечаток SHA256 вашего SSH-ключа ( -lозначает «список» вместо создания нового ключа, -f«имя файла»):

$ ssh-keygen -lf /path/to/ssh/key

Например, на моей машине я выполнил команду (используя открытый ключ RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

Чтобы получить формат отпечатка пальца GitHub (MD5) с новыми версиями ssh-keygen, запустите:

$ ssh-keygen -E md5 -lf <fileName>

Информация о бонусе:

ssh-keygen -lfтакже работает на known_hostsи authorized_keysфайлы.

Чтобы найти большинство открытых ключей в системах Linux / Unix / OS X, запустите

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(Если вы хотите видеть домашние каталоги других пользователей, вам нужно быть пользователем root или sudo.)

Это ssh-add -lочень похоже, но перечисляет отпечатки пальцев клавиш, добавленных к вашему агенту. (Пользователи OS X обращают внимание на то, что магический SSH без пароля через Keychain - это не то же самое, что использование ssh-agent.)


5
Как мне найти путь?
pal4life

4
Поскольку ваш пример шестнадцатеричного отпечатка пальца состоит из 32 цифр, я считаю, что это будет отпечаток MD5, верно? В отличие от 40-значного отпечатка пальца, который будет обозначать SHA1
culix

8
На не-Ubuntu системах соответствующий файл может быть в / и т.д. / SSH, например /etc/ssh/ssh_host_rsa_key.pub
Зоравар

12
Стоит отметить, что отпечаток должен быть одинаковым для обоих ключей в паре открытых / закрытых ключей; поэтому отпечаток .ssh/id_rsaдолжен быть таким же, как и для .ssh/id_rsa.pub. Таким образом, вы можете использовать любой из них (и, если вы похожи на меня и любите завершение табуляции, это заставляет работу выполнять на 2 нажатия меньше. Эффективность!).
Парфянский выстрел

25
использование , ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubесли вы не хотите , стандартный SHA256 выхода
user8162

677

В новых командах SSH отпечатки пальцев будут перечислены как ключ SHA256 .

Например:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

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

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

Также доступны: -E sha1

Обновить ... ДА ... да ... я знаю ... DSA-ключи для SSH больше не должны использоваться, вместо них следует использовать более старый ключ RSA или более новые эклиптические ключи.

Для тех «администраторов», которые продолжают редактировать команду, которую я использовал выше. Хватит менять его! Вы делаете команду, и полученный результат не совпадает!


6
Здесь стоит упомянуть, что вы можете сказать, sshчтобы показать вам старый отпечаток сервера MD5, используя ssh -o FingerprintHash=md5 example.org, как упоминалось в этом ответе . (Я просто искал это, и этот ответ привел меня к этому, поэтому я полагаю, что у других может быть подобный опыт.)
Джонатан Й.

25
Этот ответ наиболее полезен для тех, кто хочет сравнить свои ключи с тем, что показывает github.com (то есть MD5, отформатированный в шестнадцатеричном формате)
hamx0r

2
Также очень полезно то, что сравнивать с тем, что замазка сообщит.
pjcard

27

Чтобы увидеть свой ключ в Ubuntu, просто введите следующую команду на своем терминале:

ssh-add -l

Вы получите такой вывод: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu (RSA)

Однако, если вы получаете сообщение об ошибке типа; Could not open a connection to your authentication agent.
Тогда это означает, что ssh-agent не запущен. Вы можете запустить / запустить его с помощью: ssh-agent bash(благодаря @Richard в комментариях), а затем перезапуститеssh-add -l


5
Если вы не в Ubuntu, вы можете получить это, к сожалению, «Не удалось открыть соединение с вашим агентом аутентификации».
rogerdpack

1
Это работает, только если у вас работает агент аутентификации.
Rufflewind

Чтобы запустить агент аутентификации, вы можете использовать ssh-agent bashи продолжить жизнь. В жизни как всегда; ssh-agentне гарантируется как последовательная реализация на всех системах.
Ричард Кеннет Нискиор

Еще один совет для Linux; Опция -F (сбросить отпечаток пальца) ssh-keygen-g3 отобразит отпечаток ключа: $ ssh-keygen-g3 -F /path/to/keyfile.pub answers.ssh.com/questions/494/…
AnneTheAgile

18

Пара ключей (закрытый и открытый ключи) будет иметь один и тот же отпечаток пальца; так что в случае, если вы не можете вспомнить, какой закрытый ключ принадлежит какому публичному ключу, найдите соответствие, сравнив их отпечатки пальцев.

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

  1. Загрузите агент SSH, если вы еще этого не сделали. Самый простой способ - вызвать

    $ ssh-agent bash
    

    или

    $ ssh-agent tcsh
    

    (или другую оболочку, которую вы используете).

  2. Загрузите закрытый ключ, который вы хотите проверить:

    $ ssh-add /path/to/your-ssh-private-key
    

    Вам будет предложено ввести кодовую фразу, если ключ защищен паролем.

  3. Теперь, как уже говорили другие, введите

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...это отпечаток, который вы ищете. Если имеется несколько клавиш, будет напечатано несколько строк, а последняя строка содержит отпечаток последней загруженной клавиши.

  4. Если вы хотите остановить агент (т. Е. Если вы вызвали шаг 1 выше), просто введите `exit 'в оболочке, и вы вернетесь в оболочку до загрузки агента ssh.

Я не добавляю новую информацию, но, надеюсь, этот ответ понятен пользователям всех уровней.


Первый абзац неверен ssh-add -lи ssh-keygen -lвозвращает тот же отпечаток для данной пары ключей. Кроме того, он должен быть строчным -l, а не прописным.
Альбертас Агеевас

Я не оспариваю это ssh-add -lи ssh-keygen -lвозвращаю тот же отпечаток для данной пары ключей. Но я не понимаю, что было не так с моими первоначальными утверждениями по первому абзацу. Я добавил предложение, чтобы уточнить.
Wirawan Purwanto

1
Проще указать ssh-keygen на ключ, чем запускать агент, затем загружать ключ и получать отпечаток пальца.
Альбертас Агеевас

1
Если у вас есть только закрытый ключ, запускать его не обязательно ssh-agent. Предполагая PRIVKEY, что для файла с закрытым ключом PUBKEYзадан файл с открытым ключом (изначально не существовавший), выполните: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"для регенерации открытого ключа SSH, затем, ssh-keygen -E md5 -l -v -f "${PUBKEY}"если вы хотите использовать хэш MD5 или просто, ssh-keygen -l -v -f "${PUBKEY}"если вы хотите использовать хэш SHA-256 (SHA-256 сейчас используется по умолчанию).
Дэвид Тонхофер

12

Самый быстрый способ, если ваши ключи находятся в агенте SSH:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

Каждый ключ в агенте будет напечатан как:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)

3
Нужен более быстрый способ сопоставления моих ключей с ключами на моей учетной записи GitHub, и этот ответ помог мне сделать именно это.
evanjs

11

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

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

Где: - primary.pemзакрытый ключ для проверки


9
$ ssh-add -l 

также будет работать на Mac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite).

Он также поддерживает возможность -Eуказать формат отпечатка пальца, поэтому, если требуется MD5 (он часто используется, например, GitHub), просто добавьте -E md5команду.


+1 за самый простой ответ. С man ssh-addопцией -lявляется «списки Отпечатки пальцев всех идентичностей в настоящее время в лице агента»
XavierStuvw

8

В Windows, если вы используете PuTTY / Pageant, отпечаток пальца появляется при загрузке ключа PuTTY (.ppk) в Pageant. Это очень полезно, если вы забыли, какой из них вы используете.

Введите описание изображения здесь


3
Спасибо, иногда мы, пользователи Linux, забываем о Windows, особенно в том случае, когда OP упоминает замазку.
Jmons

@ DmitriR117 Почему ты нарисовал черный открытый ключ, который известен всему миру?
Michu93

8

Это функция оболочки, которую я использую, чтобы получить отпечаток моего ключа SSH для создания капель DigitalOcean :

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

Поместите это в свой ~/.bashrcисточник, и тогда вы можете получить отпечаток пальца так:

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9

2

Если ваш агент SSH работает, это

ssh-add -l

для перечисления отпечатков пальцев RSA всех идентификаторов или -Lдля перечисления открытых ключей.

Если ваш агент не работает, попробуйте:

ssh-agent sh -c 'ssh-add; ssh-add -l'

И для ваших открытых ключей:

ssh-agent sh -c 'ssh-add; ssh-add -L'

Если вы получите сообщение: « У агента нет идентификаторов. ', тогда вы должны ssh-keygenсначала сгенерировать свой ключ RSA .


Я установил openssh, затем попытался подключиться к серверу, используя putty. Он представляет 256-отпечаток ключа ssh-ed25519, но я получаю сообщение «нет идентификаторов». Вы знаете, где этот ключ можно найти и перечислить? Есть ли недостаток в использовании этого ключа по сравнению с генерацией нового ключа RSA?
Lordcheeto

Нашел под /etc/ssh/ssh_host_ed25519_key.pub. Вторая часть вопроса остается: есть ли недостатки использования этого автоматически сгенерированного ключа?
Lordcheeto

1

Иногда в вашем ~/.sshкаталоге может быть несколько ключей , и вы не знаете, какой из них соответствует отпечатку пальца, показанному в GitHub / Gitlab / etc.

Вот как показать имена файлов ключей и отпечатки пальцев MD5 всех ключей в вашем ~/.sshкаталоге:

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(Что означают параметры, обратитесь к этому ответу о findкоманде .

Обратите внимание, что личные / публичные файлы, принадлежащие одному ключу, имеют одинаковый отпечаток, поэтому вы увидите дубликаты.


0

Google Compute Engine показывает отпечаток ключа хоста SSH в последовательном выводе экземпляра Linux. API может получать эти данные из GCE, и нет необходимости входить в экземпляр.

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

Однако, похоже, что это зависит от типа экземпляра. Я использую экземпляры Debian 7 (Wheezy) f1-micro.


-1

Чтобы проверить удаленный сервер SSH перед первым подключением, вы можете посмотреть на сайте www.server-stats.net/ssh/, чтобы увидеть все ключи SHH для сервера, а также информацию о том, когда ключ известен.

Это не похоже на SSL-сертификат, но, безусловно, необходимо сделать перед первым подключением к любому SSH-серверу.


4
Пользователь не ищет сторонний сайт, а командную строку из самой ОС.
Эндрю Барбер

Таким образом, это в основном плагин конвергенции , за исключением SSH вместо SSL, и только с одним (несколько сомнительным) нотариусом. Это звучит правильно?
Парфянский выстрел

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.