2011-03-26 52 views
4

我打电话cmd文件调用ssh与Linux机器互相通信。我使用.NET Process类来完成此操作。但是,Windows服务调用中被调用时失败,以下错误:当我启动应用程序控制台应用程序ssh在windows服务中被调用时失败

C:\test>ssh -o StrictHostKeyChecking=no -i private_linux_key [email protected] "ls" 
     0 [main] ssh 9496 fhandler_base::dup: dup(some disk file) failed, handle 0, Win32 error 6 
dup() in/out/err failed 

一切正常。

这种失败的可能原因以及如何解决这个问题?

编辑所有Windows服务需要做的 - 莫名其妙的Linux机器上杀了预定义的守护

感谢

编辑

类似的问题描述有:http://www.velocityreviews.com/forums/t714254-executing-commands-from-windows-service.html

+0

我们遇到了同样的问题。我们编写了一个程序来自动创建DOS批处理文件并执行它们。该程序负责标准输入,输出和错误。更具体地说,它创建一个批处理文件,它调用sh.exe(msysgit的一部分)来执行BASH shell脚本。在shell脚本中,我们使用ssh命令,它会返回与您非常相似的错误消息。 – 2011-07-22 08:36:00

回答

5

也许这个帖子可以节省一些人的时间来解决类似的问题。我终于找到了适合我的解决方案。这是ssh -n关键

所以不是

ssh -o StrictHostKeyChecking=no -i private_linux_key [email protected] "ls" 

我用

ssh -n -o StrictHostKeyChecking=no -i private_linux_key [email protected] "ls" 

它仍然看起来像一个神奇的,但它的作品!

+0

它适用于我们的程序,它处理自己的标准输入,输出和错误。 – 2011-07-22 08:39:56

+0

标志-T很方便地抑制ssh的错误消息,它不能分配伪终端。所以它可能会变成:ssh -n -T – 2011-07-22 08:46:59

+0

确切地说,它的工作原理!..但在我的情况下,我无法轻易改变参数。需要了解差异 – 2011-10-03 15:36:11

0

不它是一个访问凭证的问题?

当您将程序作为控制台应用程序运行时,您正在使用当前登录用户的访问权限。但是,Windows服务在特殊用户帐户(通常是“SYSTEM”)中执行,因此没有被授予相同的访问权限。

+0

不。我试图在不同的帐户下运行服务,包括我的Windows凭据,总是有相同的结果 – Roman 2011-03-26 15:15:59