Senden Sie ein Passwort über SSH oder SCP mit subprocess.Popen

Ich versuche zu laufen, ein scp (secure copy) - Befehl mit subprocess.Popen. Der login erfordert, dass ich ein Kennwort senden:

from subprocess import Popen, PIPE

proc = Popen(['scp', "[email protected]:/foo/bar/somefile.txt", "."], stdin = PIPE)
proc.stdin.write(b'mypassword')
proc.stdin.flush()

Diese sofort einen Fehler zurück:

user@10.0.1.12's password:
Permission denied, please try again.

Ich bin bestimmte das Passwort richtig ist. Ich leicht überprüfen, ob es durch manuelles aufrufen scp auf der Schale. Also, warum funktioniert das nicht?

Beachten Sie, es gibt viele ähnliche Fragen zu diesem, zu Fragen subprocess.Popen und senden ein Passwort für den automatisierten SSH-oder FTP-login:

Wie kann ich einstellen, dass ein Benutzer-Passwort in linux von einem python-Skript?
Verwenden Teilprozess, um ein Kennwort senden

Die Antwort(en) auf diese Fragen, die nicht erwerbstätig sind und/oder nicht anwenden, weil ich mich mit Python 3.

ich bin nicht vertraut mit diesem code, aber Sie versuchen, mit parameter "- p"? auch ein key-exchange-als validation-Methode?
Mit "- p " ich meine "-p meinpasswort [email protected]:/foo/bar/somefile.txt" ich weiß nicht, ob Sie das tun können
Soweit ich weiß, scp nicht akzeptieren, ein Schalter zur Eingabe des Kennworts über die Befehlszeile(dessen man-Seite enthält nichts dergleichen). Im Allgemeinen ist es keine gute Praxis, um ein Passwort auf der Kommandozeile, weil das wird aufgezeichnet .bash_history
Vielleicht können Sie lösen dieses problem, indem Sie ein authorized_keys - Datei.
Nicht scp brauchen eine -r wenn du gehst, zu kopieren . (ein Verzeichnis)? Wenn Sie kämpfen, um pexpect zu arbeiten, ich habe ein Funktion, sollte helfen.

InformationsquelleAutor Channel72 | 2013-03-01

Schreibe einen Kommentar