2016-03-30 3 views
2

Ich bin eine Anwendung, wo es SSHs zu Cisco-Geräten zu sammeln Ausgabe von show Befehle. Ich verwende paramiko Modul in Python, um dies zu tun.Wie wirkt sich SSH Fenster Größe in paramiko

Beim Vergleichen der Befehlsausgabe mit der von plink, habe ich erfahren, dass die Ausgabe von paramiko abgeschnitten ist. Versucht mit unbuffering und vergrößerte Puffergröße und es hat nicht geholfen. Später, gerade mit window_size Parameter versucht und es scheint zu funktionieren.

Unten ist mein Code:

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() 

Wie pro paramiko Dokument für Transport, default_window_size=2097152; 1597152 kleiner als der Standardwert.

Auch die Teilprotokollausgabe mit default_window_size=2097152 ist:

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 

Wo wie bei window_size=500000 ist:

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 

Hier sieht es aus wie, wenn der WINDOW_SIZE Standardwert ist, wird der Kanal geschlossen wird noch vor dem Beendigungssignal vom Server.

Experten, bitte beraten Sie mich über die Folgen von window_size in SSH reduziert und wie wird es meine Anwendung beeinflussen?

Antwort

0

Durch Ändern der window_size können Sie die maximale Länge einer Zeile festlegen, bevor ein Rückgabezeichen eingegeben wird. Wenn Ihre Anwendung erfordert, dass Sie einige Parsing ausführen, und Sie wollen etwas nennen wie

value.split('\n') 

Sie können feststellen, dass die Saiten mehr geteilt werden/weniger häufig, als Sie erwartet.

Verwandte Themen