我正在构建一个应用程序,它可以通过 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()
根据 paramiko 文件运输 http://docs.paramiko.org/en/1.16/api/transport.html#paramiko.transport.Transport.connect, default_window_size=2097152
; 1597152 小于default_value。
还有部分日志输出default_window_size=2097152
is:
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
is:
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 为默认值时,即使在服务器发出终止信号之前,通道也会被关闭。
请专家指点一下减少的后果window_size
SSH 中的内容以及它将如何影响我的应用程序?