Не удается выполнить команду с SSH.NET на Cisco WLC

Попытка использовать SSH.NET для подключения к беспроводному контроллеру Cisco и добавления к нему mac-адреса. Когда я отлаживаю свой код, я получаю true в свойстве IsConnected клиента, но когда я вхожу в сам контроллер и выполняю Show loginsession, я не вижу в списке предполагаемое соединение.

Кроме того, когда я добираюсь до var result = client.RunCommand(comman.ToString()).Result;, код просто зависает без ответа. Оставили на несколько минут и не истечет время ожидания или не возвращает какую-либо ошибку.

Изображение сеанса PuTTY при выполнении строки выше введите здесь описание изображения

Неважно, что мы используем для логина.

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 я получаю:

ФАТАЛЬНАЯ ОШИБКА: сервер отказался запускать оболочку/команду.


person XmalevolentX    schedule 18.02.2020    source источник


Ответы (1)


Похоже, ваш сервер не поддерживает канал SSH exec. Таким образом, вы не можете использовать CreateCommand/RunCommand.

Вы должны использовать канал оболочки (SshClient.CreateShell или SshClient.CreateShellStream). Обычно это не рекомендуется для автоматизации команд. Тем более с SSH.NET, который даже не позволяет отключить псевдотерминал для канала оболочки. Это приводит к множеству неприятных побочных эффектов, особенно при использовании смарт-оболочек в Linux. Но с такими устройствами, как ваше, это может быть терпимым и в любом случае единственным решением.

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");
person Martin Prikryl    schedule 20.02.2020