python-2.7 - SSH 窗口大小如何影响 paramiko

标签 python-2.7 ssh paramiko openssh

我正在构建一个应用程序,它通过 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 的 paramiko 文档, default_window_size=2097152 ; 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 是默认值时, channel 甚至在来自服务器的终止信号之前就被关闭了。

高手请指教减少window_size的后果在 SSH 中,它将如何影响我的应用程序?

最佳答案

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

value.split('\n')

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

关于python-2.7 - SSH 窗口大小如何影响 paramiko,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36318780/

相关文章:

python - python子进程中的rsync + ssh在目录名中出现空格错误

python - 在 Windows 上安装 paramiko

python - 如何从这种情况下用 python 删除 <table> 结构?

python - 使用 lxml 从 xml 文件获取值

ssh - 关闭 ssh session 时保持终端不被清除

python - Python如何在远程机器上执行命令并等待执行完成?

python - 为 paramiko session 设置 session 变量

python - 有没有办法显示正确的浮点值?

python - 滥用 'property' 保留字

javascript - 使用 libssh 从消息中提取 SSH 公钥