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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die zweite Antwort, die du verlinkt schlägt Sie Pexpect(das ist normalerweise der richtige Weg zu gehen über die Interaktion mit den command-line-Programme erwarten Eingaben). Es ist ein Gabel, die Werke für Python ist3, die Sie verwenden können.
InformationsquelleAutor entropy
Hier ist eine Funktion, um
ssh
mit einem Passwort mitpexpect
:Etwas ähnliches sollte möglich sein
scp
.auf diese sind Sie Optionen übergeben, um ssh auf der Kommandozeile oder in Ihrer
.ssh/config
ohne die-o
. Die ersten ssh nicht zu beschweren, wenn die host verändert hat seine Schlüssel cos es wurde neu installiert seit der letzten Verwendung. Der zweite sagt /dev/null statt .ssh/known_hosts wieder so, wird es stoppen beschweren, wenn es neu installiert wurde mit einer doppelten Eintrag Warnung. Die letzten Tage nicht zu verwenden Schlüssel, die Kräfte Passwort-Eingabe.InformationsquelleAutor sjbx
Den OpenSSH
scp
Dienstprogramm ruft diessh
Programm, um die SSH-Verbindung zu dem remote-host, und der ssh-Prozess verwaltet die Authentifizierung. Diessh
Hilfsprogramm nicht akzeptieren, ein Passwort auf der Kommandozeile oder auf seine standard-Eingabe. Ich glaube, dies ist eine bewusste Entscheidung seitens des OpenSSH-Entwickler, weil Sie spüren, dass die Menschen sollten mit Hilfe sicherer Mechanismen wie der key-basierten Authentifizierung. Jede Lösung, die für den Aufruf des ssh gehen, um führen Sie einen der folgenden Ansätze:ssh
um das Passwort zu erhalten, indem ein weiterer Befehl, beschrieben hier oder hier, oder in einigen der Antworten hier.ssh
, die so arbeitet wie Sie möchten.In diesem speziellen Fall gegeben, dass Sie bereits aufrufen
scp
aus einem python-Skript, es scheint, dass einer von diesen wäre der vernünftigste Ansatz:scp
- und Futtermittel das Passwort zu.InformationsquelleAutor Kenster
Pexpect hat eine Bibliothek für genau dies: pxssh
http://pexpect.readthedocs.org/en/stable/api/pxssh.html
InformationsquelleAutor Tommy
Ich vermute, dass einige Anwendungen die Interaktion mit dem Benutzer über stdin und einige Anwendungen interagieren mit terminal. Wenn In diesem Fall schreiben wir das Passwort mit ROHR wir schreiben auf stdin. Aber SCP-Anwendung liest das Passwort vom terminal. Als Teilprozess nicht interagieren mit dem Benutzer über terminal, sondern nur die Interaktion mit stdin können wir nicht verwenden, das subprocess-Modul, und wir müssen mit pexpect für das kopieren die Datei mittels scp.
Fühlen Sie sich frei für die Korrekturen.
InformationsquelleAutor Raju Pitta