SSH.NET не выполняет команду на устройстве

Я пытаюсь отправить простую команду через SSH, используя SSH.NET. Даже самый простой тестовый код не пройден. Вот фрагмент.

using (var ssh = new SshClient("ip", port, "username", "password"))
{
    ssh.Connect();
    while (true)
    {
        var result = ssh.RunCommand("AT").Execute(); 
        Console.Out.WriteLine(result);
    }
}

AT команда должна вернуть эхо, но нет. Вместо этого я получаю пользовательское сообщение о тайм-ауте, выданное целью SSH. Я вижу имя устройства в сообщении тайм-аута, которое соответствует приглашению, которое оно использует, и из этого я могу заключить, что вход в систему работает (также проверено с различными программами SSH), но сама команда не выполняется. Я пытался добавить \n а также \r\n к командам, но безрезультатно. Что я делаю неправильно?

Редактировать 1: вывод из результата \r\nCommand Line Interface\r\nDeviceName> Custom idle timeout Я думаю, что окончания строк преобразуются в Windows с помощью Visual Studio.

Редактировать 2: Использование Plink plink.exe username@ip -pw password "AT" > log.txt приводит к тому же выводу, что и Visual Studio. Plink ждет до истечения времени ожидания и завершается и log.txtсодержит \r\nCommand Line Interface\r\nDeviceName> Custom idle timeout,

Используя PuTTY, я вижу, что

Using username "username".
username@host's password:

Entering character mode
Escape character is '^]'.

Command Line Interface
DeviceName> 

написано до того, как вы сможете начать вводить команды. Может быть, команда введена до того, как хост готов ее принять, и в результате команда зависает до тех пор, пока не произойдет какая-то реакция?

1 ответ

Решение

Ваш сервер, очевидно, не поддерживает канал exec SSH, который используется за SSH.NET SshClient.RunCommand метод и PLink's plink.exe command синтаксис.

Или на самом деле это поддерживает, но неправильно. Кажется, для запуска интерактивной сессии (оболочки) вместо выполнения команды.

Чтобы подтвердить это предположение, попробуйте это с помощью PLink:

echo AT| plink username@ip -pw password > log.txt

Если это работает, вам может понадобиться SshClient.CreateShell (SSH "оболочка" канал ") вместо SshClient.RunCommand, Хотя это, как правило, неправильный подход, вы должны использовать этот подход из-за вашего сломанного сервера.

Другие вопросы по тегам