it-roy-ru.com

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

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

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

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

$ 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

43
JordanGS

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

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

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

Форматы

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

SSH-2

Если вы сохраните ключ с помощью PuTTY Key Generator с помощью кнопки «Сохранить открытый ключ», он будет сохранен в формате, определенном 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». Чтобы сохранить его как файл, вы должны вручную скопировать его из текстового поля и вставить в новый текстовый файл.

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

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

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

Регенерирование публичных ключей

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

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

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

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

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

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

Бонус: формат открытого ключа в формате PCS PKCS # 1

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

-----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

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

87
samthecodingman

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

Вы загружаете свой открытый ключ на github, но вы аутентифицируетесь, используя свой закрытый ключ . Смотрите, например раздел ФАЙЛЫ в ssh(1).

4
Roland Smith

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

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

3
Hojin Choi

Вместо непосредственного сохранения закрытого ключа перейдите в раздел «Конверсии и экспорт ключа SSh ...». У меня была такая же проблема, и это сработало для меня

1
Jignesh Rawal

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

0
arberg