一言で
「Windows内に ssh.exeが複数ある時は注意だ!」
はじめに
「sshでサーバーに入るときはパスフレーズ覚えていてくれるのに、ssh経由でgit pushしようとすると毎回パスフレーズきかれて面倒……」というそこのあなた!
ネットで検索して、.ssh/config
や sshの引数で-i secret_key
をつけたけど全然効果がなかったそこのあなた!
もしかして鍵ファイルの形式が問題なのかと ecdsaや ed25519や、はたまた rsaに戻って鍵ファイルを作り直してはサーバー側に設定してもダメで困り果てたそこのあなた!
……全部わたしだ!!
というわけで、もしかしてこれで対処できるかもしれません
原因
単純に、普段つかっている ssh.exeと、gitが呼び出している ssh.exeが別物かもしれません。ですので、フルパスで指定します。
git config --global core.sshCommand "C:\\Windows\\System32\\OpenSSH\\ssh.exe"
もしくは
git config --global core.sshCommand "C:\\Windows\\System32\\OpenSSH\\ssh.exe -i c:\\Users\\oreore\\.ssh\\id_ed25519 "
を試してみてください。
実際にマシン内を探してみるとssh.exeが複数あり、opensshで入れたものではない ssh.exeが使われた結果、(OpenSSHの)ssh-agent daemon(service)を見に行かず、その結果毎回パスフレーズを聞かれるはめになっていました。
.git/config
は普通にsshアクセスになっていれば大丈夫で、こちらは何もしなくても大丈夫でした。
[remote "origin"]
url = ssh://host-or-host_alias/repos/project.git
fetch = +refs/heads/*:refs/remotes/origin/*
おわりに
沼にハマるときって、どうしてこうもコロンブスの卵と言いましょうか、気づけば「なぁんだ」ということばかりなのでしょうねー?