1

这是我的情况。

我正在将 Cruise Control 作为 Windows 服务运行,并试图让它通过 SSH 连接到 BitBucket 上的 Mercurial 存储库。

我很确定一切都配置好(PuttyGen、Pagaent 等)。我正在使用与运行服务相同的帐户远程处理服务器,如果我从命令行发出 hg pull -b ssh://@bitbucket.org// 一切正常。我在 mercurial.ini 中的 ssh 配置中添加了 -v,我可以看到所采取的所有步骤。

如果我从命令提示符运行 CC.NET,那么它构建得很好。在控制台窗口中,我可以从 SSH 操作中看到相同的日志记录。

但是,如果我将 CC.NET 作为服务运行(使用与我登录相同的用户帐户),则对 BitBucket 的调用会超时。我也找不到解决原因的方法。构建日志没有帮助,临时目录中的 ccnet.log 或 ccnet.trace 也没有帮助。我期待其中一个包含来自 SSH 操作的日志记录,但它们没有。

任何人都可以帮忙吗?是否作为服务运行会阻止它连接到 Pagaent(我已经通过将 Pagaent 添加到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 来启动 Pagaent)。当我从命令行进行拉取时,我必须确定一个对话框,但只有一次。现在它作为服务运行,是否正在等待同一个对话框?

接近我的智慧到此为止。

谢谢

4

1 回答 1

3

最后我确实让它工作了。诀窍是在没有密码的情况下创建公钥。当作为服务运行时,解决方案必须是完全非交互式的,而 pagaent.exe 的密码选项则不是。

以下是步骤:

  • 使用 PutTTygen 生成没有密码的安全密钥。如果你真的需要一个,那么你可以将它添加到 mercurial.ini 文件中,但对我来说这点不妥,因为它是显而易见的。

  • 将 mercurial.ini 复制到两个位置:C:\Windows\System32\config\systemprofile 和 C:\Windows\SysWOW64\config\systemprofile。可能只有其中一个是真正需要的,但我没有时间进行实验。第一个是运行 64 位应用程序时系统用户的主目录,32 位应用程序的 SysWOW64 位置。确保如果您和我一样,请保持两个文件同步 - 或者进一步确定哪个是正确的位置。

  • 在两个文件的 [ui] 键下添加类似这一行的内容: ssh = "D:\Program Files\TortoiseHg\TortoisePlink.exe" -ssh -2 -C -batch -v -i "[您的 ppk 文件的路径] " 如果在步骤 1 中创建了密码,请将密码添加到命令的末尾。确保指定的是 TortoisePlink.exe,而不是 Plink.exe。它们都应该在同一个目录中。

  • 从http://technet.microsoft.com/en-gb/sysinternals/bb842062.aspx下载 psexec

  • 运行 d:\PSTools\PsExec.exe -s -i cmd.exe。这将以交互模式打开一个命令行作为系统帐户。

  • 现在做一个 hg pull,或 hg clone 或其他什么。

  • 应弹出一个对话框,其中包含确认消息。这是一次性的事情,也是您必须执行 PsExec 步骤的原因。确定对话框。

现在 cc.net 应该可以使用 SSH 在本地系统帐户下作为服务运行了!

于 2013-10-02T10:06:28.503 回答