GitExtensions + Putty通过SSH自定义端口

时间:2012-09-06 12:57:27

标签: git ssh putty git-extensions

我有一个git存储库,我使用类似于此的路径拉取:

git pull ssh://username@host.com:1234/path/to/repository.git

当GitExtensions尝试使用plink从repo中提取时,它会进行此调用:

plink -T username@host.com:/path/to/repository.git

这最终失败了,因为它实际上正在ping端口#22,而不是#1234。

对make的正确调用将是

plink -T -P 1234 username@host.com:/path/to/repository.git

如果我在〜/ .ssh / config中创建一个别名“hostCom”,它似乎正常工作(连接到#1234),如果我这样做:

plink -T username@hostCom

但是,只要我添加git repo的路径,它就会再次进入#22。

我尝试的另一个选项是在putty中创建一个会话,让我们称之为“hostPutty”,并在那里设置默认端口等。尽管底线最终是相同的:无法将路径与git repo组合在一起端口。

如何组合所有部件以使其起作用?

OpenSSH怎么能解决这个问题,但是Putty不能解决? OpenSSH的唯一问题是它在每次连接尝试时都不断询问我私钥的密码(我不想在没有密码的情况下创建私钥)。

2 个答案:

答案 0 :(得分:11)

弄清楚了。

这就是让我走错路的原因:

  • 请勿按照here
  • 所述在Putty中创建任何会话
  • 请勿使用您在〜/ .ssh / config
  • 中定义的任何主机别名

以下是您如何运作:

  • 显然确保GitExtensions设置为使用Putty,而不是OpenSSH
  • 确保plink.exe(GitExtensions提供的或与Putty一起专门安装的)位于没有空格的路径中
  • 将您的env变量%GIT_SSH%设置为指向plink.exe(默认情况下可能指向ssh.exe),请确保没有撇号,因为该值将“按原样”使用(这就是为什么你不能使用上述空格)
  c:\>echo %GIT_SSH%
  C:\tools\PuTTY\plink.exe
  • 在上面的示例中,使用“完整”命令来提取,不允许您不指定端口等的主机别名。如果缺少端口,并且只有一个冒号,git将其视为路径分隔符,并将ssh视为端口分隔符(因此它们会将每个端口分别很糟糕)。

    git clone ssh://username@host.com:1234 / path / to / repository.git

如果你这样做,Git + plink实际上可以解决问题!

如果你不这样做,你可能遇到各种各样的问题,如:

  • %GIT_SSH%指向ssh.exe并使用主机别名而不是路径incl。端口
  ssh.exe": hostPutty:path: no address associated with name
  fatal: The remote end hung up unexpectedly
  • %GIT_SSH%
  • 中使用的撇号
  error: cannot spawn "C:\tools\PuTTY\plink.exe": No such file or directory
  fatal: unable to fork

答案 1 :(得分:1)

对我来说,我一直收到主机名不存在的错误。在对此线程和其他线程尝试了一堆建议后,我检查了我的远程URL,这是罪魁祸首。如果您使用putty,请确保它以git@github.com而不是https://github

开头

Here's an examplpe of how to check this in git extensions