IntelliJのSetting Repositoryで"invalid privatekey"エラーが表示される → JSchが対応している秘密鍵のフォーマットはPEM

IntelliJ / PyCharmでローカルの設定をGitHubなどと共有しようとしたときに、"invalid privatekey" と表示されて困ったことはないですか?

f:id:hiroga_cc:20200426065737p:plain

OpenSSH7.8以降で出力される秘密鍵のヘッダーは以下のフォーマットになっているようです。私の場合は ed25519 ではなく RSA でしたが、以下のフォーマットで出力されました。

-----BEGIN OPENSSH PRIVATE KEY-----

このフォーマットが JSchに対応していない、ということのようです。

StackOverFlowの助言に従い、 -m PEM オプションを付けて ssh-keygenからやり直したら解決しました。

stackoverflow.com

解説

IntelliJのログ(私の場合、~/Library/Logs/JetBrains/IdeaIC2020.1/idea.log )からスタックトレースを表示しました。

Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [B@282a5626
    at com.jcraft.jsch.KeyPair.load(KeyPair.java:664)
    at com.jcraft.jsch.KeyPair.load(KeyPair.java:561)
    at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)
    at com.jcraft.jsch.JSch.addIdentity(JSch.java:406)
    at com.jcraft.jsch.JSch.addIdentity(JSch.java:366)
    at org.eclipse.jgit.transport.JschConfigSessionFactory.getJSch(JschConfigSessionFactory.java:396)
    at org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:332)
    at org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:205)
    at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:138)
    ... 39 more

JSchが原因だと思っていたわけでなく、 invalid privatekey で検索したら一番上に表示されたというだけです。 よく検索されているのかもしれませんね。

余談ですが、ここにたどり着くまでにIntelliJを再起動したり再インストールしたりで無駄な時間を過ごしてしまいました。 エディタの実行ログはいつでも表示できるようにして、まずはログを見たいですね。