无法使用C#和SSH.NET从Windows运行Unix服务器中的用户脚本

时间:2015-11-04 20:15:52

标签: c# .net ssh ssh.net

我在Perl中有一个在Unix服务器上运行的脚本(确切地说是Solaris)。该脚本使用ftp实用程序来调节大型机服务器中的文件,然后将它们传输到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变量。我会尝试建议的其他选项,如果有效的话可以编辑帖子。

3 个答案:

答案 0 :(得分:1)

您需要调试unix脚本。修改脚本以将stderr管道传输到文本文件,并查看它的内容。例如,脚本可能依赖于使用ssh.net

运行时更改的环境属性

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你的问题很模糊。

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

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

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