Reputation: 373
I'm trying to send a simple command over SSH using SSH.NET. Even the simplest test code fails. Here is a snippet.
using (var ssh = new SshClient("ip", port, "username", "password"))
{
ssh.Connect();
while (true)
{
var result = ssh.RunCommand("AT").Execute();
Console.Out.WriteLine(result);
}
}
The AT
command should echo back OK but doesn't. Instead I receive a custom timeout message issued by the SSH target. I see the device name in the timeout message which corresponds to the prompt it uses and from that i can conclude that the login works (also tested with various SSH programs) but the command itself is not executed. I tried adding \n
and \r\n
to the commands but to no results. What am I doing wrong?
Edit 1:
output from result is \r\nCommand Line Interface\r\nDeviceName> Custom idle timeout
I think the line endings are converted to Windows ones by Visual Studio.
Edit 2:
Using Plink plink.exe username@ip -pw password "AT" > log.txt
results in the same output as Visual Studio. Plink waits till timeout and terminates and log.txt
contains \r\nCommand Line Interface\r\nDeviceName> Custom idle timeout
.
Using PuTTY I see that
Using username "username".
username@host's password:
Entering character mode
Escape character is '^]'.
Command Line Interface
DeviceName>
is written before you can start entering commands. Might it be that the command is entered before the host is ready to receive it and as a result the command hangs until some reaction comes?
Upvotes: 3
Views: 4335
Reputation: 202088
Your server obviously does not support the SSH "exec" channel that is used behind the SSH.NET SshClient.RunCommand
method and PLink's plink.exe command
syntax.
Or actually it does support it, but incorrectly. It seems to start an interactive session (a shell), instead of executing the command.
To confirm this assumption, try this with PLink:
echo AT| plink username@ip -pw password > log.txt
If that works, you may need to use the SshClient.CreateShell
(SSH "shell" channel") and write the command to its input stream, instead of using the SshClient.RunCommand
. While this is generally a wrong approach, you need to take this approach due to your broken server.
A similar question for Python/Paramiko:
Executing command using Paramiko exec_command on device is not working.
Upvotes: 1