Відповіді:
Я знайшов спосіб, який, здається, працює для мене краще:
ssh-keygen -y -f <private key file>
ця команда видасть відкритий ключ для даного приватного ключа, тож просто порівняйте вихідний файл з кожним файлом * .pub.
id_rsa.pub.blahhost
файлів, і я не знав, який з них відповідає одинокому id_rsa
приватному ключу, і я налаштовую без паролів scp, щоб я міг перейти зі старих веб-сайтів. Створення нової пари ключів - це не варіант; У мене налаштовані ключі добре, і я не збираюся це зіпсувати.
Я завжди порівнюю хеш модуля 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
Якщо хеші відповідають, то ці два файли збираються разом.
Для клавіш DSA використовуйте
openssl dsa -pubin -in dsa.pub -modulus -noout
щоб потім надрукувати відкриті ключі
openssl dsa -in dsa.key -modulus -noout
щоб відобразити відкриті ключі, що відповідають приватному ключу, а потім порівняти їх.
Якщо припустити, що у вас є відкриті ключі всередині сертифікатів x.509, і якщо припустити, що вони є ключами RSA, то для кожного відкритого ключа виконайте
openssl x509 -in certfile -modulus -noout
Для кожного приватного ключа виконайте це
openssl rsa -in keyfile -modulus -noout
Потім порівнюйте клавіші за модулем.
Перевірка може бути спрощена з різними:
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
Дивна річ - те, що diff не каже нічого, якщо файли однакові, тому вам повідомлять лише те, що приватні та приватні не збігаються.
diff -s
diff -qs
повертає простий «ідентичний / не тотожні відповіді (2) , ви повинні видалити коментар в ключовому файлі публічного перед запуском диф ..
Видаліть відкриті ключі та створіть нові з приватних ключів. Зберігайте їх в окремих каталогах або використовуйте конвенцію про іменування, щоб мати їх прямо.
Введіть наступну команду, щоб перевірити, чи приватний ключ і відкритий ключ є відповідним набором (ідентичним) чи не відповідним набором (різниться) в каталозі $ 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)
Зашифруйте щось відкритим ключем і подивіться, який приватний ключ розшифровує його.
Ця стаття проекту коду, окрім Джеффа Етвуда, реалізує спрощену обгортку навколо крипто-класів .NET. Якщо припустити, що ці ключі були створені для використання з RSA, використовуйте для шифрування асиметричний клас із вашим відкритим ключем, а також - для приватного ключа.
Якщо нічого не повертається, вони відповідають:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost