【问题标题】:C# Error using ssh.net to retrieve data from SSH server [duplicate]使用 ssh.net 从 SSH 服务器检索数据的 C# 错误 [重复]
【发布时间】:2021-04-06 16:19:50
【问题描述】:

当我尝试连接到 SSH 服务器(在这种情况下,SSH 服务器是戴尔服务器上的 iDRAC)时,我不断收到以下错误:

Renci.SshNet.Common.SshAuthenticationException
  HResult=0x80131500
  Message=No suitable authentication method found to complete authentication (publickey,keyboard-interactive).

我找到的所有内容都引用了 SCP,但我没有使用 SCP,因为我没有下载文件。我需要在 iDRAC 上运行命令以获取系统事件日志并将其显示在文本框中。下面的代码由按钮事件处理程序调用(再往下):

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;
        }

【问题讨论】:

  • 您必须提供身份验证方法。 See here
  • 我不确定,但我认为您应该指定身份验证方法: var methods = new List(); methods.Add(new PasswordAuthenticationMethod(UserName, PassWord); var con = new ConnectionInfo(RemoteHost, Port, UserName, methods.ToArray()); using (var client = new SftpClient(con)) { client.Connect(); }
  • 您可以在该库的文档中查看用法:github.com/sshnet/SSH.NET/#usage

标签: c# ssh.net


【解决方案1】:

由于 iDRAC CLI 的限制,我求助于使用 plink.exe(PuTTY 的一部分)通过 SSH 连接到它。我认为问题在于您无法修改 iDRAC 上的 sshd_config 文件(它们将其锁定,因此出于安全原因您无法访问底层文件系统)。 Plink 允许我做我想做的事,但 PuTTY 需要成为应用程序安装过程的一部分。

【讨论】:

  • Plink 允许您做什么,而 SSH.NET 不允许?
  • 它让我可以毫无问题地登录 iDRAC。 iDRAC 只不过是 linux 的迷你版,但几乎不可能访问底层操作系统和更改设置,例如 sshd_config 文件。
  • 您对 SSH.NET 有什么“问题”?你看到我上面的评论了吗?它没有解决您的“问题”吗?
猜你喜欢
  • 2018-11-03
  • 2020-12-10
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多