【问题标题】:SSH.NET getting entire output from a shellstreamSSH.NET 从 shellstream 获取全部输出
【发布时间】:2016-05-09 07:32:47
【问题描述】:

我遇到了一个很奇怪的现象;当使用client.RunCommand() 函数时,我从开关中获得了整个输出,但是当使用我自己的实现时:

SshClient cl = new SshClient(ip, username, password);

cl.Connect();

shell = cl.createShellStream("Tail", 80, 24,800, 600, 1024);

StreamWriter wr = new StreamWriter(shell);
StreamReader rd = new StreamReader(shell);

wr.AutoFlush = true;

wr.WriteLine("show int status");

string rep = shell.Expect("Switch_Wan#", new TimeSpan(0,0,3));
MessageBox.Show(rep, "Output");

我只得到部分输出,并且提示说--More-- 如何从开关中获取全部输出?

部分输出的示例:

show int status

Port    Name        Status  Vlan    Duplex  Speed   Type
Fa0/1   Team7       connected   97  a-full  a-100   10/100BaseTX
Fa0/2   Team7       connected   97  a-full  a-100   10/100BaseTX
Fa0/3   Team7       connected   97  a-full  a-100   10/100BaseTX
Fa0/4   Team7       connected   97  a-full  a-100   10/100BaseTX
Fa0/5   Team7       connected   97  a-full  a-100   10/100BaseTX
Fa0/6   Team7       disabled    97  auto    auto    10/100BaseTX
Fa0/7   Team7       connected   97  a-full  a-100   10/100BaseTX
Fa0/8   Team7       connected   97  a-full  a-100   10/100BaseTX
Fa0/9   Team11      connected   11  a-full  a-100   10/100BaseTX
Fa0/10  Team11      connected   11  a-full  a-100   10/100BaseTX
Fa0/11  Team4       connected   94  a-full  a-100   10/100BaseTX
Fa0/12  Team4       connected   94  a-full  a-100   10/100BaseTX
Fa0/13  Team4       connected   94  a-full  a-100   10/100BaseTX
Fa0/14  Team4       connected   94  a-full  a-100   10/100BaseTX
Fa0/15  Team4       disabled    94  auto    auto    10/100BaseTX
Fa0/16  Team11      connected   11  a-full  a-100   10/100BaseTX
Fa0/17  Team11      connected   11  a-full  a-100   10/100BaseTX
Fa0/18  Team11      connected   11  a-full  a-100   10/100BaseTX
Fa0/19  Team4       connected   94  a-full  a-100   10/100BaseTX
Fa0/20  Team4       connected   94  a-full  a-100   10/100BaseTX
Fa0/21  Team4       connected   94  a-full  a-100   10/100BaseTX
Fa0/22  Team4       connected   94  a-full  a-100   10/100BaseTX
--More--
Switch_Wan#

在使用 client.RunCommand() 函数时,我在输出中获得了全部 48 个端口。

先谢谢了,如果有什么不清楚的地方,请说出来。

ps。在任何人建议之前,不,我不能使用client.RunCommand(),我必须使用流。

p.p.s 如果有人能解释 cl.CreateShellStream("Trail", 80, 24,800, 600, 1024); 中的值,我将非常感谢,因为我真的不明白这些值的含义

【问题讨论】:

    标签: c# shell ssh stream ssh.net


    【解决方案1】:

    这是在黑暗中拍摄的……试试这个:

    shell = cl.createShellStream("Tail", 0, 0, 0, 0, 1024)
    

    我还是 SSH.NET 的新手,但我认为这实际上将您的 shell 窗口大小设置为无限,因此更少/更多不会发挥作用。

    【讨论】:

      【解决方案2】:

      只需在会话开始时运行“term len 0”,就可以完全避免 --More-- 提示

      【讨论】:

      • 这才是真正的答案
      【解决方案3】:

      编辑:Adam Shortland 给出了更好的答案:term len 0 找到了解决方案,但忘了回来回答。 SNMP(第二个选项)仍然是一个有效的解决方案,您可以使用它来获取大量信息,但是对于这个问题,正确的答案是 Adam 的答案。

      这看起来与我最近的工作相似。 虽然 Simon 的回答会为您提供更多数据,但如果返回的数据多于 shell 大小(例如,如果您有一个带有很多端口的大交换机),这将无济于事。

      我尝试了两种方法来解决这个问题:

      1. 阅读最新行并检查是否存在 --More--

      问题在于,根据交换机的软件版本,这种格式是不同的。所以这打破了我的使用习惯。

      1. 对我来说,第二个更好的选择是使用 SNMP 来获取此信息。

      如果您只想从交换机获取信息,我肯定会使用 SNMP 而不是 SSH。如果您拥有正确的 OID,那么所有这些信息都很容易获得。 您需要执行 SNMP walk 以获取此信息。我使用的库是 SNMPSharp.NET (http://www.snmpsharpnet.com/)

      至于进入 CreateShellStream 方法的值,这里是来自文档的方法声明: public ShellStream CreateShellStream(string terminalName, uint columns, uint rows, uint width, uint height, int bufferSize)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-13
        • 1970-01-01
        • 2012-06-26
        • 2011-11-09
        • 2011-07-15
        • 1970-01-01
        • 2019-11-21
        相关资源
        最近更新 更多