无法使用 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
)。不同的启动脚本集用于交互式和非交互式会话。
我有一个 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
)。不同的启动脚本集用于交互式和非交互式会话。