У меня есть два файла, 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