我有一台安装了 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"
你有两个选择:
您可以将此“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:\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/