我正在Windows XP上设置一个git环境(msysGit 1.7.11,TortoiseGit 1.7.14)并尝试实现以下几点:
所以我创建了一个〜/ .ssh / config文件:
Host gitbox
User gitolite
Hostname XX.XX.XX.XX
Port 154
PreferredAuthentications publickey
IdentityFile "/c/Documents and Settings/kraymer/.ssh/id_rsa"
使用git bash CLI时,一切都按预期工作。
我正在与TortoiseGit斗争。 我首先使用Plink安装TortoiseGit并使用Pageant加载ssh私钥。自动身份验证(Pageant)工作但设置失败,因为TortoiseGit无法识别格式为gitolite@gitbox/repo.git的git repos url。
然后我决定使用openssh客户端安装TortoiseGit,因此ssh客户端可以读取配置文件,并模仿git CLI设置。
我在TortoiseGit设置中选择了msys git附带的ssh.exe作为ssh客户端。
在执行git pull
时,远程URL现在已解析,但在我期望发生ssh-agent自动身份验证时会询问密码短语密码。
是否可以使TortoiseGit与ssh-agent一起使用? 或者让TortoiseGit(Plink)知道.ssh / config?
编辑#1
在@VonC建议后,我配置了我的$ HOME变量。 当我在TortoiseGit中单击显示环境变量时,我现在有:
HOME=C:\Documents and Settings\kraymer
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\kraymer
但git pull
仍然要求我输入密码。
我首先使用Plink安装TortoiseGit并使用Pageant加载ssh私钥。自动身份验证(Pageant)工作但设置失败,因为TortoiseGit无法识别格式为gitolite@gitbox/repo.git的git repos url。
我终于找到了一个解决方法,它包括创建一个与ssh别名相同的PuTTY会话(即问题中的gitbox)。
这样我可以在CLI中克隆为git clone gitbox/monrepo
,并且TortoiseGit正确处理origin
语法。
使用以下文章中描述的方法:https://help.github.com/articles/working-with-ssh-key-passphrases
密码只会在cygwin会话启动时被询问一次。 !在退出cygwin会话之前,不要忘记杀死ssh-agent进程(使用ps查找进程PID和kill -9)。
我们正在使用cygwin的单独方法,因为cygwin由于某种原因没有看到在Windows环境中外部启动的进程。
有用的链接:http://dogbiscuit.org/mdub/weblog/Tech/WindowsSshAgent
安装MsysGit。安装TortoiseGit(在安装过程中检查openssh而不是plink)。 !检查系统变量。如果存在GIT_SSH变量 - 将其删除。
转到TortoiseGit->设置 - >常规
将Git exe路径设置为/ bin将外部dll路径设置为/ mingw / bin
转到TortoiseGit->设置 - >网络设置SSH客户端属性到/bin/ssh.exe
定义系统变量SSH_AUTH_SOCKS = C:\ temp.ssh-socket
启动cmd.exe并执行以下命令(因为我们安装了MsysGit,所有以下命令都可以在cmd中访问 - / bin添加到系统PATH变量中):
# 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
而已。从那一刻起,您可以在不提示密码的情况下执行git push,来自TortoiseGit和MsysGit的git pull。
当不再需要ssh-agent时,您可以通过Windows任务管理器将其杀死。
上述答案都不适合我。
我创建了这个批处理文件来解决问题。
CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"
运行一次,然后输入您的密码。
然后你可以使用tossisegit和openssh,而不必为每个操作输入你的密码。
确保在定义了HOME
的环境中启动TortoiseGit,并引用.ssh
的父目录。
这很重要,因为在Windows上,默认情况下未定义HOME。
举个例子:“Auth fails on Windows XP with git and tortoisegit”。 (其他可能的来源:“How to I tell Git for Windows where to find my private RSA key?”)
似乎有各种各样的选择来解决这个问题。由于以上都没有对我有用,我想我会分享对我有帮助的东西。
Screenshot: Network settings / Git SSH Client
在Settings... -> Network -> SSH -> SSH client
,将客户端设置为C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
。使用Pageant,然后按预期自动进行身份验证,否则系统会提示您输入私钥密码。确保在推送对话框中选中“Autoload Putty Key”选项。
由于这里的解释有点过时,我决定发布我的解决方案。
我在Windows 10中使用Git Bash和TortoiseGit 2.8.0,这在当今很常见。
我在ssh.exe
中将Settings->Network
设置为SSH客户端,如之前的帖子中所述。
我使用以下命令创建了一个脚本,如上一条评论中所述。您可能还想设置HOME环境变量,以防系统自动执行此操作。假设您的家位于驱动器H:\中,您可以添加以下行:
SETX HOME /h
CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"
我使用Win logo + R shell:startup
将脚本添加到启动文件夹中。或者,您可以将脚本添加到注册表以确保它在其他进程之前运行:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
确保键入exit
以关闭控制台并允许为将来的进程设置变量。