Обчисліть відбиток ключа RSA


903

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

Яку команду мені потрібно ввести, щоб знайти свій поточний відбиток ключа RSA?


21
FWIW, я продовжую повертатися до цієї публікації, оскільки 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
Jeff Diederiks

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-агента.)


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

675

Новіші команди 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, відформатований у шістнадцятковому
періоді

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-агент не працює. Ви можете запустити / запустити його за допомогою: 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 answer.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, тим більше, що ОП згадувала шпаклівку.
Джонс

@ DmitriR117 чому ти намалював чорний відкритий ключ, як це може бути відомо всьому світу?
Мічу93

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'

Якщо ви отримаєте повідомлення: " Агент не має посвідчень. ', то спочатку вам потрібно створити свій ключ RSA ssh-keygen.


Я встановив openssh, потім спробував підключитися до сервера за допомогою putty. Він представляє відбиток ключа ssh-ed25519 256, але я отримую повідомлення "без посвідчень". Чи знаєте ви, де цей ключ можна було знайти та перелічити? Чи є недолік використання цього ключа порівняно з створенням нового ключа RSA?
lordcheeto

Знайшов його під /etc/ssh/ssh_host_ed25519_key.pub. Залишається друга частина питання: чи є недолік використання цього автоматично створеного ключа?
lordcheeto

1

Іноді у вашому ~/.sshкаталозі може бути купа ключів , і ви не знаєте, що відповідає відбитку пальців, показаному GitHub / Gitlab / тощо.

Ось як показати ключові імена файлів і відбитки 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.