通过SharpSSH向外部Linux服务器执行命令

时间:2015-03-30 19:34:48

标签: c# ssh

我正在尝试使用Tamir.SharpSSH库与远程Linux机器进行通信。我已经能够建立连接,并提交命令。但是,我需要按两次Enter键以查看来自服务器的响应。

这是我正在使用的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows.Forms;
using Tamir.SharpSsh;

namespace SshMultipleConsoles
{
    static class Program
    {

    [DllImport("kernel32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool AllocConsole();

    [DllImport("kernel32.dll")]
    static extern bool AttachConsole(int dwProcessId);
    private const int ATTACH_PARENT_PROCESS = -1;

    [STAThread]
    static void Main()
    {
        AllocConsole();
        AttachConsole(ATTACH_PARENT_PROCESS);

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Form1 x = new Form1();
        Application.Run(x);
        x.Close();

        SshExec ssh = null;
        SshStream ssh2 = null;
        try
        {
            Console.Write("-Connecting...");
            ssh2 = new SshStream(host, username, password);

            ssh2.Prompt = "\n";
            ssh2.RemoveTerminalEmulationCharacters = true;
            Console.Write(ssh2.ReadResponse());

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

                if (command == "exit")
                    break;

                ssh2.Write(command);
                ssh2.ReadResponse();   // UPDATE
                string data = ssh2.ReadResponse();
                Console.Write(data);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        if (ssh2 != null)
        {
            Console.WriteLine("Disconnecting...");
            ssh2.Close();
            Console.WriteLine("OK");
        }

        Console.Write("Press any key to continue...");
    }
}

}

以下是我得到的输出:

enter image description here

正如您所看到的,我输入了" ls"命令,然后按Enter键。什么都没有回来。我再次按回车键,然后我看到与文件夹中的文件一起提交的命令。我不确定我做错了什么。

更新

我发现如果我两次运行ssh2.ReadResponse()命令,则不会发生这种情况。这告诉我,当我运行ls命令时,我得到2个回复?但是,当我运行" cd .."这个命令停止了(因为我相信没有第二个响应)。我不确定这是如何运作的。

0 个答案:

没有答案