Як ви перевіряєте державний / приватний DSA-ключ?


167

Чи є простий спосіб переконатися, що даний приватний ключ відповідає даному відкритому ключу? У мене є кілька * .pub та декілька * .key-файлів, і мені потрібно перевірити, з чим іти.

Знову ж таки, це файли pub / key, DSA.

Мені б дуже до вподоби один-лайнер якогось ...

Відповіді:


259

Я знайшов спосіб, який, здається, працює для мене краще:

ssh-keygen -y -f <private key file>

ця команда видасть відкритий ключ для даного приватного ключа, тож просто порівняйте вихідний файл з кожним файлом * .pub.


2
що саме це робить? Чому ssh?
sammiwei

2
ймовірно, тому, що він використовує keypairs для аутентифікації ssh
etarion

2
У моєму випадку на центральному сервері роботи є кілька десятків id_rsa.pub.blahhostфайлів, і я не знав, який з них відповідає одинокому id_rsaприватному ключу, і я налаштовую без паролів scp, щоб я міг перейти зі старих веб-сайтів. Створення нової пари ключів - це не варіант; У мене налаштовані ключі добре, і я не збираюся це зіпсувати.
Кріс К

1
Це рішення, здається, працює для всіх типів SSH-ключів. Мені навіть вдалося відновити неправильний відкритий ключ при такому підході.
Ярі Туркія

53

Я завжди порівнюю хеш модуля MD5 за допомогою цих команд:

Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5

Якщо хеші відповідають, то ці два файли збираються разом.


48

Для клавіш DSA використовуйте

 openssl dsa -pubin -in dsa.pub -modulus -noout

щоб потім надрукувати відкриті ключі

 openssl dsa -in dsa.key -modulus -noout

щоб відобразити відкриті ключі, що відповідають приватному ключу, а потім порівняти їх.


18

Якщо припустити, що у вас є відкриті ключі всередині сертифікатів x.509, і якщо припустити, що вони є ключами RSA, то для кожного відкритого ключа виконайте

    openssl x509 -in certfile -modulus -noout

Для кожного приватного ключа виконайте це

    openssl rsa -in keyfile -modulus -noout

Потім порівнюйте клавіші за модулем.


17

Перевірка може бути спрощена з різними:

diff <(ssh-keygen -y -f <private_key_file>) <public key file>

Дивна річ - те, що diff не каже нічого, якщо файли однакові, тому вам повідомлять лише те, що приватні та приватні не збігаються.


3
Щоб отримати вихід, коли файли відповідають:diff -s
Roland

3
Це відмінна відповідь. (1) diff -qsповертає простий «ідентичний / не тотожні відповіді (2) , ви повинні видалити коментар в ключовому файлі публічного перед запуском диф ..
Еморі

7

Видаліть відкриті ключі та створіть нові з приватних ключів. Зберігайте їх в окремих каталогах або використовуйте конвенцію про іменування, щоб мати їх прямо.


3
Питання полягає в тому, як перевірити, і на пристрої, на якому ми будемо перевіряти, можливо, не буде можливостей створити новий.
АрменБ

5

Введіть наступну команду, щоб перевірити, чи приватний ключ і відкритий ключ є відповідним набором (ідентичним) чи не відповідним набором (різниться) в каталозі $ USER / .ssh. Команда cut перешкоджає порівнянню коментаря в кінці рядка у відкритому ключі, дозволяючи порівнювати лише ключ.

ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)

Вихід буде мати вигляд будь-якого з цих рядків.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Я написав сценарій оболонки, який користувачі використовують для перевірки дозволу на файли своїх ~ / .ssh / файлів та набору відповідних ключів. Це вирішує мої проблеми з інцидентами користувачів під час налаштування ssh. Це може вам допомогти. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

Примітка. Моя попередня відповідь (у березні 2018 року) більше не працює з останніми випусками opensh. Попередня відповідь: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)


Я думаю , ви повинні розробити, ваш пост дійсно близько до stackoverflow.com/a/22595408/3102264
mpromonet


4

Якщо ви перебуваєте в Windows і хочете використовувати графічний інтерфейс, за допомогою puttygen ви можете імпортувати в нього свій приватний ключ:

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

Після імпортування ви можете зберегти його відкритий ключ і порівняти його з вашим.


1

Зашифруйте щось відкритим ключем і подивіться, який приватний ключ розшифровує його.

Ця стаття проекту коду, окрім Джеффа Етвуда, реалізує спрощену обгортку навколо крипто-класів .NET. Якщо припустити, що ці ключі були створені для використання з RSA, використовуйте для шифрування асиметричний клас із вашим відкритим ключем, а також - для приватного ключа.


Я шукаю щось трохи простіше. Скажімо, оболонка одного вкладиша тощо. Я перебуваю на linux і встановлюю нормальні речі, такі як openssl.
Локі

3
Це майже настільки ж корисно, як сказати, додайте відкритий ключ у файл дозволеного_кейса та використовуйте ssh, щоб переглянути, який приватний ключ працює. Метод працює, але це біль.
Бредлі Крейдер

0

Якщо нічого не повертається, вони відповідають:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost

-2

Просто використовуйте puttygen і завантажте в нього свій приватний ключ. Пропонує різні варіанти, наприклад, експортування відкритого ключа, що перебуває під замовленням.


1
це не дозволяє перевірити приватно-публічний ключ
MatFiz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.