SSHが突然無効な形式を返す


23

少し前に、AWSにサーバーをセットアップし、生成されたSSHキーを使用しました。キーをLastpassに保存し、以前にそこから正常に取得し、機能するようにしました。しかし、今日もう一度試してみたところ、動作しません。

-rw------- 1 itsgreg users 1674 Jun 6 12:51 key_name

私が試したssh -i key_namessh-keygen -f key_nameが、何も作品は、私はいつも、このエラーメッセージが表示されます。

Load key "key_name": invalid format

これを修正する方法はありますか?

回答:


13

の内容を確認しkey_name、エージェントが言った場合、invalid formatキーに何か問題があります-正しいキーだと確信していますか?必要な秘密キーでなくてinvalid formatも、キーが機能していればsshエージェントは戻りません。単に接続することはできません。何らかの理由で、そこに公開鍵を配置した可能性があります。確認してください!


5
間違いなくチェック。で始まり、----BEGIN RSA PRIVATE KEY-----で終わる-----END RSA PRIVATE KEY-----。さらに、以前は機能していました。
グレゴールメニ

1
可能性は非常に低いですが、それでも可能ですが、ファイルが破損している可能性があります。新しいものを作成し、lastpassからコンテンツを再度作成します。
13ディミター

2
うわー、それは実際に助けた!新しいキーを生成した後、新しいキーは1行あたり64文字であるのに対して、古いキーは76文字であることに気づきました。また、最初の行からダッシュが1つ欠落していました。
グレゴールメニ

2
「また、最初の行からダッシュが1つ欠落していました。」同上。@ItsGregに感謝します。ターミナル間で選択してコピーするときに、最初の文字が見落とされることがよくあります!
スターフライ

15

この問題を解決するためにしたことは、を使用してPPKファイルを変換することですPuttyGen

最初にを読み込みurkey.PPK、次に変換メニューで、Opensshファイル形式にエクスポートをクリックします。newkeyファイルが作成されます。

今、 ssh -i "newkey" user@127.0.0.1

できた それが役に立てば幸い。


4

.ssh / configファイルで指定することにより、opensshに特定のIDファイルを使用するように依頼していました。

元の作業構成には

IdentityFile = <path to public key file> 

これは変更なしで機能しなくなりました。少し考えて、上記の「公開鍵ファイルへのパス」を「秘密鍵ファイルへのパス」に置き換えました。うまくいきました。その理由は、RSAアルゴリズムに従って、公開鍵ファイルと秘密鍵ファイルの両方に大きなプードプライム関連の番号があるためです。秘密鍵ファイルを公開鍵ファイルで置き換えた場合、これらの暗号番号は、鍵ファイル内に保存されたbase64ブロックから正しく抽出されません。sshのいくつかのバージョンは.pub拡張子を把握し、それを使用して正しい秘密キーファイルを識別することができるようです-他のバージョンはそれをしません。これは、このエラーが発生する別の方法です。それが誰かを助けることを願っています。


私の場合、セットアップconfigファイルがpath_to_public_keyあり、すべてが機能していました。しかし、Macがハードリスタートを行い、数日後にaを実行しようとしたgit pushときに、上記のエラーが発生し始めました。しかし、私が今それをpath_to_private_key物事が機能するように変更したとき...うーん。わからないなぜ...
lukik

3

私は同じ問題を抱えていましたが、何らかの理由でファイルにWindowsスタイル(CRLF)の行区切り文字が含まれていたことがわかりました。

さらに、ファイルは単一のLFで終わる必要があります。

それらを修正すると、物事が再びうまくいきました。


最終的なLFが非常に必要であることは衝撃的ですが、実際には部分的に問題であり、他の部分はWindowsでファイルを作成し、そうするとCRLF改行が発生することです。他の人のdos2unixために、CRLF(Windowsスタイル)からLF(Linuxスタイル)の改行に変換するコマンドがあります。
ハシム

1

.ppkキーをOpenSSHキーに変換する必要があります

以下がその方法です

  1. PuttyGenをダウンロードして、キーペアを生成します(キーペアの準備ができていない場合)。秘密鍵をフォルダー(.ppk)に保存します
  2. すでに秘密鍵を持っている場合は、「ロード」ボタンを押して秘密鍵ファイル(.ppk)をロードします。それ以外の場合は、この手順をスキップします
  3. [変換]メニューで、[OpenSSHキーをエクスポート]を選択して、フォルダーに保存します
  4. これで、パスワードを入力せずにキーを使用してサーバーにログインする準備ができました(公開鍵はすでに/root/.ssh/authorized_keys、chmod 600 /root/.ssh/authorized_keys、およびRestarted SSH demonの下に置いていると仮定します)

1

CIパイプライン用のgitタグ付けユーティリティを書いていたときに、私は今日これに遭遇しました。

2つのキーの違いは次のとおりです。

$ diff ~/.ssh/gitlab ~/.ssh/git_ssh_key
27c27
< -----END OPENSSH PRIVATE KEY-----
---
> -----END OPENSSH PRIVATE KEY-----
\ No newline at end of file

コードを次のように変更しました。

     with open(ssh_key_file, 'w') as skf:
-        skf.write(ssh_key)
+        skf.write(ssh_key + '\n')

そして今、私のsshキーが機能します。

TL; DR-秘密鍵の最後に改行が必要だと思います。


1

私の場合、開始/終了の「ヘッダー」と主要データの間に改行があることがわかりました。

-----BEGIN RSA PRIVATE KEY-----

- Key data here -

-----END RSA PRIVATE KEY-----

余分な新しい行を削除して、

-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----

私の問題を解決しました。



0

〜/ .sshに実際には無効な形式であるキーがあり、コマンドでIDファイルを指定したにもかかわらず、SSHがすべてを試行したことを意味するため、この問題が発生しました。私が思うに5つのキーしか試すことができないので、たまたま失敗しました。そして、間違ったIDファイルのためだけに正当なエラーを残しました。解決策は、単にIdentitiesOnly yes〜/ .ssh / configで使用することでした。


0

キーファイルの先頭に空白行があったため、このエラーが発生しました。あなたがcatそれを外出しているなら見逃しやすいです。


0

これは、秘密鍵にパスフレーズがある場合にssh(少なくとも一部のバージョン)が出力するエラーであり、接続しようとしたときにパスフレーズを間違って入力します。

(特に、OpenSSH_7.6p1、LibreSSL 2.6.2、これはMac OS X 10.13.6用の組み込みSSHです)

そのため、正しいパスフレーズを使用していること、およびCaps Lockがオフになっていることを再確認してください。


-2

PRIVATEキーの名前を変更し、問題のファイル拡張子を削除してください。

私がとったステップ

公開鍵を作成します。

秘密鍵があるのと同じディレクトリにいることを確認してください

公開鍵を作成する方法:

ssh-keygen -y -f Private-Key.pem > Public-key.pub

PUBLICキーに.pubファイル拡張子があることを確認してください

その後、セキュリティ上の理由から適切なアクセス許可を提供します。

chmod 600 Private-Key.pem
chmod 400 Public-key.pub

次に、最も重要な部分と「無効な形式」というエラーが表示された理由

PRIVATEキーの名前を変更し、ファイル拡張子を削除してください。

プライベートキーから.pemを削除します。

mv Private-Key.pem Private-Key

または、Windowsコンピューターで秘密キーの名前を変更する場合、同じ名前を削除するだけです .pem

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.