Windows TortoiseHg在克隆/推送之后挂起的问题

8
我们拥有一个全是Windows的网络,我正在尝试通过SSH使用Tortoise Mercurial创建中央仓库,供我们的小团队使用。大部分情况下我都能够成功运行,但是plink/tortoiseplink在执行命令(克隆/推送等)成功后会挂起。
我已经在我们的Windows 2008 rc2服务器上安装了Freesshd以及Tortoise Hg。我在服务器上生成了自己的公钥/私钥(在客户端上生成时出现问题),使用PuttyGen工具进行操作。私钥我复制到了我的客户端并更新了mercurial.ini。公钥我重命名并更新了Freesshd,指向包含公钥的文件夹。
在客户端上,我已经使用Pageant注册了私钥,创建了一个Putty会话,并将其指向我的私钥并保存它。当我使用Putty进行初始连接时,事情开始变得奇怪。
我会得到一个用户名命令提示符(没有密码提示符),并且在命令提示符下(经过身份验证后),我无法输入任何内容。也许这是Putty的问题。我将尝试使用TortoisePlink.exe代替。
在mercurial.ini中,我有以下设置: [ui] ssh = "C:\putty\TortoisePlink.exe" -ssh -2 -batch -C -i C:\Users\Jude.ssh\JudePrivate.ppk
如果我使用控制台进行克隆,则会挂起(在做完一切之后)。使用--debug选项,最后一行显示: 3 files updated, O files merged, 0 files removed, 0 files unresolved
这是我所期望的,因为文件已经克隆了。但是然后我就无法再做其他任何事情了。Ctrl+C无效,我必须结束该进程。 (顺便说一下,这时候在命令提示符下也会显示Ctrl^C以及其余按键的输入)。
存储库被克隆了,正确版本的文件出现了,但控制台窗口不会关闭或者将控制权返还给我。
如果我尝试使用Hg Workbench,则会遇到类似的问题。我可以进行克隆和推送操作,但是使用GUI时我会得到以下提示:
% hg --repository C:\repositories\HgTest push --debug          
ssh://Jude@dev01:22/d:/repositories/hgtest
pushing to ssh://Jude@dev01:22/d:/repositories/hgtest
running "C:\putty\TortoisePlink.exe" -ssh -2 -batch -C -i
C:\Users\Jude\.ssh\JudePrivate.ppk Jude@dev01 -P 22 "hg -R d:/repositories/hgtest serve --stdio"
sending hello command
sending between command
remote: 145
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
remote: 1
query 1; heads
sending batch command
searching for changes
all local heads known remotely
no changes found
sending listkeys command
checking for updated bookmarks
sending listkeys command

工作台顶部的绿色条显示“正在推送到ssh://Jude@dev01:22/d:/repositories/hgtest...”,底部状态栏也是如此。我整个周末都保持这样,当我回来时还是这样。我仍然可以使用Hg工作台(有点),但无法使用拉/推/克隆。尝试关闭Hg Workbench会出现消息(在状态栏中)同步选项卡无法退出,我无法关闭应用程序。杀死TortoisePlink.exe(或Plink.exe,无论我尝试哪个)会释放应用程序,我可以像平常一样使用它或关闭它。

最初,我以为这是TortoiseHg或TortoisePlink的问题,但从Putty网站下载Plink会导致相同的问题。

澄清一下:
- 我可以通过SSH推/克隆,并且没有密码提示
- 我可以通过命令行或Hg Workbench完成此操作
- 无论我使用哪种方法(或Plink.exe或TortoisePlink.exe),进程都需要手动终止。

使用的软件+版本
客户端(Windows Vista 32位)
Tortoise Hg 2.3(merc 2.1,Python 2.6.6)
Plink 0.62
服务器 - (Windows 2008 server rc2)
FreeSSHd 1.2.4
与上述相同的Tortoise

进行了大量搜索,但没有找到有用的东西。我尝试了所有我看到的建议(即使略微相关),但都无济于事。由于实际功能正在工作,因此我认为我已经正确设置了密钥、SSH、Tortoise等。

我希望我错过了某个简单的选项,但我怀疑它正在等待某种用户提示。

祈祷吧 :)

===更新===

