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:
Use the appropriate syntax of the server's shell to generate the input on the server, like:
client.RunCommand("echo \"cli subcommand\" | cli");
Or use a shell session (what is otherwise a not recommended approach for automating a command execution).
Use
SshClient.CreateShellStream
orSshClient.CreateShell
and send the commands to its input:"cli\n" + "cli subcommand\n"
For a sample code see Providing subcommands to a command (sudo/su) executed with SSH.NET SshClient.CreateShellStream or C# send Ctrl+Y over SSH.NET.
Answered By - Martin Prikryl Answer Checked By - David Marino (WPSolving Volunteer)