С# отправить Ctrl + Y через SSH.NET

В настоящее время я использую SSH.net и пытаюсь подключиться к коммутатору Avaya.

Мой код выглядит так:

using (var client = new SshClient(ip, username, password))
{
    client.Connect();
    //Sending CTRL+Y 
    SshCommand x = client.RunCommand("enable");
    client.Disconnect();
}

Я еще не нашел решения.

Есть ли обходной путь или команда, которую я мог бы использовать для отправки CTRL+Y?


person BlackyGhosty    schedule 12.10.2018    source источник
comment
Вам нужно будет захватить то, что отправляет Ctrl + Y, и отправить его вручную.   -  person BugFinder    schedule 12.10.2018
comment
Как мне это захватить? Извините, я новичок в этом :(   -  person BlackyGhosty    schedule 12.10.2018


Ответы (1)


SSH.NET не поддерживает отправку входных данных для команд, выполняемых с помощью SshClient.RunCommand (канал exec).

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

Кроме того, отправка управляющих последовательностей, таких как Ctrl+Y, более сложна для псевдотерминала. Но опять же, будем надеяться, что оболочка коммутатора достаточно тупая, чтобы просто принять чистый код ASCII для Ctrl+Y, что равно 25 = x19.

ShellStream shellStream = client.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
shellStream.Write("enable\n");
shellStream.Write("\u19");

while (true)
{
    string s = shellStream.Read();
    Console.Write(s);
}
person Martin Prikryl    schedule 12.10.2018