我找到了Putty的事件日志(右键单击putty控制台窗口,哇,"事件日志"选项。一旦我加载了会话并点击打开,我就会得到控制台窗口和一个login as:提示。输入我的名字并按回车键后,我得到:

Reading private key file "C:\Users\Jude\.ssh\JudePrivate.ppk"
Pageant is running. Requesting keys.
Failed to get reply from Pageant
Offered public key
Offer of public key accepted
Sent public key signature
Access granted
Opened channel for session
Allocated pty (ospeed 38400bps, ispeed 38400bps)
Started a shell/command

在这个阶段,命令提示符会改变为c:\Windows\system32>,并且无法输入任何内容。
=== 更新2 ===
使用plink在控制台上执行以下操作: plink -v -ssh Jude@dev01 "cmd /c echo hello" 除了所有-v给出的信息外,我还看到hello,然后是Server sent command exist status 0Disconnected: All channels closed。这是我所期望的。
如果我用tortoiseplink,`tortoiseplink-v -ssh Jude@dev01 "cmd /c echo hello"',我将看不到任何返回或写入窗口的内容,并且我会再次获得一个命令提示符。
这意味着SSH正在工作,别名(dev01)也是如此。但是使用TortoisePlink时我应该看到什么?
再次键入hg clone --verbose -- ssh://Jude@dev01/d:/repositories/hgtest C:\repositories\test会获取文件,将它们复制到test文件夹,但然后不会返回命令提示符。最后一行是3 files updated...等等。
=== 更新3 ===
似乎hg.exe是由服务器上的FreeSSHd生成的,并且它确实关闭/完成。当在服务器上杀死hg.exe进程时,客户端(控制台/克隆对话框)会表现出良好的行为并正常完成命令。
澄清一下:
  1. 我从命令行或HG Workbench使用克隆并指定repo别名
  2. 根据日志,一切都很好,我已通过SSH进行身份验证,并将文件拉到了我在1中指定的本地repo中
  3. 此时它挂起了-无论是控制台还是HG Workbench或右键单击/克隆选项。
  4. 在服务器上使用Process Explorer可以让我杀死FreeSSHd服务生成的hg.exe
  5. 只要我这样做,客户端就会显示“命令已成功完成”。
因此,现在似乎是Tortoise Hg在服务器上的问题。也许FreeSSHd和Tortoise不兼容...我想我会重新安装所有东西...
=== 更新4 ===
看来我不是唯一遇到这个问题的人。我之前在SO上看到过这个问题,但当时它与我无关。然而,现在我也遇到了同样的问题:Mercurial over ssh client and server on Windows 那个问题没有解决(两年前),所以我应该继续保持这个问题的开放状态吗?

http://mercurial.selenic.com/wiki/AccessingSshRepositoriesFromWindows - Lazy Badger
已经将链接加为书签并进行了关注。它可以很好地设置 - 但无法帮助排除故障... - Jag
关于Mercurial的freeSSSHd设置的2010年链接 - http://opapao.blogspot.com/2010/02/setting-up-freesshd-to-work-with.html,可能在某种程度上仍然相关。 - Lazy Badger
我会尝试查看正在积极开发中的WinSSHd的问题。 - Lazy Badger
感谢提供链接,尽管我已经从其他文章中避免了那些陷阱。我开始认为我的客户端(ssh / hg等)设置得很好。经过进一步调试,我开始怀疑问题出在freeSSHd上。不幸的是,这个项目看起来已经停滞了。 - Jag
1个回答

2
  1. First of all - read docs!

    hg help urls
    Valid URLs are of the form:
    
    ....
    
    ssh://[user@]host[:port]/[path][#revision]
    
  2. Plink uses -l option for username

  3. Debug successful ssh-connect (and usable path) with pure TortoisePlink, remove all unnecessary options


我阅读了我能找到的文档 - 我是Windows用户,因此不习惯使用控制台进行文档查看。无论如何,我使用的URL是正确的。 - Jag
@Jag - 1. URL 中的默认端口是无用的 2. 我怀疑定义的路径是否有效 3. 您必须使用控制台来调试 plink-connection 4. 需要使用 -l 选项 - Lazy Badger
你能告诉我 ssh://Jude@dev01:22/d:/repositories/hgtest 和你粘贴的URL格式有什么不同吗?我正在使用 -i 并指定私钥,这就是为什么它有效的原因。如果我删除它,我会得到“主机不存在,远程hg没有合适的响应”。plink.exe jude@dev01 会将命令提示符更改为 c:\windows\system32>,但我无法输入任何内容,必须使用 ctrl+c。从命令行运行 tortoiseplink.exe jude@dev01 不会给我任何东西。命令提示符仍然保持为 c:\putty>(我复制了一些与putty相关的exe文件以避免路径中的空格)。 - Jag
抱歉,我尝试编辑我的先前回复,但它不允许我这样做。 - Jag
您的建议使用plink -l来指定用户名,帮助我解决了在Windows命令行中使用SSH、SVN、putty plink和maven-release-plugin时遇到的类似问题,非常感谢您的帮助。 - andyb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接