我们拥有一个全是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时我会得到以下提示:
工作台顶部的绿色条显示“正在推送到ssh://Jude@dev01:22/d:/repositories/hgtest...”,底部状态栏也是如此。我整个周末都保持这样,当我回来时还是这样。我仍然可以使用Hg工作台(有点),但无法使用拉/推/克隆。尝试关闭Hg Workbench会出现消息(在状态栏中)
在这个阶段,命令提示符会改变为
=== 更新2 ===
使用plink在控制台上执行以下操作:
如果我用tortoiseplink,`tortoiseplink-v -ssh Jude@dev01 "cmd /c echo hello"',我将看不到任何返回或写入窗口的内容,并且我会再次获得一个命令提示符。
这意味着SSH正在工作,别名(dev01)也是如此。但是使用TortoisePlink时我应该看到什么?
再次键入
=== 更新3 ===
似乎hg.exe是由服务器上的FreeSSHd生成的,并且它确实关闭/完成。当在服务器上杀死hg.exe进程时,客户端(控制台/克隆对话框)会表现出良好的行为并正常完成命令。
澄清一下:
=== 更新4 ===
看来我不是唯一遇到这个问题的人。我之前在SO上看到过这个问题,但当时它与我无关。然而,现在我也遇到了同样的问题:Mercurial over ssh client and server on Windows 那个问题没有解决(两年前),所以我应该继续保持这个问题的开放状态吗?
我已经在我们的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 0
和Disconnected: 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进程时,客户端(控制台/克隆对话框)会表现出良好的行为并正常完成命令。
澄清一下:
- 我从命令行或HG Workbench使用克隆并指定repo别名
- 根据日志,一切都很好,我已通过SSH进行身份验证,并将文件拉到了我在1中指定的本地repo中
- 此时它挂起了-无论是控制台还是HG Workbench或右键单击/克隆选项。
- 在服务器上使用Process Explorer可以让我杀死FreeSSHd服务生成的hg.exe
- 只要我这样做,客户端就会显示“命令已成功完成”。
=== 更新4 ===
看来我不是唯一遇到这个问题的人。我之前在SO上看到过这个问题,但当时它与我无关。然而,现在我也遇到了同样的问题:Mercurial over ssh client and server on Windows 那个问题没有解决(两年前),所以我应该继续保持这个问题的开放状态吗?