GitExtensions + Putty通过SSH自定义端口

mac*_*mac 6 git ssh putty git-extensions

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

git pull ssh://username@host.com:1234/path/to/repository.git
Run Code Online (Sandbox Code Playgroud)

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

plink -T username@host.com:/path/to/repository.git
Run Code Online (Sandbox Code Playgroud)

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

正确的召唤将是

plink -T -P 1234 username@host.com:/path/to/repository.git
Run Code Online (Sandbox Code Playgroud)

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

plink -T username@hostCom
Run Code Online (Sandbox Code Playgroud)

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

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

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

为什么OpenSSH可以解决这个问题,但Putty不能解决?OpenSSH的唯一问题是它在每次连接尝试时一直要求我输入私钥的密码(我不想在没有密码的情况下创建私钥).

mac*_*mac 11

明白了.

这是让我走错路的原因:

  • 不要在腻子产生任何会议所概述这里
  • 不要使用您在〜/ .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
Run Code Online (Sandbox Code Playgroud)
  • 在上面的示例中,使用"完整"命令来提取,不允许您不指定端口等的主机别名.如果端口丢失,并且只有一个冒号,git将其视为路径分隔符,并将ssh视为端口分隔符(因此它们每个都很糟糕).

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

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

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

  • 有%GIT_SSH%指向ssh.exe并使用主机别名而不是路径包含.港口
  ssh.exe": hostPutty:path: no address associated with name
  fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
  • 在%GIT_SSH%中使用的撇号
  error: cannot spawn "C:\tools\PuTTY\plink.exe": No such file or directory
  fatal: unable to fork
Run Code Online (Sandbox Code Playgroud)