Показать полный вывод оболочки S SH, включая сообщение для входа и приглашение в C# - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь создать простой клиент S SH в C#. Теперь это мой код:

using Renci.SshNet;

public static void Main(string[] args)
{
    AuthenticationMethod method = new PasswordAuthenticationMethod("pi", "raspberry");
    ConnectionInfo connection = new ConnectionInfo("192.168.91.134", "pi", method);
    SshClient client = new SshClient(connection);

    if (!client.IsConnected)
    {
        Console.WriteLine("Not Connected...");
        client.Connect();
    }

    while (true)
    {
        string command = Console.ReadLine();
        SshCommand response = client.RunCommand(command);
        Console.WriteLine(response.Result);
    }

}

Проблема:

  • вот так, он показывает только ответ на отправленную команду. Я хотел бы получить весь вывод, также с пользователем и текущим каталогом (как оболочка classi c S SH).

  • , если я хочу запустить sudo su command, давая пароль, он не работает ... (в будущем я хочу добавить вывод в список и взять ввод из текстовое поле в приложении WinForms)

Заранее благодарю за помощь

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Это моя реализация:

using System;
using System.Threading;
using Renci.SshNet;

public class Program
{
    public static void Main(string[] args)
    {
        SshClient sshClient = new SshClient("192.168.91.134", 22, "pi", "raspberry");

        sshClient.ConnectionInfo.Timeout = TimeSpan.FromSeconds(120);
        sshClient.Connect();

        ShellStream shellStreamSSH = sshClient.CreateShellStream("vt-100", 80, 60, 800, 600, 65536);

        Thread thread = new Thread(() => recvSSHData(shellStreamSSH));

        thread.Start();

        while (true)
        {
            string command = Console.ReadLine();

            shellStreamSSH.Write(command + "\n");
            shellStreamSSH.Flush();
        }
    }

    public static void recvSSHData(ShellStream shellStreamSSH)
    {
        while (true)
        {
            try
            {
                if (shellStreamSSH != null && shellStreamSSH.DataAvailable)
                {
                    string strData = shellStreamSSH.Read();

                    Console.WriteLine(strData);
                }
            }
            catch
            {

            }

            System.Threading.Thread.Sleep(200);
        }
    }
}
1 голос
/ 13 апреля 2020

Если вы хотите реализовать терминальный клиент S SH (например, PuTTY), вам нужно использовать S SH канал "shell".

В S SH. NET используйте SshClient.CreateShell или SshClient.CreateShellStream, а не SshClient.RunCommand.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...