Windows11でOpenSSHを使ったgit

2024/07/27

私はWindows11 Homeをホスト環境として使っている。Linuxを使うときはWSL2だ。

開発はLinuxで行っていたのでgitなりsshなりを適当に使っていた。 コマンドを覚えるのは得意ではないのでvscodeをgitクライアントとしていた。

Windowsで作業する場合はGit for WindowsとGit Extensionsを使ってた。 SSHする場合はTeraTermだ。 どちらもPuTTYで鍵管理していたので特に不便に思わなかったのだが、vscodeはPuTTYをサポートしていないのでgitは使えなかった。

OpenSSH

Windows11の設定からインストールすることもできるのだが、wingetでもできるようなのでそちらを使う。 winget版の方がバージョンが新しいようだ。

Install Win32 OpenSSH

Windowsの場合はwhere sshでパスが通ったコマンドを探す。 winget版はC:\Program Files\OpenSSHにインストールされる。 設定アプリからインストールした場合とはパスが違うので注意が必要だ(次のサービスのパスも気をつけよう)。

>where ssh
C:\Program Files\OpenSSH\ssh.exe

サービスとして起動しておかないといかんようなので、そこは自動で立ち上がるようにした。 ssh-agentの方はサービスに登録されるのかどうかがよくわからない。2環境で同じようなことをしたのだが、1台は登録されて1台はされていなかったのだ。 登録されていなかった場合は自分で登録する。

ssh-add -lで接続されていないようなメッセージが出ていなければ動いているだろう。

パスフレーズ付きの鍵

Windowsの場合、パスフレーズ付きの鍵を使っていると失敗するらしい。 ~/.ssh/configに書いていてもダメ。

>ssh -T git@github.com
git@github.com: Permission denied (publickey).

納得いかんがssh-addで追加しておけばよいらしい。

>ssh -T git@github.com
Hi hirokuma! You've successfully authenticated, but GitHub does not provide shell access.

git

Git for Windowsをインストールすると、こっちはこっちでssh.exeがインストールされる。 bash.exeもインストールされて、そっち側用のsshになる。つまりここまでやってきたOpenSSHとは別物。

それだと困るので、環境変数GIT_SSHwinget版OpenSSHのssh.exeフルパスをダブルクォーテーション無しで設定する。 ダブルクォーテーションがあると失敗するので外しておこう。 vscodeで使いたいならシステム環境変数として登録しておくことになるだろう。

そこまでやってgit pullなどすればようやく動いてくれた。


しかしまあ、他のホスト環境を使っているとなんだこりゃって感じだろう。

混沌を極めるWindowsのssh-agent事情 #SSH - Qiita

PuTTYのagentがOpenSSH(Windows版)と同じプロトコルを使えるようになったと書いてあるから、ssh-agentを使わずにPuTTYのagentを使うという手もあるのかもしれない。