Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用SSH.NET执行多个依赖SSH命令#_C#_.net_Ssh_Putty_Ssh.net - Fatal编程技术网

C# 在C中使用SSH.NET执行多个依赖SSH命令#

C# 在C中使用SSH.NET执行多个依赖SSH命令#,c#,.net,ssh,putty,ssh.net,C#,.net,Ssh,Putty,Ssh.net,我想使用带有SSH.NET库的C#更改SSH内部的目录: SshClient cSSH = new SshClient("192.168.80.21", 22, "appmi", "Appmi"); cSSH.Connect(); Console.WriteLine("current directory:"); Console.WriteLine(cSSH.CreateCommand("pwd").Execute()); Console.WriteLine("change director

我想使用带有SSH.NET库的C#更改SSH内部的目录:

SshClient cSSH = new SshClient("192.168.80.21", 22, "appmi", "Appmi");

cSSH.Connect();

Console.WriteLine("current directory:");
Console.WriteLine(cSSH.CreateCommand("pwd").Execute());

Console.WriteLine("change directory");
Console.WriteLine(cSSH.CreateCommand("cdr abc-log").Execute());

Console.WriteLine("show directory");
Console.WriteLine(cSSH.CreateCommand("pwd").Execute());

cSSH.Disconnect();
cSSH.Dispose();

Console.ReadKey();
但它不起作用。我还检查了以下内容:

Console.WriteLine(cSSH.RunCommand("cdr abc-log").Execute());

但是仍然不起作用。

我相信您希望命令影响后续命令

但是
SshClient.CreateCommand
使用SSH“exec”通道来执行命令。这意味着每个命令都在一个独立的shell中执行,对其他命令没有影响


如果需要以以前的命令影响以后的命令的方式执行命令(如更改工作目录或设置环境变量),则必须在同一通道中执行所有命令。为此,请使用服务器外壳的适当构造。在大多数系统上,可以使用分号:

Console.WriteLine(cSSH.CreateCommand("pwd ; cdr abc-log ; pwd").Execute());
在*nix服务器上,您还可以使用
&&
使以下命令仅在前面的命令成功时执行:

Console.WriteLine(cSSH.CreateCommand("pwd && cdr abc-log && pwd").Execute());

一些不太常见的系统(例如AIX)甚至可能无法在一个“命令行”中执行多个命令。在这些情况下,您可能需要使用shell通道,否则不推荐使用

另外,当其他命令实际上是第一个命令的子命令时,您可能需要不同的解决方案


请参阅。

这就是我所做的,它为我工作:

SshClient sshClient = new SshClient("some IP", 22, "loign", "pwd");
sshClient.Connect();

ShellStream shellStream = sshClient.CreateShellStream("xterm", 80, 40, 80, 40, 1024);

string cmd = "ls";
shellStream.WriteLine(cmd + "; echo !");
while (shellStream.Length == 0)
 Thread.Sleep(500);

StringBuilder result = new StringBuilder();
string line;

string dbt = @"PuttyTest.txt";
StreamWriter sw = new StreamWriter(dbt, append: true);           

 while ((line = shellStream.ReadLine()) != "!")
 {
  result.AppendLine(line);
  sw.WriteLine(line);
 }            

 sw.Close();
 sshClient.Disconnect();
 sshClient.Dispose();
 Console.ReadKey();
命令自动化不建议使用shell通道。shell通道用于实现交互式SSH客户端。