key_load_public:無効な形式


99

PuTTY Key Generatorを使用して、パスフレーズ付きの4096ビットRSA-2キーを生成しました。

.ppkとopenSSL形式の公開鍵を保存します。パテ形式の公開鍵は機能しません。

いずれにせよ、私のエラーは次のとおりです。

$ ssh -T git@github.com
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を使用してキーをロードし、GitBashを使用してssh接続を試します。また、キーをGitHubにロードしましたが、何が間違っているのかわかりません。

GitHubで新しい行を追加せずに、新しい行を追加しようとしました


なぜそれが機能しないと思いますか?正常に認証されたと表示れます。
Roland Smith

2
@RolandSmithkey_load_public: invalid formatパスフレーズを入力する前にコマンドを実行すると、正しく表示されますか?
JordanGS 2017年

1
実行: 'ssh -vvv -T git@github.com'詳細情報を取得するには、おそらく〜/ .ssh / known_hostsが不良です-sshはgithubの公開鍵を探しています。'file key'を実行して、キーファイルの形式を確認できます。
mosh 2017年

回答:


183

ローランドがその答えで述べたように、それはという警告だssh-agent公開鍵の形式を理解していないし、その後も、公開鍵がローカルに使用されることはありません。

ただし、警告が表示される理由を詳しく説明して回答することもできます。つまり、PuTTY Key Generatorは、プログラムでの操作に応じて2つの異なる公開鍵形式を生成するという事実に要約されます。

注:説明全体を通して、使用/生成する主要なファイルには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

一般に信じられていることとは異なり、この形式はジェネレーターによって保存されません。ただし、生成され、「OpenSSHauthorized_keysファイルに貼り付けるための公開鍵」というタイトルのテキストボックスに表示されます。ファイルとして保存するには、テキストボックスから手動でコピーして、新しいテキストファイルに貼り付ける必要があります。

上記のキーの場合、これは次のようになります。

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キージェネレーターを開きます
  2. メニューバーで、[ファイル]> [秘密鍵の読み込み]をクリックします
  3. id_rsa.ppkファイルを選択してください
  4. メニューバーで、[変換]> [OpenSSHキーのエクスポート]をクリックします
  5. ファイルをid_rsa(拡張子なしで)名前を付けて保存します

これでOpenSSH秘密鍵ができたssh-keygenので、上記のツールを使用して鍵を操作できます。

ボーナス:PKCS#1PEMでエンコードされた公開鍵形式

正直なところ、このキーは必要なかったので、何に使われるのかわかりません。しかし、私は何年にもわたって照合したメモにそれを持っています、そして私は健全な善のためにそれをここに含めます。ファイルは次のようになります。

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

参照:


秘密鍵をOpenSSH鍵に変換するときは、ファイルを拡張子なしのままにしておくことをお勧めします。これは望ましくありません。秘密鍵に拡張機能が使用されていると、git-clientがリモートリポジトリに接続しません。
Programmer1994

@ Programmer1994変換手順は.ppk、を.pubファイルに変換する手順として含まれています。id_rsa別のプログラムで実際に使用されている中間秘密鍵の副作用は見過ごされていました。あいまいさを解消するために、言語を「できれば拡張子なし」から「(拡張子なし)」に変更しました。私はまた、この答えを振り返るたびに出てくるいくつかの不満を言い換える機会を得ました。ご協力ありがとうございます。
samthecodingman

答えてくれてありがとう。回答「公開鍵の再生成」のセクションでコマンドを使用しましたが、問題は解決しました。
desmond 1319年

あなたは公開鍵について話しました。ただし、問題は秘密鍵id_rsaから生成されます。ssh経由でgitサーバーにアクセスしようとしたときに秘密のsshキーを使用すると、同じ警告が表示されます。
ahnbizcad

5
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pubこれはそれを解決しました。THX!
Dwza

16

puttygenツールをインストールして使用できる場合は、簡単な解決策があります。以下は手順です。秘密鍵のパスフレーズが必要です。

ステップ1:最新のputtygenをダウンロードしてputtygenを開く

ステップ2:既存の秘密鍵ファイルをロードします。下の画像を参照してください

既存の秘密鍵をロードする

ステップ3:求められたらキーのパスフレーズを入力し、[OK]をクリックします

paasphraseを入力してください

ステップ4:下の画像に示すように、[変換]メニュータブを選択し、[OpenSSHキーのエクスポート]を選択します

OpenSSHファイルを保存する

新しい秘密鍵ファイルを希望の場所に保存し、それに応じて使用します。


