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代码中的测试用例。. 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;
}