首页 文章

TortoiseGit与openssh密钥不使用ssh-agent进行身份验证

提问于
浏览
23

我正在Windows XP上设置一个git环境(msysGit 1.7.11,TortoiseGit 1.7.14),并尝试实现以下几点:

  • ssh连接在不同于默认值22的端口上
    由ssh-agent处理的
  • ssh身份验证

所以我创建了一个〜/ .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自动身份验证时会询问密码短语密码 .

https://dl.dropbox.com/u/1026715/tortoisegit.png

是否可以使TortoiseGit与ssh-agent一起使用?
或者让TortoiseGit(Plink)知道.ssh / config?

Edit #1

在@VonC建议后,我配置了我的$ HOME变量 .
当我在TortoiseGit中单击显示环境变量时,我现在有:

HOME=C:\Documents and Settings\kraymer  
 HOMEDRIVE=C: 
 HOMEPATH=\Documents and Settings\kraymer

但是 git pull 仍然要求我输入密码 .

6 回答

  • 2

    不需要调整 .

    只需让TortoiseGit指向git本身使用的同一个ssh客户端,请看截图:

    enter image description here

    这应该是Aleksey Kontsevich在评论中提到的最新版Git中的 C:\Program Files\Git\usr\bin\ssh.exe .

  • 4

    我首先使用Plink安装TortoiseGit并使用Pageant加载ssh私钥 . 自动身份验证(Pageant)工作但设置失败,因为TortoiseGit无法识别格式为gitolite@gitbox/repo.git的git repos url .

    我终于找到了一个解决方法,它包括创建一个与ssh别名相同的PuTTY会话(即问题中的gitbox) .
    这样我就可以在CLI中克隆为 git clone gitbox/monrepo ,并且TortoiseGit正确处理 origin 语法 .

  • 3

    1)Cygwin

    使用以下文章中描述的方法:https://help.github.com/articles/working-with-ssh-key-passphrases

    密码只会在cygwin会话启动时被询问一次 . !在退出cygwin会话之前,不要忘记杀死ssh-agent进程(使用ps查找进程PID和kill -9) .

    我们正在使用cygwin的单独方法,因为cygwin由于某种原因没有看到在Windows环境中外部启动的进程 .

    2,3)MsysGit,TortoiseGit

    有用链接: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任务管理器将其杀死 .

  • 4

    上述答案都不适合我 .

    我创建了这个批处理文件来解决问题 .

    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,而不必为每个操作输入你的密码 .

  • 0

    确保在定义了 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?”)

  • 64

    似乎有各种各样的选择来解决这个问题 . 由于以上都没有对我有用,我想我会分享对我有帮助的东西 .

    Screenshot: Network settings / Git SSH Client

    Settings... -> Network -> SSH -> SSH client 中,将客户端设置为 C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe . 使用Pageant,然后按预期自动进行身份验证,否则系统会提示您输入私钥密码 . 确保在推送对话框中选中了"Autoload Putty Key"选项 .

相关问题