2
Export OpenSSH keyを使用load pubkey invalid formatしてキーをエクスポートすると、警告が表示されました。Export OpenSSHキー(新しいファイル形式を強制する)を使用すると、この機能はなくなりました。
elsamuko

Linuxの場合、apt install putty-toolsまたはyum install puttyその後sudo puttygen private.ppk -O private-openssh-new -o private.pem
Typel

9

TL; DR:id_rsa.pub ASCII / UTF-8になっていることも確認してください。

私も同じ問題を抱えていましたが、テキストエンコーディングが原因で、受け入れられた回答だけでは機能しませんでした。これは、追加の、見逃しやすい問題でした。

走ると

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

Windows PowerShellの中で、それはへの出力を保存id_rsa.pubUTF-16 LE BOMのエンコーディング、ないでUTF-8 。これは、PowerShellの一部のインストールのプロパティであり、PowerShellを使用してBOMなしでUTF-8でファイルを書き込むで説明されています。どうやら、OpenSSHは以前のテキストエンコーディングを認識せず、同じエラーを生成します。

key_load_public: invalid format

の出力をコピーssh-keygen -f ~/.ssh/id_rsa -yしてテキストエディタに貼り付けるのが、これを解決する最も簡単な方法です。

PSこれは受け入れられた答え追加かもしれませんが、私はまだここにコメントするのに十分なカルマを持っていません。


1
ご存知のとおり、Powershellでは配管の動作が異なります。ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pub代わりに使用します。
samthecodingman

7

クリップボードで公開鍵をコピーして貼り付けると、改行を含む公開鍵文字列が壊れることがあります。

公開鍵文字列が1行になっていることを確認してください。


5

ssh公開鍵を読み取れないようです。しかし、それは問題ではありません。

公開鍵をgithubにアップロードしますが、秘密鍵を使用して認証します。たとえば、の「ファイル」セクションを参照してくださいssh(1)


2
つまり、パテキー生成に移動し、[変換]をクリックして-> sshキーを開き、それをid_rsaに保存します-HOME env変数が探している.sshフォルダーを指していることを確認し、id_rsaファイルの他のすべてのコピーをシステムから削除します
Kalpesh Soni 2018

2

秘密鍵を直接保存する代わりに、[変換]および[SSh鍵のエクスポート]に移動します。同じ問題があり、これは私のために働いた


1

同じ警告がありました。それはとても古い鍵でした。現在のOpenSSH7でキーを再生成しましたが、エラーはなくなりました。


1

エラーは誤解を招く可能性があります-pubkey秘密鍵ファイルをポイントしているときに「」と表示されます~/.ssh/id_rsa

私の場合、それは単に公開鍵が欠落しているだけでした(ボールトから復元していないため)。


詳細

以前は~/.ssh/id_rsa.pub、自動スクリプトによるデプロイをスキップしていました。

すべてのssh使用法は機能しましたが、エラーが発生したため、混乱が生じる可能性がありました。

まったくありません-straceトリガーが実際には*.pubファイルであることに気付くのに役立ちました:

strace ssh example.com
...
openat(AT_FDCWD, "/home/uvsmtid/.ssh/id_rsa.pub", O_RDONLY) = -1 ENOENT (No such file or directory)
...
write(2, "load pubkey \"/home/uvsmtid/.ssh/"..., 57) = 57
load pubkey "/home/uvsmtid/.ssh/id_rsa": invalid format

0

したがって、更新後、同じ問題が発生しました。key_file拡張機能なしでPEMを使用していて、単に追加するだけで.pem問題が修正されました。これでファイルはkey_file.pem


0

SSHが組み込まれたWindows10を使用している場合、2020年8月の時点では、ed25519キーのみがサポートされています。key_load_public: invalid formatたとえばRSAキーを使用すると、エラーが発生します。

あたりとしてこのGitHubの問題一つの解決策はただの船への更新を待つことであるので、それは2020年にWindows Updateを介して、いくつかの時間を修正する必要があります。

待つことができない場合、回避策は新しいed25519キーを生成することです。これはとにかく良いアドバイスです

> ssh-keygen -o -a 100 -t ed25519

githubなどで使用できますが、一部の古いシステムではこの新しい形式がサポートされていない場合があります。

キーを生成した後、以下の機能のいずれかを使用している場合は、それらを更新することを忘れないでください!

  1. ~\.ssh\config まだ古いキーを指している可能性があります。
  2. ssh-addコマンドを使用してssh-agentに新しいキーを追加します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.