无法在 Cisco WLC 上使用 SSH.NET 执行命令

Cannot execute command with SSH.NET on Cisco WLC

正在尝试使用 SSH.NET 连接到 Cisco 无线控制器并向其添加 mac 地址。当我调试我的代码时,我在客户端的 IsConnected 属性 上得到一个 true,但是当我登录到控制器本身并执行“S​​how loginsession”时,我没有看到列出假定的连接。

此外,当我到达 var result = client.RunCommand(comman.ToString()).Result; 时,代码只是挂起,根本没有任何响应。离开几分钟,没有超时或 return 任何类型的错误。

执行上述行时的 PuTTY 会话图片

我们使用什么 "login as".

并不重要
public WebAPIEndPoint Put(WebAPIEndPoint console)
{
    var auth = new PasswordAuthenticationMethod("UserName", "Password");
    var connectionInfo = new ConnectionInfo(hostIP, 22, "UserName", auth);

    using (var client = new SshClient(connectionInfo))
    {
        client.Connect();

        var command =
            client.CreateCommand("config macfilter add 00:17:ab:ea:d4:aa 5 0 Testing1234");

        var result = client.RunCommand(comman.ToString()).Result;

        Console.WriteLine(result);

        client.Disconnect();

        return console;
    }
}

当运行 plink user@host config macfilter add 00:17:ab:ea:d4:aa 5 0 Testing1234时,我得到:

FATAL ERROR: Server refused to start a shell/command.

您的服务器似乎不支持 SSH“exec”通道。所以你不能使用 CreateCommand/RunCommand.

您必须使用“shell”频道(SshClient.CreateShellSshClient.CreateShellStream)。这通常不推荐用于命令自动化。 SSH.NET 更是如此,它甚至不允许您关闭“shell”频道的伪终端。这会带来许多令人讨厌的副作用,尤其是 Linux 上的“智能”shells。但是对于像您这样的设备,它可能是可以忍受的,也是唯一的解决方案。

ShellStream shellStream = client.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
shellStream.Write("username\n");
shellStream.Write("password\n");
shellStream.Write("config macfilter add 00:17:ab:ea:d4:aa 5 0 Testing1234\n");