Windows上的Mercurial“hg clone”通过带有plink问题的ssh

时间:2010-05-10 01:05:40

标签: windows mercurial ssh putty plink

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

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

接下来,我想使用CLI通过hg clone连接以获取私人仓库。我在其他地方看到你需要在你的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上克隆测试存储库服务器:
hg clone ssh://!/Repos/test

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

我真正不明白的是plink如何知道什么服务器ssh。我的mercurial.ini和命令都没有指定服务器。我见过的hg clone个例子都没有!个字符。它们都使用了一个有意义的地址,因此你可以通过你想要克隆的ssh连接到任何 repo。

我唯一的猜测是它以某种方式默认为我使用PuTTY SSH的最后一台服务器,但是我将SSH连接到另一台服务器,然后尝试使用plink来实现它,但是plink仍默认为inthom.com (用-v arg验证为plink)。所以我对plink如何获得这个服务器价值感到茫然。

对于“有趣”,我尝试使用TortoiseHg,只能在使用ssh://!/Repos/test作为源时克隆回购。

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

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

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

PS。我不得不使用大量不同的教程来进入这个阶段。因此,我还没有尝试过对服务器进行任何更改。希望我能解决这个问题然后我可以尝试将更改推送到回购。

3 个答案:

答案 0 :(得分:4)

我知道我迟到但现在更好了。 好的,所以......用于连接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)”。

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

    此外,在将Tlink与TortoiseHg或其他一些GUI工具(如MercurialEclipse)结合使用之前,必须先将此服务器添加到服务器列表中。如果你没有这样做,Plink将会等待你的回复,因为你使用的是TortoiseHg而不是命令行。有关AccessingSshRepositoriesFromWindows中此子图的更多信息。

答案 1 :(得分:1)

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

示例:

  

plink -ssh -C -l {username} -pw {pass} -P 22 -i“C:/ Program Files / PuTTY / Key Files / KyleKey.ppk”inthom.com:/Repos/test

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

答案 2 :(得分:1)

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