3

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

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

接下来,我想使用 CLI 通过 hg clone 进行连接以获取私有 repo。我在其他地方看到您需要在 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
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 连接到您想要克隆的任何repo。

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

为了“好玩”,我尝试使用 TortoiseHg 并且只能在我ssh://!/Repos/test用作 Source 时克隆一个 repo。

现在,您可以看到,由于 plink 没有正确解析主机名,我必须在 mercurial.ini 文件中指定端口号和用户名,而不是在主机名中,如 username@inthom.com:####你会期望的。一开始试图弄清楚这一点让我发疯了,因为我会收到无法联系到主机的错误,我知道不应该这样。

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

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

PS。我不得不使用大量不同的教程才能达到这个阶段。因此,我还没有尝试将任何更改推送到服务器。希望我能弄清楚这一点,然后我可以尝试将更改推送到 repo。

4

3 回答 3

5

我知道我迟到了,但现在比以前更好了。好的,所以... 连接 Mercurial SSH 的命令

ssh = plink.exe -ssh -C -l 用户名 -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中有关此主题的更多信息。

于 2010-06-08T20:23:42.867 回答
1

哟,我有同样的问题。我的设置有什么问题是 plink 使用的是 putty 中设置的默认服务器,而不是我提供的服务器。我不得不打开腻子并删除默认服务器,然后保存。尝试在没有服务器的情况下使用 plink .. 如果您的命令通过,则您有一个默认服务器..

于 2010-06-04T16:56:20.197 回答
1

使用 plink,您不需要使用 ssh:// 协议标识符。您可以简单地使用 {user}@{host}:{path} 格式,它会正常工作。

例子:

plink -ssh -C -l {用户名} -pw {pass} -P 22 -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk" inthom.com:/Repos/test

将 {username} 替换为用户,将 {pass} 替换为密码。

于 2010-05-11T03:27:37.743 回答