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

Почему один и тот же файл закрытого ключа генерирует две разные строки открытого ключа?

У меня есть пара ключей ssh, созданная для использования в качестве ключа доступа для моего сервера GoCD CI / CD. Он работал, но из-за некоторых изменений конфигурации, которые я сделал (переместил сервер из контейнера на хост Linux), мне нужно было переустановить ключи на хосте Linux, что я и сделал. Я уже сгенерировал пару и вместо того, чтобы менять открытый ключ на Bitbucket, я решил, что будет проще продолжать использовать ту же пару (также у меня есть несколько агентов CI / CD, работающих в контейнерах, которые в настоящее время используют эту пару ключей).

Итак, вот где начинается моя проблема. Я перемещаю свой предварительно сгенерированный закрытый ключ (gocd) из моего промежуточного каталога в go домашний адрес пользователя (/var/go/):

[ip-10-71-10-66 docker]# cp ./gocd ~go/.ssh/id_rsa
[root@ip-10-71-10-66 docker]# diff gocd ~go/.ssh/id_rsa
[root@ip-10-71-10-66 docker]#

Пока все хорошо, id_rsa файл и gocd файл кажется таким же. Однако, когда я сравниваю открытые ключи ...

[root@ip-10-71-10-66 docker]# ssh-keygen -y -e -f ~go/.ssh/id_rsa && ssh-keygen -y -e -f gocd

    ---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, converted by root@ip-10-71-10-66 from OpenSSH"
TEXT REMOVED

GsH8pAPy3iQI54HvSZn9qNtA19pL+8r/DlFb6X4qeTyvte0iEIqAYmuSJglcf6OlTx0FxR
HK9y3iyG01zdcBdr2+O06j
---- END SSH2 PUBLIC KEY ----

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, converted by root@ip-10-71-10-66 from OpenSSH"
TEXT REMOVED

bse2UtKDtTbN1EbUZ7XxLOeVG6j6CDokLagJ9LOxdLW0Zb4aMnm/sg1x5VcAY6rQKFEnSl
F3z68VhKCw0ZOqVBNg8SGz
---- END SSH2 PUBLIC KEY ----

Надеюсь, из этого примера вы поймете, почему я запутался. Что действительно странно, так это то, что открытый ключ из файла id_rsa (первый вывод последней команды) фактически соответствует более раннему закрытому ключу, который я создал.

Что здесь происходит? Происходит ли кеширование в ssh-agent что я не в курсе? Что-то еще происходит?

Ответ на этот вопрос удручающе прост. Видимо, при наличии id_rsa и id_rsa.pub пара, команда ssh-keygen, которая оценивает закрытый ключ и выводит связанный открытый ключ, будет игнорировать содержимое id_rsa файл и предположим, что связанный id_rsa.pub файл совпадает.

Удаление несовпадающих id_rsa.pub файл из ~go/.ssh/ каталог позволяет ssh-keygen правильно выводить связанный открытый ключ.