PowershellのgitではpushできるのにVSCodeのgit(GUI)ではpushできない問題

2021年11月25日(木) 2時30分15秒 | 11 view

結論


環境

OS : Windows 10
Git client : Visual Studio Code
Git remote:Github via ssh
CUI:PowerShell
ssh.exe:openssh from chocolatey

背景

2020年のアップデートからhttpsでのGithubへの接続が制限されたので、ssh接続に切り替えてローカルにリポジトリをクローンして運用していた
ssh-addで鍵の登録まで終えた

事象

  1. git clone git@github.com:xxxx としてクローンすると、ssh-addで登録したはずなのにパスフレーズを聞かれる(パスが通ると問題なくクローンされる)
  2. ssh git@github.com -T を実行すると問題なくGithubと接続できている
  3. クローン後のディレクトリをVSCodeのGUIからpushを行ってもPermission deniedになる(パスフレーズも聞かれない)
  4. VScode上のターミナルからgit push origin mainを実行するとパスフレーズが聞かれた後に正しくプッシュされる
  5. .ssh/configをいくら書き換えても動かない


原因

  • sshコマンドとgitコマンド内部で呼ばれるsshコマンドが実行ファイルが違うためssh-addされた鍵が共有されない
  • VSCodeのGit Client GUIはパスフレーズを聞く機構がない(鍵が保存されていないと必ずPermission deniedになる)


解決策

gitコマンド内部で呼ぶsshコマンドを、ssh単体で読んだ際の実行ファイルに明示的にパスを当てる
C:\Users\<username>\.gitconfigに以下を記述。

[core]
        sshCommand = C:/Windows/System32/OpenSSH/ssh.exe


これでgit cloneでパスフレーズは聞かれず、GUIからのプッシュも問題なく動いた

参考

https://zenn.dev/yuri0427/articles/9587ae6a578ee9