2015-11-04 25 views
1

我有一个运行在Unix服务器上的脚本(在Solaris上是精确的)。该脚本使用ftp实用程序来调整大型机服务器中的文件,然后将它们传送到Unix服务器。无法使用C#和SSH.NET在Windows服务器上运行Unix服务器中的用户脚本

最近,我正在尝试使用Windows窗体和C#开发Windows桌面应用程序。我正尝试使用codeplex提供的SSH.NET库。问题是,每当我从应用程序运行正常的Unix命令时,它就会运行,但是当我尝试运行脚本时,它不起作用。我检查了连接并且应用程序已正确连接到服务器。我都用了下面的方法,但没有运气: -

using (ssh client = new SshClient("Ip", "username", "password")) 
{ 
    client.Connect(); 
    SshCommand cmd = client.RunCommand("script"); 
    client.Disconnect(); 
} 

using (ssh client = new SshClient("hostnameOrIp", "username", "password")) 
{ 
    client.Connect(); 
    SshCommand cmd = client.createCommand("script"); 
    cmd.execute(); 
    client.Disconnect(); 
} 

如果有人点我朝着正确的方向这将是一个巨大的帮助。

编辑: - 使用完整路径运行脚本已经工作,因为被调用的非交互式shell在加载时不会读取/ etc/profile/env变量。我会尝试建议的其他选项,并在出现问题时编辑帖子。

+0

*它不起作用*:这是什么意思?它不运行?或者运行失败?当你试图运行它时,输出是什么? –

+0

没有输出。输出应该是有问题的文件,在经过一些调整后从大型机服务器传输到nix服务器。如果脚本失败,则文件不会被传输,并且没有其他输出。不过,我可以检查stderr并获得一些洞察。我有机会的时候会做这件事。 – KChow

回答

0

您的问题非常模糊。

但首先,我会尝试的是添加一个路径到脚本。绝对(/home/user/script)或相对(./script)。

* nix shell默认情况下不会在当前工作目录(本例中为主目录)中查找可执行文件。如果您的PATH中有.,他们只会找到它们。

请注意,RunCommand使用非交互式会话。它可能与您在SSH终端中使用的交互式会话有不同的环境(PATH)。不同组的启动脚本用于交互式和非交互式会话。

+0

scrpt在我的箱子里。它可以从我在nix服务器上的任何路径访问。所以,理想情况下,我应该能够在使用凭据连接到服务器时运行脚本。我在这里错过了什么吗? – KChow

+0

你真的尝试完整路径吗? 'RunCommand'使用非交互式会话。它可能与您在SSH终端中使用的交互式会话有不同的环境('PATH')。 –

+0

它使用完整路径。谢谢 !! – KChow

1

您需要调试您的unix脚本。将脚本修改为将stderr管道化为文本文件,并查看它说的内容。例如,脚本可能依赖于使用ssh.net运行时所改变的环境属性

+0

谢谢。我去做。如果有,解决方法是什么? – KChow

+0

这取决于脚本。我建议你发布一个新的问题,其中包含有关脚本如何在ssh –

+0

下失败的详细信息。但是我真正想问的是,是否有任何固有属性或方法来运行使用c#环境变量或ssh .net lib的用户脚本? – KChow

0

请确保用户的默认路径正确并且路径中存在脚本。为了调试最后的命令/脚本运行/退出状态,你可以再次运行shell命令echo $?通过C#ssh客户端获取有关错误的详细信息。这可能会提供一些有关错误的见解

+0

我这样做,退出状态是非零。脚本失败。我还没有机会检查stderr。我希望这给了我一些线索。 – KChow

+0

与该退出代码,我们可以得到关于错误类型的线索。 – Venkatesh

相关问题