SshNet 使用 ShellStream 读出第一条主机消息

SshNet Read out first Host Message with ShellStream

我在处理 SshNet ShellStream 的输出时遇到问题。这是我的代码:

        Dim shellStream As Stream = sshConnection.CreateShellStream("main", 100, 30, 800, 600, 4096)
        Dim result(4096) As Byte
        shellStream.Read(result, 0, 0)

        Dim welcomeMessage As String = Encoding.UTF8.GetString(result)
        log(welcomeMessage)

"sshConnection"是我的SshClient,连接成功。 "log" 只是我的输出方法,它将我的结果写入文本框和控制台。虽然控制台充满了问号,但文本框根本不显示任何内容。我见过不同的读取 ShellStream 的方法,我也尝试过其中的几种方法(当我使用 Dim shellStream as ShellStream 时它对我没有影响,我也尝试在 Stream 对象上使用 SreamReader)。

所以我现在想知道这是否可能不是由我的方法引起的,而是事实上,ShellStream 仅在创建后才开始收集主机回复,这意味着没有输出所以远的。如果是这种情况,我想知道当您通常通过 CUI 连接到主机时如何捕获主机发送的第一条消息。我需要消息来验证是否已与特定类型的服务器建立 ssh 连接。

如果我的想法完全错误,请告诉我如何正确读出ShellStream。

提前致谢!

我找到了解决办法。因为 SshClient.CreateShellStream 与从您的计算机通过 SSH 客户端连接具有相同的效果,所以您可以使用此流阅读第一条消息。这是一些工作代码:

Dim sshConnection As SshClient = New SshClient(New ConnectionInfo(hostname, port, username, New PasswordAuthenticationMethod(username, password)))
Dim shellStream As ShellStream = sshConnection.CreateShellStream("terminal", 150, 500, 800, 500, 8192)
Dim reader As StreamReader = New StreamReader(shellStream)
Dim writer As StreamWriter = New StreamWriter(shellStream)
Dim cmd As String = "someCommand"
writer.WriteLine(cmd)
writer.Flush()

Thread.Sleep(500)

Dim line As String = ""
For i As Integer = 0 To 150

     response += line
     line = reader.ReadLine
     response += vbCrLf

 Next