SSH.NET从shellstream获取整个输出

时间:2016-05-09 07:32:47

标签: c# shell ssh stream ssh.net

我遇到了一个很奇怪的现象;使用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);的价值,我会非常非常感谢,因为我真的不明白这些价值观是什么

3 个答案:

答案 0 :(得分:2)

这是一个在黑暗中的镜头......试试这个:

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

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

答案 1 :(得分:2)

运行"术语len 0"在会话开始时,你可以完全避免--More--提示

答案 2 :(得分:1)

这看起来与我最近的工作类似。 虽然Simon的答案会为您提供更多数据,但如果返回的数据多于shell大小(例如,如果您有一个包含大量端口的大型交换机),则无法提供帮助。

我尝试解决此问题的方法有两种:

1)阅读最新一行并检查是否存在 - 更多 -

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

2)对我来说,第二个也是更好的选择是使用SNMP来获取这些信息。

如果您只想要来自交换机的信息,我肯定会使用SNMP而不是SSH。如果您有正确的OID,则很容易获得所有这些信息。 您需要执行SNMP步骤才能获取此信息。我使用的库是SNMPSharp.NET(http://www.snmpsharpnet.com/

对于进入CreateShellStream方法的值,这里是docs中的方法声明: public ShellStream CreateShellStream(string terminalName,uint columns,uint rows,uint width,uint height,int bufferSize)