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
版の方がバージョンが新しいようだ。
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_SSH
にwinget
版OpenSSHのssh.exe
フルパスをダブルクォーテーション無しで設定する。
ダブルクォーテーションがあると失敗するので外しておこう。
vscodeで使いたいならシステム環境変数として登録しておくことになるだろう。
そこまでやってgit pull
などすればようやく動いてくれた。
しかしまあ、他のホスト環境を使っているとなんだこりゃって感じだろう。
混沌を極めるWindowsのssh-agent事情 #SSH - Qiita
PuTTYのagentがOpenSSH(Windows版)と同じプロトコルを使えるようになったと書いてあるから、ssh-agent
を使わずにPuTTYのagentを使うという手もあるのかもしれない。