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
subprocess richtig einsetzen
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?
Warum zeigst du nur den Code, der funktioniert, und nicht die Zeilen, die dann nicht mehr gehen?
- __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.
``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
- __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?
Was meinst Du mit „nicht möglich das Kennwort zu ändern” bei Paramiko?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
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
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
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
auth_interactive sollte auf jeden Fall funktionieren. Hier ein Beispiel für die nicht ganz triviale Anwendung: https://stackoverflow.com/questions/439 ... entication