SSH.NET RunCommand для сохранения вывода команды в файл

Я пытаюсь запустить команду на удаленном сервере через SSH.

Мне нужен результат выполнения команды для сохранения в файле на этом удаленном сервере.

Я пытался сделать это следующим образом

// ssh is the SshClient which is already set up
ssh.Connect();
ssh.RunCommand("echo 1 > C:\test.csv"); //Doesn't create a file
ssh.Disconnect();

Почему это не работает с SSH.NET? Если я запустил это через замазку, используя те же учетные данные, он будет работать отлично.

РЕДАКТИРОВАТЬ (рабочий код):

Я немного поигрался и обнаружил, что работает следующее:

// ssh is the SshClient which is already set up
ssh.Connect();
var shell = ssh.CreateShellStream("cmd.exe", 80, 24, 800, 600, 1024);
var reader = new StreamReader(shell);
var writer = new StreamWriter(shell);
writer.AutoFlush = true;

while (!shell.DataAvailable)
    System.Threading.Thread.Sleep(1000); //This wait period seems required

writer.WriteLine("echo 1 > C:\test.csv");

while (!shell.DataAvailable)
    System.Threading.Thread.Sleep(1000); //This wait period seems required

ssh.Disconnect();

Хотя это работает, я все еще не понимаю, что здесь происходит на самом деле. Может кто-нибудь объяснить?


person loopback128    schedule 04.12.2013    source источник


Ответы (1)


Попробуйте эту функцию: просто сохраните результат в переменную или запишите результат с помощью StreamWriter

private void writeMe()
{
    using (StreamWriter sw = new StreamWriter(filename)
    {
        string result = eSshCom(command);
        sw.WriteLine(result);
    } 
} 



private string eSshCom(string getCommand)
            {
            this.res = "";

            var connectionInfo = new KeyboardInteractiveConnectionInfo(ipaddress, 22, username);

            connectionInfo.AuthenticationPrompt += delegate(object asender, AuthenticationPromptEventArgs xe)
            {
                foreach (var prompt in xe.Prompts)
                    {
                    if (prompt.Request.Equals("Password: ", StringComparison.InvariantCultureIgnoreCase))
                        {
                        prompt.Response = password;
                        }
                    }
            };

            using (var ssh = new SshClient(connectionInfo))
                {
                    ssh.Connect();
                    var cmd = ssh.RunCommand(getCommand);
                    this.res = cmd.Result;
                    ssh.Disconnect();

                }
            return this.res;
            }
person vahnevileyes    schedule 04.12.2013
comment
Спасибо за ввод, я взял его по частям и заставил его работать для своего кода. Я до сих пор не очень понимаю, почему это не работает. - person loopback128; 04.12.2013
comment
Если это поможет, дайте ответы положительно. Спасибо - person vahnevileyes; 05.12.2013