subprocess richtig einsetzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dd3oc
User
Beiträge: 6
Registriert: Freitag 18. Mai 2018, 05:51

Hallo,

wie setze ich subprocess richtig ein?
Wie hier starte ich plink.exe um dem Passwort-Prompt der remoten Maschine zu erreichen.
....Code Ausschnitt...
if fimodule.pingHost(ip):
args = [p+'\plink.exe','-2','-ssh','-no-antispoof','-x','-l',username,ip,]
ssh = subprocess.Popen(args,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
universal_newlines = True)
if xmodule.checkState('Password:',ssh.communicate('\n', timeout=30)

...bisher funktioniert alles super. Mit dem \n in ssh.communicate() wird kein Passwort (nur Return) eingegeben und das remote System ändert den Prompt auf "Enter old Password". Mit dem Modul CheckState wird nur geprüft, ob im stdout der String "Password:" steht.
Dieser nächste Schritt funktioniert nicht mehr als ob die Instanz "ssh" nicht mehr aktiv ist. Im Pycharm Debug ist bei "ssh" der Status von stdout Closed von False nach True gewechselt
if ximodule.checkState('Enter Old Password:',ssh.communicate(Password+'\n', timeout=30)):

Mein Ziel ist, dass ich mit der Shell kommunizieren kann. Habt ihr eine Idee?

Klemens
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Poste deinen Code bitte in Code-Tags, damit die Einrückung erhalten bleibt. Die werden automatisch eingefügt wenn du in "Vollständiger Editor & Vorschau" den </> Knopf klickst.

Warum zeigst du nur den Code, der funktioniert, und nicht die Zeilen, die dann nicht mehr gehen?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du ssh benutzen willst, warum nimmst Du kein Python-Modul wie paramiko?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@dd3oc: Mit `communicate()` kannst Du danach nicht mehr mit dem Prozess kommunizieren weil der dann zuende ist nach dem `communicate()` zum Aufrufer zurückkehrt. Es kann sein dass das mit `subprocess` auch gar nicht geht was Du willst und Du so etwas wie `subprocess` verwenden musst.

``p+'\plink.exe`` sieht auch falsch aus. Pfadteile setzt man nicht mit ``+`` zusammen. Dafür ist `pathlib.Path` da.

Namen schreibt man in Python klein_mit_unterstrichen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
dd3oc
User
Beiträge: 6
Registriert: Freitag 18. Mai 2018, 05:51

Mit Paramiko ist es nicht möglich das Kennwort zu ändern, zumindest habe ich es nicht hinbekommen.
dd3oc
User
Beiträge: 6
Registriert: Freitag 18. Mai 2018, 05:51

Gibt es denn ein anderes Modul mit dem ich mit der Shell "kommunizieren" kann? Das os() soll man ja nicht mehr nutzen.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@dd3oc: Mit dem `os`-Modul geht das ja auch gar nicht, es sei denn man benutzt das um so etwas wie das `pexpect`-Modul zu schreiben. Das gibt es ja aber schon fertig, also warum sollte man das selbst noch mal erfinden wollen.

Was meinst Du mit „nicht möglich das Kennwort zu ändern” bei Paramiko?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
dd3oc
User
Beiträge: 6
Registriert: Freitag 18. Mai 2018, 05:51

Hi,
bei Paramiko gibst du im Connect den User und das Kennwort mit:

remote_conn_pre.connect(ip, username=username, password=password, look_for_keys=False, allow_agent=False)

und nur dann kann ich mit dem System kommunizieren. Wenn ich aber das Kennwort ändern will, muss erst ein "leeres" Passwort senden.
Das funktioniert mit Paramiko nicht. Im speziellen geht es hier um Cisco Devices in Verbindung mit einem Tacacs Server. Da wird mit einen
"leeren" Passwort der Kennwortänderungsprocess angestoßen.

Klemens
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Was passiert denn bei leerem Passwort?
auth_interactive sollte auf jeden Fall funktionieren. Hier ein Beispiel für die nicht ganz triviale Anwendung: https://stackoverflow.com/questions/439 ... entication
Antworten