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?