我有一台安装了 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。