2017-09-28 1 views
0

Ich habe einen SSH-Tunnel mit dem Befehl python pexpect.spawn() erstellt. Ich möchte diese ssh-Verbindung nach meiner Verarbeitung schließen oder beenden. Ich habe versucht, den <sshtunnel>.close()/<sshtunnel>.kill()/<sshtunnel>.terminate() Befehl zu geben. Auch wenn ich die <sshtunnel>.isalive() Methode gebe ich einen Wert False Bedeutung der Child-Prozess wurde geschlossen, sehe ich immer noch die ssh-Tunnel-Prozess läuft auf meinem Linux Ubuntu-Rechner.Beenden einer von Python erstellten SSH-Verbindung pexpect spawn

Irgendwelche Eingaben, wie dieser ssh-Tunnelprozess beendet wird? Hier ist das kurze Code-Snippet.

username="username" 
    passwd="password" 
    try: 
     child=pexpect.spawn("ssh -C2qTnNf -D XXXX [email protected]") 
     i=child.expect('password:') 
     print(i) 
     if i==0: 
      print(passwd) 
      time.sleep (0.5) 
      child.sendline(passwd) 
      child.expect('$') 
      time.sleep(2) 
      print(child) 
      print(child.isalive()) 
      print('####') 
      child.close(force=True) 
      #child.terminate(force=True) 
      time.sleep(5) 
      print(child.isalive()) 
      print(child) 
    except Exception as e: 
     print(str(e)) 
+0

Ja pynexj, tat es. Vielen Dank. Entschuldigung für die späte Antwort – Chamistad

Antwort

0

ssh -f würde Gabel ein Kind ssh Prozess läuft im Hintergrund (wie ein daemon) und der übergeordnete Prozess würde sofort verlassen.

Für pexpect.spawn('ssh -f ...'), pexpect kann nur mit dem parrent ssh Prozess interagieren, damit es nicht den Hintergrund Tunnel ssh Prozess stoppen kann.

Um den Tunnel-SSH-Prozess zu beenden, müssen Sie seine PID finden und etwas wie oder os.kill(pid, sig) tun.