Самый простой способ взаимодействия с сеансом SSH с компьютера с Windows? - PullRequest
1 голос
/ 21 декабря 2011

Мне нужно написать приложение на машине с Windows (должно быть Windows, потому что машина выполняет другие операции с Windows), которое взаимодействует с двумя разными модулями Tandberg через ssh одновременно.Наблюдение за потоком их консоли и реагирование на определенные события.Мне нужно будет хранить некоторую информацию в переменных и сравнивать между этими двумя различными сессиями ssh, или я бы просто использовал несколько быстрых сценариев securecrt.

Я мог бы довольно легко заставить его работать в php (cli) - это одинязык я знаю, но явно не идеал для этого проекта.Я довольно хорошо разбираюсь в поиске новых языков, думаю, я мог бы сделать это в .net / c # - есть ли у кого-нибудь предпочтительная библиотека ssh .net, которая не стоит нескольких сотен долларов?Я открыт для любых других предложений для достижения этой цели.

Ответы [ 3 ]

1 голос
/ 13 января 2012

Я успешно использовал plink.exe для отправки команд в Linux и получения текстовых результатов этих команд.

Следующее - это все, что вы хотите:

    public string ExecuteCmd()
    {
        try
        {
            string strReturn = "";
            string param = "";
            StreamReader standerOut;

            Process p = new Process();
            p.StartInfo.FileName = @"plink.exe";

            if (this.pass.Length == 0 || this.user.Length == 0 || this.host.Length == 0 || this.cmd.Length == 0)
            {
                throw new Exception("SSHClient: Invalid parameteres for SSHClient.");
            }

            param = "-ssh -pw " + this.pass + " " + this.user + "@" + this.host + " " + this.cmd;

            string cd = Environment.CurrentDirectory;

            if (File.Exists("plink.exe") == false)
            {
                throw new Exception("SSHClient: plink.exe not found. Make sure plink.exe is in the same folder as YOUR EXE.");
            }
            else
            {
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.Arguments = param;

                p.Start();
                standerOut = p.StandardOutput;

                while (!p.HasExited)
                {
                    if (!standerOut.EndOfStream)
                    {
                        strReturn += standerOut.ReadLine() + Environment.NewLine;
                        //textBox2.SelectionStart = textBox1.Text.Length;
                        //textBox2.ScrollToCaret();
                    }

                    // Application.DoEvents();
                }                    
            }

            return strReturn;
        }
        catch (Exception exp)
        {
            throw new Exception("SSHClient:", exp);
        }
    }
1 голос
/ 13 января 2012

Я также использовал PLink для этого, но если вы хотите избежать запуска другого процесса, попробуйте SSH.NET: http://sshnet.codeplex.com/.

0 голосов
/ 21 декабря 2011

В php вы можете использовать библиотеку SSHv2: http://php.net/manual/en/book.ssh2.php

Для чтения консоли используйте ssh2_fetch_stream, а для выполнения команд используйте ssh2_exec.

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