1

我有一个在 Unix 服务器(准确地说是 Solaris)上运行的 Perl 脚本。该脚本使用 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 变量。我也会尝试其他建议的选项,如果可行的话,我会编辑帖子。

4

3 回答 3

1

您需要调试您的 unix 脚本。修改脚本以通过管道将 stderr 传输到文本文件,然后查看它的内容。例如,脚本可能依赖于环境的属性,当您使用 ssh.net 运行它时这些属性会发生变化

于 2015-11-04T20:20:28.380 回答
0

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

于 2015-11-05T05:59:04.603 回答
0

你的问题很模糊。

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

*nix shell 默认不在当前工作目录(本例中的主目录)中查找可执行文件。只有.在您的PATH.

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

于 2015-11-05T07:06:15.053 回答