🕞

Windows で生成された SSH 秘密鍵で invalid format 出た

2024/03/18に公開

クライアント側で発行してくれた SSH の秘密鍵を使ってサーバにログインしようとして、微妙にハマりかけたので備忘録としてメモ。

invalid format で怒られる

送られてきたファイルを使って macOS で ssh を使ってログインしようとしてみたら、以下のようなエラーが。

$ ssh -i ./xxxx.key user@example.com
Load key "./xxx.key": invalid format
user@example.com: Permission denied (...).

エラーメッセージで雑にググってみると結構ヒットして、そこそこメジャーなエラーっぽい。上から順に眺めてみるも、サーバの公開鍵も置き換えるような対応策が多くて今回のわたしには合わなそう。なので、それっぽい部分をかいつまんで秘密鍵側だけで出来ることを試してみる。

改行コードを LF に変更

nkf を使って秘密鍵の改行コードを調べてみる。

$ nkf --guess ./xxxx.key
ASCII (CRLF)

改行コードが Windows のままなので、まずはこれを macOS / Linux に合うよう変更する。

$ nkf -d --overwrite ./xxxx.key
$ nkf --guess ./xxxx.key
ASCII (LF)

これで試してみる。が、変わらず invalid format なエラーが出る。これだけではダメっぽい。

ファイルの最終行に改行を入れる

手元にある他のはどれも最終行に改行入ってないけどホントに?って思いながら試してみる。

39c39,40
< -----END OPENSSH PRIVATE KEY-----
\ No newline at end of file
---
> -----END OPENSSH PRIVATE KEY-----
>

ssh で繋いでみる。

$ ssh -i xxxx.key user@example.com
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: ...

すご。ちゃんとログインできた :-)

まとめ

未だに Windows - macOS/Linux 間ではファイルのやりとりにハードルがあるってのを再認識。ハマりそうになったら確認事項のひとつとして頭の片隅に置いておく。

Discussion