SSH 窗口大小如何影响 paramiko

Posted

技术标签:

【中文标题】SSH 窗口大小如何影响 paramiko【英文标题】:How does SSH Window Size affect in paramiko 【发布时间】:2016-07-19 01:03:06 【问题描述】:

我正在构建一个应用程序,它通过 SSH 连接到 Cisco 设备以收集 show 命令的输出。我在 python 中使用 paramiko 模块来完成这项工作。

在将命令输出与plink 的输出进行比较时,得知 paramiko 的输出被截断了。尝试取消缓冲并增加缓冲区大小,但没有帮助。后来用window_size参数试了一下,好像可以了。

下面是我的代码:

import paramiko
sshclient = None
try:
    sshclient = paramiko.SSHClient()
    sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    sshclient.connect('mydevice', username='admin', password='admin12345')
    chan = sshclient.get_transport().open_session(window_size=500000)
    chan.settimeout(10800)
    chan.exec_command('show tech-support fcip')

    value = chan.recv(1024)
    while value:
        print(value)
        value = chan.recv(1024)

finally:
    if sshclient:
        sshclient.close()

根据Transport、default_window_size=2097152 的 paramiko 文档; 1597152 小于 default_value。

还有default_window_size=2097152 的部分日志输出是:

Authentication (password) successful!
[chan 0] Max packet in: 32768 bytes
[chan 0] Max packet out: 32768 bytes
Secsh channel 0 opened.
[chan 0] Sesch channel 0 request ok
EOF in transport thread

window_size=500000 是:

Authentication (password) successful!
[chan 0] Max packet in: 32768 bytes
[chan 0] Max packet out: 32768 bytes
Secsh channel 0 opened.
[chan 0] Sesch channel 0 request ok
[chan 0] EOF received (0)
EOF in transport thread

这里看起来,当window_size为默认值时,通道甚至在来自服务器的终止信号之前就被关闭了。

专家,请告诉我在 SSH 中减少 window_size 的后果以及它将如何影响我的应用程序?

【问题讨论】:

【参考方案1】:

通过修改window_size,可以影响在输入返回字符之前一行的最大长度。如果您的应用程序需要您执行一些解析,并且您想调用类似

value.split('\n')

您可能会发现字符串拆分的频率比您预期的要高/低。

【讨论】:

以上是关于SSH 窗口大小如何影响 paramiko的主要内容,如果未能解决你的问题,请参考以下文章

三路握手后 TCP 窗口大小如何影响设置 SO_RCVBUF(使用 setsockopt)?

窗口调整大小不会影响内容

带有着色器的 2D 照明 - 受窗口大小影响的光半径

Delphi中如何固定窗口大小

[QNX 自适应分区用户指南]9.3 选择窗口大小-更新中

MFC如何改变窗口大小??