俺はただwindows 10のvscodeからgit pushしたかっただけ
前書き
Visual Code Studioが最近人気ですね。(要出典)
会社のMacで便利に使ってます。
家のWindowsでも使いはじめたのですが、なぜかvscodeのgit pushを実行するとPermission Deniedのアラートが表示されてしまっていました。
Git Bashからならば(毎回sshのパスフレーズは聞かれていましたが)git push出来ていたので放置していたのですが、ちょっと気になってきたので腰をあげて解決することにしました。
状況
Version Control in Visual Studio Code にてWindowsのVisual Studio CodeでGitを使う場合はGit for Windowsをインストールすることが必要とされていたため従いました。
Git for Windowsをインストールしたし、bashに慣れていたため、Integrated Terminal in Visual Studio Code に従いvscodeのターミナルにGit Bashを採用しました。
解決例
まとめ
- 2019/3時点でWindows 10にインストール済みのOpenSSH(ssh.exe)を使う
- ssh-agent.exeを使う(windowsのサービスとして起動する)
- Windows起動時に毎回ssh-add.exeで秘密鍵をssh-agent.exeに登録する
これでvscodeからもGit Bashからもgit pushできるようになりました。
詳細
2019/3時点でWindows 10にインストール済みのOpenSSH(ssh.exe)を使う
vscodeからgit pushするときにOpenSSHを使うため、C:\Users\<username>\.gitconfigに以下を記述。
[core]
sshCommand = C:/Windows/System32/OpenSSH/ssh.exe
Git Bashからgit pushするときに使われるsshをOpenSSHにするため、C:\Users\<username>\.bash_profileに以下を記述。
alias ssh="/c/Windows/System32/OpenSSH/ssh.exe"
おまけで、WindowsのOpenSSHを使うようになったので、C:\Users\<username>\.ssh\configにあるIdentityFileのパス記述形式を修正。
Host bitbucket.org
IdentityFile C:\Users\<username>\id_rsa
User git
ssh-agent.exeを使う(windowsのサービスとして起動する)
こちらの通り。
Windows起動時に毎回ssh-add.exeで秘密鍵をssh-agent.exeに登録する
コマンドプロンプトを起動し以下を実行。
C:\Users\ajishixo>ssh-add C:\Users\<username>\id_rsa
Enter passphrase for C:\Users\<username>\id_rsa:
Identity added: C:\Users\<username>\id_rsa (C:\Users\<username>\id_rsa)
試行錯誤のメモ(箇条書き)
- vscodeからgit pushするとパスワードも聞かれずPermission Deniedが表示されていた。
- sshCommandのsshに-vvvオプションをつけてみると /dev/tty が No such file or directory だった。
-
ssh.exe misbehaves within Powershell · Issue #1041 · PowerShell/Win32-OpenSSH · GitHub によると解決してそうだが・・・。
-
Windows PowerShell の OpenSSH でパスワードを正しく入れてもログインできない。 - 中野智文のブログ に同意で、解決してないと判断。
- さらに、詳しくは分からないが、/dev/tty の問題が解決したところで、vscodeがパスワードを求めるプロンプトなどを表示する仕組みも必要なはず。
- 毎回パスワードを聞かれる状態の解消を優先すべしと判断。
- ssh-agentの有効化に至る。