我正在尝试使用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...");
}
}
}
以下是我得到的输出:
正如您所看到的,我输入了" ls"命令,然后按Enter键。什么都没有回来。我再次按回车键,然后我看到与文件夹中的文件一起提交的命令。我不确定我做错了什么。
更新
我发现如果我两次运行ssh2.ReadResponse()命令,则不会发生这种情况。这告诉我,当我运行ls命令时,我得到2个回复?但是,当我运行" cd .."这个命令停止了(因为我相信没有第二个响应)。我不确定这是如何运作的。