SSH终端在一个使用ASP.NET的web应用程序

本文关键字:ASP NET 应用程序 web 一个 终端 SSH | 更新日期: 2023-09-27 17:54:50

您好,我正在创建一个web应用程序,该应用程序具有类似于Putty的工作SSH终端。我使用SSH库作为处理SSH流的一种手段。然而,有一个问题。我可以登录到Cisco 2950并输入命令,但它显示的是混乱的一行。另外,当我尝试"conf"时,它会进入配置终端,但随后你不能做任何事情,并且会弹出"Line has invalid autocommand"?

这是我到目前为止的代码:

与库交互的SSH.cs。

public class SSH
{
    public string cmdInput { get; set; }
    public string SSHConnect()
    {
        var PasswordConnection = new PasswordAuthenticationMethod("username", "password");
        var KeyboardInteractive = new KeyboardInteractiveAuthenticationMethod("username");
        // jmccarthy is the username
        var connectionInfo = new ConnectionInfo("10.56.1.2", 22, "username", PasswordConnection, KeyboardInteractive);
        var ssh = new SshClient(connectionInfo);
        ssh.Connect();
        var cmd = ssh.CreateCommand(cmdInput);
        var asynch = cmd.BeginExecute(delegate(IAsyncResult ar)
        {
            //Console.WriteLine("Finished.");
        }, null);
        var reader = new StreamReader(cmd.OutputStream);
        var myData = "";
        while (!asynch.IsCompleted)
        {
            var result = reader.ReadToEnd();
            if (string.IsNullOrEmpty(result))
                continue;
            myData = result;
        }
        cmd.EndExecute(asynch);
        return myData;
    } 
}

这是.aspx.cs中的代码,用于在网页上显示代码。

protected void CMD(object sender, EventArgs e)
    {
        SSH s = new SSH();
        s.cmdInput = input.Text;
        output.Text = s.SSHConnect();
    }

SSH终端在一个使用ASP.NET的web应用程序

查看SSH代码中的测试用例。. NET库中,您可以使用RunCommand方法而不是CreateCommand,后者将同步处理命令。我还为SshClient ssh对象添加了一个using块,因为它实现了iDisposable。记得调用Disconnect,这样你就不会被打开的连接卡住。

同样,SshCommand.Result属性(在下面的command.Result调用中使用)封装了从OutputSteam提取结果的逻辑,并使用this._session.ConnectionInfo.Encoding使用适当的编码读取OutputStream。这可以帮助你处理你收到的混乱的邮件。

下面是一个例子:

    public string SSHConnect() {
        var PasswordConnection = new PasswordAuthenticationMethod("username", "password");
        var KeyboardInteractive = new KeyboardInteractiveAuthenticationMethod("username");
        string myData = null;
        var connectionInfo = new ConnectionInfo("10.56.1.2", 22, "username", PasswordConnection, KeyboardInteractive);
        using (SshClient ssh = new SshClient(connectionInfo)){
            ssh.Connect();
            var command = ssh.RunCommand(cmdInput);
            myData = command.Result;
            ssh.Disconnect();
        }
        return myData;
    }