C# SSH连接Avocent ACS6000失败:认证及MAC算法问题
问题解决:C# SSH.NET连接Avocent ACS6000的认证与MAC算法问题
问题概述
用C# WinForms结合Renci.SshNet库连接Avocent ACS6000设备时,抛出异常:No suitable authentication method found to complete authentication (publickey,keyboard-interactive)。相同代码连接Windows SSH Server正常;但用CMD的OpenSSH客户端连接该设备时,必须携带-m hmac-sha2-512参数才能成功,不带则出现“Corrupted MAC on input”的MAC校验错误。
解决方案
1. 强制指定SSH.NET使用hmac-sha2-512 MAC算法
Avocent ACS6000可能仅支持特定MAC算法,而SSH.NET默认算法列表未包含hmac-sha2-512,需手动在连接配置中指定。通过ConnectionInfo对象可自定义加密算法集合。
2. 适配设备支持的认证方式
异常提示设备仅支持publickey和keyboard-interactive认证,当前代码使用的简单密码认证不匹配,需添加KeyboardInteractiveAuthenticationMethod处理交互式认证流程(即使设备最终仅验证密码)。
修改后的代码示例
// 构建连接信息,配置认证方式 var connectionInfo = new ConnectionInfo( IPadress, port, username, new KeyboardInteractiveAuthenticationMethod(username), new PasswordAuthenticationMethod(username, password) // 保留密码认证作为备选 ); // 强制设置MAC算法为hmac-sha2-512 connectionInfo.MacAlgorithms.Clear(); connectionInfo.MacAlgorithms.Add("hmac-sha2-512"); sshclient = new SshClient(connectionInfo); try { OutputRichTextBox.AppendText("SSH Conecting..." + Environment.NewLine); sshclient.Connect(); if (sshclient.IsConnected) { OutputRichTextBox.AppendText("Connected to Server" + Environment.NewLine); } else { OutputRichTextBox.AppendText("Ping failed." + Environment.NewLine); } } catch (Exception ex) { // 捕获异常便于排查具体问题 OutputRichTextBox.AppendText($"Error : {ex.Message}" + Environment.NewLine); }
关于Windows默认使用hmac-sha2-512的说明
若要让Windows自带的OpenSSH客户端默认使用该算法,可在用户目录下新建或修改.ssh\config文件,添加如下内容:
Host your-acs6000-ip MACs hmac-sha2-512
但此设置仅对系统自带SSH客户端生效,你的WinForms程序仍需在代码中单独配置——因为SSH.NET库的算法配置独立于系统设置。
内容的提问来源于stack exchange,提问作者Hex
相关产品推荐
相关产品推荐

