可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm setting up a git environment on Windows XP (msysGit 1.7.11, TortoiseGit 1.7.14) and trying to achieve following points :
- ssh connection on a port different than default 22
- ssh authentification handled by ssh-agent
So I create a ~/.ssh/config file :
Host gitbox User gitolite Hostname XX.XX.XX.XX Port 154 PreferredAuthentications publickey IdentityFile "/c/Documents and Settings/kraymer/.ssh/id_rsa"
When using the git bash CLI, everything works as intended.
I'm struggling with TortoiseGit.
I first installed TortoiseGit with Plink and using Pageant to load ssh private key. The automatic authentication (Pageant) worked but setup was a fail as TortoiseGit don't recognize git repos url formatted as gitolite@gitbox/repo.git.
I then decided to install TortoiseGit using openssh client, so the config file can be read by the ssh client, and to mimic the git CLI setup.
I picked the ssh.exe shipped with msys git as ssh client in TortoiseGit settings.
When doing a git pull
, the remote url is now resolved but the passphrase password is asked while I expect ssh-agent automatic authentication to occur.
Is it possible to make TortoiseGit work with ssh-agent ?
Or make TortoiseGit (Plink) aware of .ssh/config ?
Edit #1
Following @VonC advice I configured my $HOME variable.
When I click Show environment variables in TortoiseGit I now have :
HOME=C:\Documents and Settings\kraymer HOMEDRIVE=C: HOMEPATH=\Documents and Settings\kraymer
But git pull
still require I enter passphrase.
回答1:
No tweaks needed.
Just make TortoiseGit point to the same ssh client used by git itself, see the screenshot:

This should be C:\Program Files\Git\usr\bin\ssh.exe
in latest version of Git as mentioned by Aleksey Kontsevich in the comments.
回答2:
1) Cygwin
Use approach described in the following article: https://help.github.com/articles/working-with-ssh-key-passphrases
Password will be asked only once on the cygwin session startup. !!! Before exiting cygwin session don't forget to kill ssh-agent process (use ps for find process PID and kill -9).
We are using separate approach for cygwin, because cygwin by some reason doesn't see processes started externally in windows environment.
2, 3) MsysGit, TortoiseGit
Useful link: http://dogbiscuit.org/mdub/weblog/Tech/WindowsSshAgent
Install MsysGit. Install TortoiseGit (check openssh instead of plink during installation). !!! Check systems variables. If there is GIT_SSH variable present - remove it.
Go to TortoiseGit->Settings->General
Set Git exe Path to /bin Set External dll path to /mingw/bin
Go to TortoiseGit->Settings->Network Set SSH Client property to /bin/ssh.exe
Define system variable SSH_AUTH_SOCKS=C:\temp.ssh-socket
Start cmd.exe and execute following commands(since we installed MsysGit all following commands are accessible in cmd - /bin is added to system PATH variable):
# following command is required to execute for avoiding Address already bind message when ssh-agen is not started yet but .ssh-socket exists after previous agent session rm "%SSH_AUTH_SOCK%" # Starting ssh-agent ssh-agent -a "%SSH_AUTH_SOCK%" # Adding our openssh key ssh-add "%USERPROFILE%\.ssh\id_rsa" # Type password for your key
That's it. From that moment you can execute git push, git pull from TortoiseGit and MsysGit without prompting passphrase.
When ssh-agent is no longer required you can kill it through windows task manager.
回答3:
I first installed TortoiseGit with Plink and using Pageant to load ssh private key. The automatic authentication (Pageant) worked but setup was a fail as TortoiseGit don't recognize git repos url formatted as gitolite@gitbox/repo.git.
I finally found a workaround which consist to create a PuTTY session with the same name that the ssh alias (ie gitbox in the question).
This way I can clone as git clone gitbox/monrepo
in the CLI and the origin
syntax is correctly handled by TortoiseGit.
回答4:
Make sure to launch your TortoiseGit in an environment where HOME
is defined, and reference the parent directory of .ssh
.
This is important since, on Windows, HOME isn't defined by default.
See as an example: "Auth fails on Windows XP with git and tortoisegit".
(Other possible sources: "How to I tell Git for Windows where to find my private RSA key?")
回答5:
None of the above answers worked for me.
I created this batch file to solve the problem.
CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd" SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%" SETX SSH_AGENT_PID "%SSH_AGENT_PID%"
Run this once, and enter your passphrase.
Then you can use tortoisegit with openssh without having to enter your passphrase for every operation.
回答6:
There seems to be a whole variety of options to solve this. As none of the above have worked for me, I tought I'd share what helped for me.
Screenshot: Network settings / Git SSH Client
In Settings... -> Network -> SSH -> SSH client
, set the client to C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
. Using Pageant, you're then automatically authenticated as expected, otherwise you are prompted for your private key passphrase. Make sure the "Autoload Putty Key" option is checked in the push dialog.