Thursday, April 14, 2022

[SOLVED] Providing input/subcommands to a command (cli) executed with SSH.NET SshClient.RunCommand

Issue

I created a program using Renci SSH.NET library. Its sending all the commands and reading the result normally. However, when I send the command below:

client.RunCommand("cli");

The program hangs on this line indefinitely.

Any explanation of what is happening?

The cli is a command is used on Juniper switches/routers.


Solution

AFAIK, cli is a kind of a shell/interactive program. So I assume you have tried to do something like:

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

That's wrong. cli will keep waiting for subcommands and never exit, until you explicitly close it with a respective command (like exit). And after it exits, the server will try to execute the cli subcommand as a separate top-level command, failing too.


You have to feed the "cli subcommand" to the input of the cli command. But SSH.NET unfortunately does not support providing an input with the SshClient.RunCommand/SshClient.CreateCommand interface. See Allow writing to SshCommand.


There are two solutions:



Answered By - Martin Prikryl
Answer Checked By - David Marino (WPSolving Volunteer)