简体   繁体   中英

SSH.NET is not executing command on device

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?

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") instead of 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 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM