如何显示shellStream的输出

时间:2015-12-22 12:53:48

标签: c# asp.net

我在asp.net中开发了一个Web应用程序。我使用ssh.net在我的应用程序和Cisco设备之间建立连接。 我使用以下代码:

  1. 连接

        var ip = DropDownList2.SelectedItem.Text;
        var user = txtuser.Text;
        var passw = txtpass.Text;
        var connInfo = new Renci.SshNet.PasswordConnectionInfo(ip, 22, user, passw);
        var sshClient = new Renci.SshNet.SshClient(connInfo);
        try
        {
            sshClient.Connect();
    
  2. 运行命令我使用2路:

    2.1。

            var cmd = sshClient.RunCommand("show user");
    
            Label1.Text = cmd.Result;
    

    它的工作正常与路由器和交换机,但不使用防火墙 为此,我尝试使用 shellStream

    2.2。

             var ss = this.shellStream;
             sshClient.Connect();
             this.shellStream = sshClient.CreateShellStream("dumb", 80, 24, 800, 600, 1024);
    
             Console.WriteLine(SendCommand("enable", ss));
    
             Console.WriteLine(SendCommand(passw, ss));
    
             Console.WriteLine(SendCommand("show looging", ss));
    
  3. 我可以向设备发送多个命令,但我的问题是如何从shellStream显示该命令的结果。 我尝试了类似的东西,但没有工作

    string reslt = Console.ReadLine();
    Label1.Text = Reslt;
    

    我试着像这样混合这两种方式

    this.shellStream = sshClient.CreateShellStream("dumb", 80, 24, 800, 600, 1024);
    
    Console.WriteLine(SendCommand("enable", ss));
    
    Console.WriteLine(SendCommand(passw, ss));
    
    Renci.SshNet.SshCommand cmd;
    
    cmd = sshClient.RunCommand("show logging");
    
    txtenablepass.Text = cmd.Result;
    

    但是没有用,我有这个例外

      

    其他信息:尝试10次后无法打开频道。

    我的问题是如何显示shellStream的输出?

2 个答案:

答案 0 :(得分:0)

我找到的唯一方法是连接然后创建一个读写流并使用它来传递命令和读取输出,所以:

Renci.SshNet.SshClient client = new Renci.SshNet.SshClient(server_name, username, password); client.Connect(); Renci.SshNet.ShellStream stream = client.CreateShellStream("dumb",0 ,0 ,0 ,0 ,1000);

现在您已打开流,您可以编写如下命令:

stream.Write(string command + "\n");

或者这样读:

string temp_string = stream.Read();

只有问题是你需要在读取输出之前在命令期间超时,我使用空“while”直到读取了我的用户名的预期字符串,然后突破它。

答案 1 :(得分:0)

这个问题很老了。但我希望这仍然可以帮助某人。

var connInfo = new Renci.SshNet.PasswordConnectionInfo("<IP>", 22, "<USER>", "<PWD>");
var sshClient = new Renci.SshNet.SshClient(connInfo);

sshClient.Connect();
var stream = sshClient.CreateShellStream("", 0, 0, 0, 0, 0);

// Send the command
stream.WriteLine("echo 'sample command output'");

// Read with a suitable timeout to avoid hanging
string line;
while((line = stream.ReadLine(TimeSpan.FromSeconds(2))) != null)
{
    Console.WriteLine(line);
    // if a termination pattern is known, check it here and break to exit immediately
}
// ...
stream.Close();
// ...
sshClient.Disconnect();