【问题标题】:SSH.NET RunCommand To Save Command Output to FileSSH.NET RunCommand 将命令输出保存到文件
【发布时间】:2013-12-05 01:58:22
【问题描述】:

我正在尝试通过 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?如果我使用相同的凭据通过 putty 运行它,它工作得非常好。

编辑(工作代码):

我做了更多的尝试,发现以下方法可行:

// 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();

虽然可行,但我仍然不明白这里到底发生了什么。谁能解释一下?

【问题讨论】:

    标签: c# ssh stdout ssh.net runcommand


    【解决方案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;
                }
    

    【讨论】:

    • 感谢您的输入,我从中提取了一些信息并使其适用于我的代码。我仍然不明白为什么它不起作用。
    • 如果有帮助,请给答案点赞以表示感谢。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2013-03-12
    • 2014-08-09
    • 1970-01-01
    • 2021-02-01
    • 2022-01-17
    • 2011-12-31
    相关资源
    最近更新 更多