2016-12-28 2 views
0

Ich schreibe ein Skript, das in einige Netzwerkgeräte anmelden sollte, Befehle ausführen und einige Dateien sammeln. Jetzt scheint es, als wäre ich mit einem Problem beschäftigt, dass die SSH-Verbindung sofort nach dem Anmelden und ohne Ausführen von irgendetwas auf dem entfernten Host geschlossen wird. Nach dem Überprüfen der Debug-Nachrichten von Paramiko sehe ich folgende Nachricht: "EOF in Transport-Thread". Ich habe es mit Passwort und PSK ausprobiert, von Windows und von Linux, habe auch versucht, Spur, immer den gleichen EOF zu bekommen. Bis jetzt habe ich dieses Problem nur mit Session Border Controllern mit verschiedenen Softwareversionen, aber kann nichts auf ihnen debuggen, während das Ausführen von Debugging nicht einmal die SSH-Verbindung passiert, wahrscheinlich passiert es irgendwo im Hintergrund, wo ich keinen Zugriff habe.Python Paraimko meldet "EOF in Transportthread" nach dem Einloggen und schließt SSH-Sitzung

Hier wird die Debug-Meldungen:

Trying to connect to 10.xxx.xxx.xxx (1/3) 
starting thread (client mode): 0x57f09d0L 
Local version/idstring: SSH-2.0-paramiko_2.1.1 
Remote version/idstring: SSH-2.0-Mocana SSH 
Connected (version 2.0, client Mocana) 
kex algos:[u'diffie-hellman-group14-sha1', u'diffie-hellman-group1-sha1'] server key:[u'ssh-dss', u'ssh-rsa'] client encrypt:[u'aes256-cbc', u'rijndael256-cbc', u'aes192-cbc', u'rijndael192-cbc', u'aes128-cbc', u'rijndael128-cbc', u'3des-cbc', u'arcfour'] server encrypt:[u'aes256-cbc', u'rijndael256-cbc', u'aes192-cbc', u'rijndael192-cbc', u'aes128-cbc', u'rijndael128-cbc', u'3des-cbc', u'arcfour'] client mac:[u'hmac-sha1', u'hmac-sha1-96', u'hmac-md5', u'hmac-md5-96'] server mac:[u'hmac-sha1', u'hmac-sha1-96', u'hmac-md5', u'hmac-md5-96'] client compress:[u'none'] server compress:[u'none'] client lang:[u''] server lang:[u''] kex follows?False 
Kex agreed: diffie-hellman-group1-sha1 
Cipher agreed: aes128-cbc 
MAC agreed: hmac-md5 
Compression agreed: none 
kex engine KexGroup1 specified hash_algo <built-in function openssl_sha1> 
Switch to new keys ... 
Adding ssh-rsa host key for 10.xxx.xxx.xxx: e3afa50cb2380e75cbbd535fb6ceb3fc 
userauth is OK 
Authentication (password) successful! 
Connected to 10.xxx.xxx.xxx 
EOF in transport thread 

Und hier ist das Skript, nichts da, nur die Login:

import paramiko 
import time 
import sys 
import logging 

logging.getLogger("paramiko").setLevel(logging.DEBUG) 


host = '10.xxx.xxx.xxx' 
username = 'username' 
password = 'password' 
i = 1 

while True: 
    print ("Trying to connect to %s (%i/3)" % (host, i)) 

    try: 
     paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) 
     ssh = paramiko.SSHClient() 
     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
     ssh.connect(host,username=username,password=password) 
     print "Connected to %s" % host 
     break 
    except paramiko.AuthenticationException: 
     print "Authentication failed when connecting to %s" % host 
     sys.exit(1) 
    except: 
     print "Could not SSH to %s, waiting for it to start" % host 
     i += 1 
     time.sleep(2) 

    # If we could not connect within time limit 
    if i == 3: 
     print "Could not connect to %s. Giving up" % host 
     sys.exit(1) 

Jede Idee, wie dies weiter untersucht werden könnte, oder was die Wurzel sein könnte Ursache?

Antwort

0

Es sieht aus wie dies durch die Tatsache verursacht wurde, dass die Geräte Ich versuche nur interaktiv Shell zugreifen können, so hatte ich paramiko die invoke_shell zu verwenden, für mich ist es im Grunde wie folgt gearbeitet:

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(host,username=username,password=password) 
channel = ssh.invoke_shell() 
channel.send('uname -a\n') 

buff='' 
while not buff.endswith('# '): # Checking for returned prompt 
    resp = channel.recv(4096) 
    buff += resp 
print resp 
0

Nach der break-Anweisung wird das Skript beendet ... Fügen Sie also die Arbeit hinzu, die Sie ausführen müssen.

+0

I hatte diese Idee auch, aber wenn ich versuche, einen Befehl direkt nach dem ssh.connect über ssh.exec_command() auszuführen, bekomme ich eine Ausnahme mit dem Hinweis "SSH session not active". Ich schätze, der EOF wird empfangen und die SSH-Verbindung wird geschlossen, das Ausführen von irgendetwas verursacht einen Absturz oder löst eine Ausnahme aus. 'userauth ist OK Authentifizierung (Passwort) erfolgreich! EOF im Transport-Thread SSH-Sitzung nicht aktiv '<- Dies ist die Ausnahme –

Verwandte Themen