Назад | Перейти на главную страницу

Как проверить, совпадает ли пара открытого и закрытого ключей RSA

У меня есть два файла, id_rsa и id_rsa.pub. Какую команду можно использовать для проверки, являются ли они действительный пара?

Я бы предпочел ssh-keygen -y -e -f <private key> путь вместо принятого ответа Как вы тестируете публичную / приватную пару ключей DSA? о переполнении стека.

ssh-keygen -y -e -f <private key> берет закрытый ключ и печатает соответствующий открытый ключ, который можно напрямую сравнить с вашими доступными открытыми ключами. (Подсказка: остерегайтесь комментариев или ключевых параметров.)

(Как, черт возьми, это происходит? Я могу только надеяться, что открытый ключ прямо или косвенно закодирован в закрытом ключе ...)

Мне самому это было нужно, и я использовал следующий однострочник Bash. Он не должен ничего выводить, если ключи принадлежат друг другу. Нанеси немного -q к diff в скриптах, а diff только устанавливает соответствующий код возврата.

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )

В зависимости от того, где вы получаете тестируемый файл открытого ключа, принятый ответ может дать ложноположительные результаты. Это из-за поведения, описанного в комментарии @drewbenn. В частности, когда параметр -e используется с файлом закрытого ключа в качестве параметра параметра -f, он просто повторяет (но переформатирует) то, что находится в связанном файле открытого ключа.

Другими словами,

ssh-keygen -y -f id_rsa

(по-видимому) генерирует значение открытого ключа и

ssh-keygen -y -e -f id_rsa

просто и выводит (и переформатирует) ключ в существующий id_rsa.pub что бы это ни было.

В моем случае я должен убедиться, что пара не была повреждена. Итак, я решил сравнить следующее:

ssh-keygen -y -f id_rsa | cut -d' ' -f 2

с участием

cut -d' ' -f 2 id_rsa.pub

Следовательно:

diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)

Возможно, это не так гибко, но мне больше подходит. Может это кому-то поможет.

Если они в вашей локальной системе, придерживайтесь id_rsa.pub в твоем $HOME/.ssh/authorized_keys и ssh к localhost используя id_rsa ключ. Если работает, то они совпадают.

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