Mercurial“;hg克隆";在Windows上通过ssh解决plink问题

Mercurial“;hg克隆";在Windows上通过ssh解决plink问题,windows,mercurial,ssh,putty,plink,Windows,Mercurial,Ssh,Putty,Plink,我有一台Windows Server 2008机器(iis7),上面安装了CopSSH。为了连接它,我安装了一台装有Mercurial 1.5.1(和TortoiseHg)的Windows7机器 我可以使用PuTTY和非标准ssh端口以及.ppk文件连接到服务器。所以我知道服务器可以通过SSH连接 接下来,我想使用CLI通过hg clone进行连接,以获得私有回购。我在其他地方看到,您需要在mercurial.ini文件中配置ssh,因此我的mercurial.ini有一行:ssh=plink.

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

我可以使用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端口填充

我尝试执行命令
hgclonessh://inthom.com
但是我得到了这个错误:
remote:bash:inthom.com:未找到命令
中止:远程hg没有合适的响应

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

接下来,我尝试使用plink通过
plink-p###进行连接ssh://inthom.com
,然后系统会提示我输入用户名和下一个密码。我同时输入了这两个参数,然后出现以下错误:
bash:ssh://inthom.com: 没有此类文件或目录

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

我花了一段时间试图找出如何使用空的ssh://字段调用hg clone,最终发现这个命令允许我访问服务器并在inthom.com服务器上克隆测试repo:
hg clone ssh:///回购/测试

是我找到的字符,让我将主机名留空,但指定要克隆的repo文件夹

我真正不明白的是,plink怎么知道ssh连接到哪个服务器。my mercurial.ini和命令都没有指定服务器。我所看到的
hg clone
示例中没有一个是
字符。它们都使用一个有意义的地址,因此您可以通过ssh连接到任何要克隆的repo

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

为了“好玩”,我试着使用龟甲,只有在使用
ssh://时才能克隆一个repo/Repos/test
作为源

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

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

我将尝试让我的朋友设置连接到同一个回购协议,因此我希望有一个干净的解决方案,而不是这个
业务。特别是当我不知道plink是如何获得这个默认服务器的时候,所以我不确定他是否能够正确访问inthom.com


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

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

例如:

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


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

yo,我也有同样的问题。我的设置有一个问题,那就是plink使用的是putty中的默认服务器集,而不是我提供的服务器集。我必须打开putty并删除默认服务器,然后保存。尝试在没有服务器的情况下使用plink。。如果您的命令通过,您将拥有一个默认服务器。

我知道我迟到了,但现在比永远都不会好。 好吧,那么。。。用于连接到Mercurial SSH的命令

ssh=plink.exe-ssh-C-l用户名-p######-i“C:/Program Files/PuTTY/Key Files/KyleKey.ppk”

完全可以,但问题在于普林克

Plink在名称中包含空格的文件夹中存在问题。因此,问题在于

“C:/Program Files/PuTTY/Key Files/KyleKey.ppk”

您有两个选择:

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

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

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

    在我的“Mercurial.ini”中

    “C:\Progra~2”是“C:\ProgramFiles(x86)”

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


    而且,在将Plink与OrtoisehG或其他GUI工具(如MercurialClipse)结合使用之前,您必须添加此服务器以了解服务器列表。如果你做不到这一点,Plink将挂起等待你的回应,而你不能给出回应,因为你与陆龟合作,而不是在命令行上。有关此主题的更多信息,请参见。

    @Sean Madden-当我输入您推荐的命令时