C# 使用ssh.net从ssh服务器检索数据时出错
当我尝试连接到SSH服务器时(在本例中,SSH服务器是Dell服务器上的iDRAC),我不断收到以下错误: 我找到的所有东西都引用了SCP,但我没有使用SCP,因为我没有下载文件。我需要在iDRAC上运行命令以获取系统事件日志并将其显示在文本框中。下面的代码由按钮事件处理程序调用(再往下): 以及按钮事件处理程序代码:C# 使用ssh.net从ssh服务器检索数据时出错,c#,ssh.net,C#,Ssh.net,当我尝试连接到SSH服务器时(在本例中,SSH服务器是Dell服务器上的iDRAC),我不断收到以下错误: 我找到的所有东西都引用了SCP,但我没有使用SCP,因为我没有下载文件。我需要在iDRAC上运行命令以获取系统事件日志并将其显示在文本框中。下面的代码由按钮事件处理程序调用(再往下): 以及按钮事件处理程序代码: private void BtnGetSel_Click(object sender, EventArgs e) { RemoteHost
private void BtnGetSel_Click(object sender, EventArgs e)
{
RemoteHost = TxtHostName.Text;
UserName = TxtUserName.Text;
PassWord = TxtPassWord.Text;
SshCommand = "racadm getsel -E";
ConnectSSH(RemoteHost, UserName, PassWord, SshCommand, out ServerResponse);
LblServerResponse.Text = ServerResponse;
}
由于iDRAC CLI的限制,我求助于使用plink.exe(PuTTY的一部分)通过SSH连接到它。我认为问题在于,您无法修改iDRAC上的sshd_config文件(它们将其锁定,因此出于安全原因,您无法访问底层文件系统)。Plink允许我做我想做的事情,但PuTTY需要成为应用程序安装过程的一部分。您必须提供身份验证方法。我不确定,但我认为您应该指定身份验证方法:var methods=new List();方法.添加(新密码AuthenticationMethod(UserName,PassWord);var con=new ConnectionInfo(RemoteHost,Port,UserName,methods.ToArray());使用(var client=new SftpClient(con)){client.Connect();}您可以在库的文档中看到它的用法:Plink允许您对SSH.NET不允许的情况做什么?它允许我登录iDRAC而不会出现问题。iDRAC只不过是linux的一个小版本,但几乎不可能访问基础操作系统和更改设置,例如sshd_配置文件。什么“问题”你对SSH.NET有什么看法?你看到我上面的评论了吗?它没有解决你的“问题”吗?
public string ConnectSSH(string RemoteHost, string UserName, string PassWord, string sshCommand, out string ServerResponse)
{
using (var client = new SshClient(RemoteHost, 22, UserName, PassWord))
{
client.Connect();
var cmd = client.CreateCommand(sshCommand);
var asyncResult = cmd.BeginExecute();
var outputReader = new StreamReader(cmd.OutputStream);
string output;
while (!asyncResult.IsCompleted)
{
output = outputReader.ReadToEnd();
ServerResponse = output;
}
output = outputReader.ReadToEnd();
ServerResponse = output;
client.Disconnect();
return ServerResponse;
}
}
private void BtnGetSel_Click(object sender, EventArgs e)
{
RemoteHost = TxtHostName.Text;
UserName = TxtUserName.Text;
PassWord = TxtPassWord.Text;
SshCommand = "racadm getsel -E";
ConnectSSH(RemoteHost, UserName, PassWord, SshCommand, out ServerResponse);
LblServerResponse.Text = ServerResponse;
}