key_load_public: неверный формат

Я использовал генератор ключей PuTTY для генерации 4096-битного ключа RSA-2 с парольной фразой.

Я сохраняю открытый ключ.ppk и openSSL. Открытый ключ формата шпатлевки не работает.

В любом случае, моя ошибка выглядит следующим образом:

$ ssh -T [email protected]
key_load_public: invalid format
Enter passphrase for key '/c/Users/Dan/.ssh/id_rsa':
Hi Dan! You've successfully authenticated, but GitHub does not provide shell access.

Какая проблема?

Я использую Pageant для загрузки ключей, и я использую Git Bash, чтобы попробовать ssh-соединение. Я также загрузил ключ в GitHub, не уверен, что я делаю неправильно.

Я попытался добавить новую строку и не добавлять новую строку в GitHub

Ответ 1

Как отметил Роланд в своем ответе, это предупреждение о том, что ssh-agent не понимает формат открытого ключа, и даже тогда открытый ключ не будет использоваться локально.

Однако я также могу уточнить и ответить, почему предупреждение существует. Это просто сводится к тому, что генератор ключей PuTTY генерирует два разных формата открытого ключа в зависимости от того, что вы делаете в программе.

Примечание. Во всех моих объяснениях ключевые файлы, которые я буду использовать/генерировать, будут называться id_rsa с их соответствующими расширениями. Кроме того, для удобства копирования-пасты родительская папка ключей будет считаться ~/.ssh/. Отрегулируйте эти данные в соответствии с вашими потребностями.

Форматы

Ссылка на соответствующую документацию PuTTY

SSH-2

Когда вы сохраняете ключ с помощью генератора ключей PuTTY с помощью кнопки "Сохранить открытый ключ", он будет сохранен в формате, определенном RFC 4716.

Пример:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "github-example-key"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYF
i2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcp
pY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3
oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEA
ip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9
tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw==
---- END SSH2 PUBLIC KEY ----

OpenSSH

Вопреки распространенному мнению, этот формат не сохраняется генератором. Однако он сгенерирован и показан в текстовом поле "Открытый ключ для вставки в файл OpenSSH authorized_keys". Чтобы сохранить его как файл, вы должны вручную скопировать его из текстового поля и вставить его в новый текстовый файл.

Для ключа, показанного выше, это будет:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw== github-example-key

Формат ключа - это просто ssh-rsa <signature> <comment> и может быть создан путем изменения форматированного файла SSH-2.

Регенерация открытых ключей

Если вы используете ssh-agent, у вас, скорее всего, также будет доступ к ssh-keygen.

Если у вас есть id_rsa ключ OpenSSH (файл id_rsa), вы можете сгенерировать id_rsa файл id_rsa ключа OpenSSH, используя:

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

Если у вас есть только id_rsa.ppk ключ id_rsa.ppk (файл id_rsa.ppk), вам необходимо его сначала преобразовать.

  1. Откройте генератор ключей PuTTY
  2. В строке меню нажмите "Файл"> "Загрузить закрытый ключ",
  3. Выберите файл id_rsa.ppk
  4. В строке меню нажмите "Конверсии"> "Экспорт ключа OpenSSH",
  5. Сохраните файл как id_rsa (без расширения)

Теперь, когда у вас есть закрытый ключ OpenSSH, вы можете использовать инструмент ssh-keygen, как указано выше, для выполнения манипуляций с ключом.

Бонус: PKCS # 1 PEM-кодированный формат открытого ключа

Честно говоря, я не знаю, для чего этот ключ используется, поскольку он мне не нужен. Но у меня есть это в моих заметках, которые я собирал за эти годы, и я включу его здесь для полноценной доброты. Файл будет выглядеть так:

-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5Ew
gnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8D
Gm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48
ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8
hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D
6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElwIBJQ==
-----END RSA PUBLIC KEY-----

Этот файл может быть сгенерирован с использованием открытого ключа OpenSSH (как описано в разделе "Регенерация открытых ключей" выше), используя:

ssh-keygen -f ~/.ssh/id_rsa -y -e -m pem > ~/.ssh/id_rsa.pem

Кроме того, вы можете использовать открытый ключ OpenSSH, используя:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/id_rsa.pem

Рекомендации:

Ответ 2

Кажется, что ssh не может прочитать ваш открытый ключ. Но это не имеет значения.

Вы загружаете свой открытый ключ в github, но аутентифицируете свой личный ключ. См., Например, раздел FILES в ssh(1).

Ответ 3

В случае, если вы скопируете открытый ключ в буфер обмена и вставьте его, может случиться, что строка открытого ключа может быть разбита, что содержит новую строку.

Убедитесь, что строка открытого ключа сформирована как одна строка.

Ответ 4

Вместо прямого сохранения закрытого ключа перейдите в раздел "Конверсии" и "Экспорт SSh-ключа". Имел ту же проблему, и это сработало для меня

Ответ 5

У меня было такое же предупреждение. Это был очень старый ключ. Я восстановил ключ на текущем OpenSSH 7, и ошибка исчезла.