Предоставление ввода/подкоманд команде (cli), выполняемой с помощью SSH.NET SshClient.RunCommand

Я создал программу, используя библиотеку Renci SSH.NET. Он отправляет все команды и нормально читает результат. Однако, когда я отправляю команду ниже:

client.RunCommand("cli");

Программа зависает на этой строке на неопределенное время.

Любое объяснение происходящему?

cli — это команда, используемая на коммутаторах/маршрутизаторах Juniper.


person ZalimCode    schedule 26.08.2019    source источник


Ответы (1)


Насколько я знаю, cli - это своего рода оболочка/интерактивная программа. Итак, я предполагаю, что вы пытались сделать что-то вроде:

client.RunCommand("cli");
client.RunCommand("some cli subcommand");

Это неверно. cli будет продолжать ждать подкоманд и никогда не выйдет, пока вы явно не закроете его соответствующей командой (например, exit). А после выхода сервер попытается выполнить cli subcommand как отдельную команду верхнего уровня, но тоже потерпит неудачу.


Вы должны подать подкоманду cli на вход команды cli. Но SSH.NET, к сожалению, не поддерживает предоставление ввода с интерфейсом SshClient.RunCommand/SshClient.CreateCommand. См. раздел Разрешить запись в SshCommand.


Есть два решения:

person Martin Prikryl    schedule 27.08.2019
comment
Спасибо. ShellStream отлично работает в случае подкоманд - person ZalimCode; 28.08.2019