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

Unable to run user script in Unix server from Windows using C# and 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 变量。我也会尝试建议的其他选项,如果可行,我会编辑 post。

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

运行 时,这些属性会发生变化

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

你的问题很含糊。

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

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

中有 . 时,他们才会找到它们

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