タイトルそのままなのだけど、sbt new
というテンプレートからsbtのプロジェクトディレクトリを作るコマンドがinvalid privatekey
を出して実行できなくなっていた。
$ sbt new scala/scala3.g8 ... ssh://git@github.com/scala/scala3.g8.git: invalid privatekey: xxxxxx
(xxxxxx
の箇所には、sshのキーらしきものが表示されている)
sbt new
を実行する機会は意外と少なくて、せいぜい何かのライブラリのサンプルコードを動かす時くらいなので、最近環境をアップグレードするまで気づかなかった。
issueは簡単に見つかった。
No support for open ssh keys? · Issue #5589 · sbt/sbt · GitHub
JSch / Bugs / #129 "JSchException: invalid privatekey" on OpenSSH 7.8 and above
原因は、openSSHが生成するキーの形式がOpenSSH 7.8から変更になっているそう。
sbtは、sbt new
をgiter8経由で実行するが、このgiter8が、jsch
に依存している
giter8/Dependencies.scala at develop · foundweekends/giter8 · GitHub
val jgitJsch = "org.eclipse.jgit" % "org.eclipse.jgit.ssh.jsch" % "5.13.1.202206130422-r" val jsch = "com.jcraft" % "jsch.agentproxy.jsch" % "0.0.9" val jschSshAgent = "com.jcraft" % "jsch.agentproxy.sshagent" % "0.0.9" val jschConnectorFactory = "com.jcraft" % "jsch.agentproxy.connector-factory" % "0.0.9"
jsch
は2018年以来、リリースが止まっているので、上記の変更が取り込めていない模様。
http://www.jcraft.com/jsch/ChangeLog
一応forkも有って、そちらは活発にリリースが続いている模様。
JGit自体も、Apache MINAをサポートしたアドオンをリリースしているので、Giter8がこちらに載せ替えれば良さそうな気がする。
https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit.ssh.apache
というわけで、sshのキー形式をOpenSSH形式からPEM形式に変えてもいいのだけど、めったに実行しないsbt new
のためにそんな変更を入れるのも嫌なので、sbtのプロジェクトは既存のものを参考に手作成しました。
2022/9/23 追記
そのまま放置、というのもアレなので、修正するPRを作って、マージしてもらいました。
依存先を変えることで対処しました。
2022/10/4 追記
上記の修正が取り込まれたgiter8が、sbt側にも取り込まれたので、エラーが出なくなりました。