概要
今まではAndroid端末でのgit操作はtermuxを使っていたのだが、物理キーボードがないときに、もう少し手軽にgit操作をしたいと思う。 このため、GUIのgitクライアントアプリを導入することにした。
評判が良さそうなアプリを探したところ、PocketGitというアプリが良さそうだったので購入。
諸々設定していざ既存のリポジトリcloneしようとすると「Invalid Private Key」というメッセージが出るだけでcloneができない。 gitサービスへの鍵の登録にミスをしたのかと思って、試しに、コマンドライン上で新しく作成した秘密鍵を使用するとcloneできた。 このため、gitクライアント側の設定か何かの問題だと思って色々と試したのだが、設定項目が多いアプリでもないため良く分からない。 原因を特定するのに時間がかかったのでメモとして残しておく。
対応方法
ssh-keygenで生成するとき -m PEM
オプションを付与してコマンドを実行する。
パスフレーズなしで生成する例:
1
% ssh-keygen -f ./id_rsa -t rsa -m PEM -b 4096 -N ''
理由
新し目のssh-keygenでは生成される鍵のヘッダがデフォルトで以下のようになっている。
1
-----BEGIN OPENSSH PRIVATE KEY-----
以前は以下のようになっていた。
1
-----BEGIN RSA PRIVATE KEY-----
ssh-keygenのデフォルト挙動が変更になったようだ。
PocketGitがOPENSSH形式の鍵に未対応ということなのだろう。
おわりに
この問題を検索していたときに、PocketGitだけではなく、他のGitクライアントでも同様の問題が起きていそうな感じだった。 RSA形式の鍵はセキュリティ上の懸念があり今後使用されなくなると思うので、各種gitクライアントも今後順次新しい形式に対応していってくれることを願う。