windows - Windows 上的 Mercurial "hg clone"通过 ssh 出现 plink 问题

标签 windows mercurial ssh putty plink

我有一台安装了 CopSSH 的 Windows Server 2008 机器 (iis7)。为了连接到它,我有一台安装了 Mercurial 1.5.1(和 TortoiseHg)的 Windows 7 机器。

我可以使用带有非标准 ssh 端口和 .ppk 文件的 PuTTY 连接到服务器。所以我知道服务器可以通过 SSH 进入。

接下来,我想使用 CLI 通过 hg clone 进行连接以获取私有(private)存储库。我在别处看到你需要在 mercurial.ini 文件中配置 ssh,所以我的 mercurial.ini 有一行:ssh = plink.exe -ssh -C -l username -P #### -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk"
注意:
username填写我通过copSSH设置的用户名。
####填充了我为 copSSH 定义的非标准 ssh 端口。

我尝试执行命令 hg clone ssh://inthom.com但我得到这个错误:
remote: bash: inthom.com: command not found<br/> abort: no suitable response from remote hg!

它看起来像 hg 或 plink 解析主机名,这样它认为 inthom.com 是一个命令而不是要 ssh 到的服务器。这真的很奇怪。

接下来,我尝试使用 plink 通过 plink -P #### ssh://inthom.com 进行连接,然后系统会提示我输入用户名和下一个密码。我同时输入它们,然后出现此错误:
bash: ssh://inthom.com: No such file or directory

所以现在看起来 plink 没有正确解析主机名。

我摆弄了一段时间试图弄清楚如何使用空 ssh://字段调用 hg clone 并最终弄清楚这个命令允许我到达服务器并在 inthom.com 上克隆一个测试 repo服务器:
hg clone ssh://!/Repos/test

!是我发现的字符,让我将主机名留空,但指定要克隆的 repo 文件夹。

我真的不明白 plink 是怎么知道要 ssh 到哪个服务器的。我的 mercurial.ini 和命令都没有指定服务器。没有hg clone我见过的例子有一个 !特点。它们都使用一个有意义的地址,因此您可以通过 ssh 连接到您想要克隆的任何存储库。

我唯一的猜测是,它以某种方式默认为我使用 PuTTY 通过 SSH 连接到的最后一个服务器,但我通过 SSH 连接到另一台服务器,然后尝试使用 plink 访问它,但 plink 仍然默认为 inthom.com (使用 -v arg 验证 plink)。所以我完全不知道 plink 如何获得这个服务器值。

为了“好玩”,我尝试使用 TortoiseHg,但当我使用 ssh://!/Repos/test 时只能克隆一个 repo。作为来源。

现在,您可以看到,由于 plink 没有正确解析主机名,我不得不在 mercurial.ini 文件中指定端口号和用户名,而不是像 username@inthom.com 这样的主机名:## ## 就像你期望的那样。一开始试图解决这个问题让我发疯,因为我会收到无法访问主机的错误,我知道情况不应该如此。

我的问题是如何配置我的设置,以便 ssh://username@inthom.com:####/Repos/test 被正确解析为用户名、主机名、端口号和要复制的 repo?是我使用的 plink 版本有问题,还是我搞砸了某些设置?如果是 plink 的错,有没有我可以使用的替代工具?

我将尝试让我的 friend 设置连接到同一个存储库,所以我想要一个干净的解决方案而不是这个 !商业。特别是当我不知道 plink 如何获得这个默认服务器时,所以我不确定他是否能够正确访问 inthom.com。

附言。我不得不使用大量不同的教程才能达到这个阶段。因此,我还没有尝试将任何更改推送到服务器。希望我能解决这个问题,然后我可以尝试将更改推送到存储库。

最佳答案

我知道我迟到了,但现在总比从来没有好。 好的,所以...连接到 Mercurial SSH 的命令

ssh = plink.exe -ssh -C -l username -P #### -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk"

完全没问题,但问题出在 Plink 上。

Plink 无法处理名称中包含空格的文件夹。所以,问题出在

"C:/Program Files/PuTTY/Key Files/KyleKey.ppk"

你有两个选择:

  1. 您可以将此“KyleKey.ppk”文件移动到名称中没有空格的路径中。例如,您可以将此文件移动到“C:\”或“D:\Path\Without\Space\In\Name”。

  2. 您可以使用 Windows 短路径名。例如,我有

    ssh = "C:\Progra~2\Plink\Plink.exe" -ssh -i "C:\Progra~2\PuTTYgen\hrle.ppk"

    在我的“Mercurial.ini”中。

    “C:\Progra~2”是“C:\Program Files (x86)”。

如果 SSH 私钥受密码保护,Plink 将挂起。

此外,在将 Plink 与 TortoiseHg 或其他一些 GUI 工具(如 MercurialEclipse)结合使用之前,您必须添加此服务器以了解服务器列表。如果您不这样做,Plink 将挂起等待您的响应,您不能给出响应,因为您使用的是 TortoiseHg 而不是在命令行上。关于此主题的更多信息,请参阅 AccessingSshRepositoriesFromWindows .

关于windows - Windows 上的 Mercurial "hg clone"通过 ssh 出现 plink 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2799822/

相关文章:

linux - 通过 ssh 与集群的从属节点连接失败

Jenkins sshScript 远程 :remote pass argument

windows - 为什么在使用 XMLHttpRequest 对象发送 POST 请求时 Content-Length 为 0?

windows - 确定我的代码当前运行在哪个物理处理器上

windows - 如何更改windows系统默认的最大化窗口大小?

mercurial - 质量检查如何测试代码并与稳定的分支 merge ?

ssh - ssh伪tty导致 channel 0上的PTY分配请求失败

windows - 更改 Emacs M-x shell 以使用 Windows 10 bash

mercurial - 我可以在 Mercurial 中压缩提交吗?

mercurial - 理解 Mercurial merge 逻辑