【问题标题】:GitExtensions and PuTTY via SSH on a custom portGitExtensions 和 PuTTY 通过自定义端口上的 SSH
【发布时间】:2012-09-06 12:57:26
【问题描述】:

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

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

当 GitExtensions 尝试使用 plink 从存储库中拉取数据时,它会进行以下调用:

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

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

正确的调用是

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

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

plink -T username@hostCom

但只要我也添加了 Git 存储库的路径,它就会再次转到 #22。

我尝试的另一个选项是在 PuTTY 中创建一个会话。让我们称它为“hostPutty”,并在那里设置默认端口,等等。但底线最终是相同的:无法将 Git 存储库的路径与自定义端口结合起来。

如何组合所有部分以使它们发挥作用?

为什么OpenSSH 可以解决问题,而 PuTTY 却不能? OpenSSH 的唯一问题是,它在每次连接尝试时都会询问我私钥的密码(而且我不想创建没有密码的私钥)。

【问题讨论】:

    标签: git ssh putty git-extensions


    【解决方案1】:

    我明白了。

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

    • 不要在 PuTTY 中创建任何会话,如 here 所述
    • 不要使用您可能在文件 ~/.ssh/config 中定义的任何主机别名

    以下是它的工作方式:

    • 显然确保将 GitExtensions 设置为使用 PuTTY,而不是 OpenSSH
    • 确保 plink.exe(可通过 GitExtensions 获得或通过 PuTTY 专门安装的那个)位于没有空格的路径中
    • 设置你的环境变量%GIT_SSH%指向plink.exe(它可能默认指向ssh.exe),确保没有撇号,因为该值将“按原样”使用(这就是您不能使用上述空格的原因)
    echo %GIT_SSH%
    
    C:\tools\PuTTY\plink.exe
    
    • 在上面的示例中,使用“full”命令进行拉取,没有任何允许您不指定端口等的主机别名。如果端口丢失,并且只有一个冒号,Git 会将其视为路径分隔符,并将 ssh 视为端口分隔符(因此它们相互咬得很差)。

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

    如果你这样做了,Git 和 plink 确实可以解决问题!

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

    • 我让 %GIT_SSH% 指向 ssh.exe 并使用主机别名而不是路径包括。港口

    ssh.exe": hostPutty:path: 没有与名称关联的地址
    致命:远端意外挂断

    • 在 %GIT_SSH% 中使用了撇号

    错误:无法生成“C:\tools\PuTTY\plink.exe”:没有这样的文件或目录
    致命:无法分叉

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-03-03
        • 2012-09-30
        • 2011-08-11
        • 2017-02-07
        • 2015-05-09
        • 2019-01-09
        • 2015-09-07
        • 2019-12-27
        • 2012-09-26
        相关资源
        最近更新 更多