web-dev-qa-db-ja.com

SSHが突然無効なフォーマットを返す

しばらく前に、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

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

25
Gregor Menih

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

13
13dimitar

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

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

今、ssh -i "newkey" [email protected]

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

20
Ras

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

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

それらを修正すると、物事は再び厄介になった。

6
AKX

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

元の作業構成には

IdentityFile = <path to public key file> 

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

5
vpathak

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

これがあなたのやり方です

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

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

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

- Key data here -

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

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

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

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

2
user50849

今日、CIパイプライン用のgit tagging utilsを書いているときに、この問題に遭遇しました。

これが私の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-秘密鍵の最後に改行が必要だと思います。

2
Robert J

公開鍵の代わりに秘密鍵を使用します。

0
Richard

私の問題はエンコーディングによるものでした。 VSCodeを見ると、ファイルのエンコード(PowerShellでOut-Fileを使用して作成したもの)はUTF-16LEでした。 UTF-8に切り替えたところ、キーは有効でした。

0
john

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

0
Elijah Lynn

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

0
Elijah Lynn

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

(特に、これは、OpenSSH_7.6p1、LibreSSL 2.6.2、Mac OS X 10.13.6の組み込みSSHで発生しました。)

したがって、正しいパスフレーズを使用していることと、CAPS LOCKがオフになっていることを再確認してください。

0