You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SSH.NET连接戴尔iDRAC时遇认证异常问题求助

解决iDRAC SSH认证失败:未找到合适的认证方法问题

看起来你遇到的问题是戴尔iDRAC的SSH服务器不接受Renci.SshNet默认的密码认证方式,而是要求使用keyboard-interactive认证——即使你只是想用密码登录。我之前处理过类似的iDRAC SSH连接问题,下面是具体的解决方案:

第一步:检查iDRAC的SSH配置

先确保你的iDRAC允许密码类的认证:

  • 登录iDRAC的Web管理界面,导航到iDRAC Settings > Network > SSH
  • 确认SSH Authentication下的Password或Keyboard Interactive选项已启用(不同固件版本的标签可能略有不同)
  • 同时确保你的用户账户有SSH访问权限(在用户管理里检查权限设置)

第二步:修改代码适配keyboard-interactive认证

Renci.SshNet的默认SshClient(string host, int port, string user, string pass)构造函数使用的是PasswordAuthenticationMethod,但iDRAC可能不认可这种方式,而是期望交互式的密码输入。我们需要手动指定KeyboardInteractiveAuthenticationMethod并处理认证回调:

修改后的ConnectSSH方法:

public string ConnectSSH(string RemoteHost, string UserName, string PassWord, string sshCommand, out string ServerResponse)
{
    ServerResponse = string.Empty;
    // 创建连接信息,指定使用键盘交互式认证
    var connectionInfo = new ConnectionInfo(RemoteHost, 22, UserName,
        new KeyboardInteractiveAuthenticationMethod(UserName));

    // 处理认证提示,自动填入密码
    ((KeyboardInteractiveAuthenticationMethod)connectionInfo.AuthenticationMethods[0])
        .AuthenticationPrompt += (sender, e) =>
        {
            foreach (var prompt in e.Prompts)
            {
                // 匹配密码输入提示(iDRAC的提示通常包含"Password")
                if (prompt.Request.IndexOf("Password", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    prompt.Response = PassWord;
                }
            }
        };

    using (var client = new SshClient(connectionInfo))
    {
        try
        {
            client.Connect();
            var cmd = client.CreateCommand(sshCommand);
            var asyncResult = cmd.BeginExecute();
            var outputReader = new StreamReader(cmd.OutputStream);

            // 等待命令执行完成并读取输出
            while (!asyncResult.IsCompleted)
            {
                var partialOutput = outputReader.ReadToEnd();
                if (!string.IsNullOrEmpty(partialOutput))
                {
                    ServerResponse += partialOutput;
                }
                // 短暂休眠避免过度占用资源
                System.Threading.Thread.Sleep(100);
            }

            // 读取最后剩余的输出
            var finalOutput = outputReader.ReadToEnd();
            if (!string.IsNullOrEmpty(finalOutput))
            {
                ServerResponse += finalOutput;
            }

            client.Disconnect();
        }
        catch (Exception ex)
        {
            ServerResponse = $"错误信息: {ex.Message}";
        }
        return ServerResponse;
    }
}

额外排查点

如果还是不行,可以试试这些:

  • 升级iDRAC固件:旧版本的固件可能存在SSH认证兼容问题,戴尔官网下载最新稳定版升级
  • 检查防火墙:确认你的客户端机器能访问iDRAC的22端口(可以用telnet <iDRAC-IP> 22测试)
  • 验证账户权限:确保你用的iDRAC账户有执行racadm getsel的权限(管理员账户通常没问题)

内容的提问来源于stack exchange,提问作者Ed Swafford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:32:36