为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令
Providing subcommands to a command (sudo/su) executed with SSH.NET SshClient.CreateShellStream
我正在尝试使用 Renci SSH.NET 从 C# Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本。我要运行一个接一个的脚本。但不知道如何 运行 脚本并读取输出并将其存储在标签中。
我试过下面的代码,但无法一行接一行地传递多个命令。
SshClient sshclient = new SshClient("host", UserName, Password);
sshclient.Connect();
ShellStream stream = sshclient.CreateShellStream("commands", 80, 24, 800, 600, 1024);
public StringBuilder sendCommand(string customCMD)
{
StringBuilder answer;
var reader = new StreamReader(stream);
var writer = new StreamWriter(stream);
writer.AutoFlush = true;
WriteStream(customCMD, writer, stream);
answer = ReadStream(reader);
return answer;
}
private void WriteStream(string cmd, StreamWriter writer, ShellStream stream)
{
writer.WriteLine(cmd);
while (stream.Length == 0)
{
Thread.Sleep(500);
}
}
private StringBuilder ReadStream(StreamReader reader)
{
StringBuilder result = new StringBuilder();
string line;
while ((line = reader.ReadLine()) != null)
{
result.AppendLine(line);
}
return result;
}
我正在尝试运行以下命令
sudo su - wwabc11
whoami
cd /wwabc11/batch/bin/
pwd
如何运行一个接一个地执行命令并读取输出信息?谢谢。
只需将"commands"写入StreamWriter
即可。
writer.WriteLine("sudo su - wwabc11");
writer.WriteLine("whoami");
// etc
另见 。
但请注意,使用 CreateShellStream
("shell" 频道)并不是自动执行命令的正确方法。您应该使用 CreateCommand
/RunCommand
("exec" 频道)。虽然 SSH.NET 限制 API 到 "exec" 通道不支持为以这种方式执行的命令提供输入。而 whoami
和其他的实际上是 sudo
/su
命令的输入。
一个解决方案是在其命令行上向 su
提供命令,例如:
sudo su - wwabc11 -c "whoami ; cd /wwabc11/batch/bin/ ; pwd"
有关使用 CreateCommand
执行命令并读取其输出的代码示例,请参阅 。
我正在尝试使用 Renci SSH.NET 从 C# Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本。我要运行一个接一个的脚本。但不知道如何 运行 脚本并读取输出并将其存储在标签中。 我试过下面的代码,但无法一行接一行地传递多个命令。
SshClient sshclient = new SshClient("host", UserName, Password);
sshclient.Connect();
ShellStream stream = sshclient.CreateShellStream("commands", 80, 24, 800, 600, 1024);
public StringBuilder sendCommand(string customCMD)
{
StringBuilder answer;
var reader = new StreamReader(stream);
var writer = new StreamWriter(stream);
writer.AutoFlush = true;
WriteStream(customCMD, writer, stream);
answer = ReadStream(reader);
return answer;
}
private void WriteStream(string cmd, StreamWriter writer, ShellStream stream)
{
writer.WriteLine(cmd);
while (stream.Length == 0)
{
Thread.Sleep(500);
}
}
private StringBuilder ReadStream(StreamReader reader)
{
StringBuilder result = new StringBuilder();
string line;
while ((line = reader.ReadLine()) != null)
{
result.AppendLine(line);
}
return result;
}
我正在尝试运行以下命令
sudo su - wwabc11
whoami
cd /wwabc11/batch/bin/
pwd
如何运行一个接一个地执行命令并读取输出信息?谢谢。
只需将"commands"写入StreamWriter
即可。
writer.WriteLine("sudo su - wwabc11");
writer.WriteLine("whoami");
// etc
另见
但请注意,使用 CreateShellStream
("shell" 频道)并不是自动执行命令的正确方法。您应该使用 CreateCommand
/RunCommand
("exec" 频道)。虽然 SSH.NET 限制 API 到 "exec" 通道不支持为以这种方式执行的命令提供输入。而 whoami
和其他的实际上是 sudo
/su
命令的输入。
一个解决方案是在其命令行上向 su
提供命令,例如:
sudo su - wwabc11 -c "whoami ; cd /wwabc11/batch/bin/ ; pwd"
有关使用 CreateCommand
执行命令并读取其输出的代码示例,请参阅