Automatisieren Sie Mehrere SCP-Transfers in Python w/o Keys
Ich kopieren müssen zwei Programme von einem server zum anderen nach dem kompilieren mit einem automatischen, nicht-interaktiven python-Skript. Die Tasten sind nicht eine option, als dieses Skript ist für mehrere Benutzer auf Unternehmens-Servern und beide Schlüssel und Kennwörter erforderlich sind. Passwörter werden nicht im Programm gespeichert, sondern werden aufgefordert, sich einmalig beim start des Programms mit getpass(), und dann für die beiden SCP-transfers, so dass die Benutzer nicht haben, um geben Sie Ihr Kennwort für jeden scp-Aufruf. Ich bin mit os.system zu nennen scp:
os.system("/usr/bin/scp %s %s@server:directory" %(prg, uname))
os.system("/usr/bin/scp %s %s@server:directory2" %(prg2, uname))
scp definiert ist, für ein anderes Programm, also /usr/bin/scp. prg/prg2 ist das Programm Standort-und uname ist der Benutzer Benutzernamen auf dem remote-server(s).
Habe ich versucht Rohrleitungen das Passwort, wie hier beschrieben, aber es hat nicht funktioniert.
Kann ich nicht install sshpass, erwarten, paramiko, oder Stoff, und ich kann nicht mit rsync b/c es ist nicht installiert auf dem empfangenden server. Gibt es irgendetwas, das ich tun kann, dies zu automatisieren?
Ich bin mit AIX 6.1, Python 2.6.2
UPDATE: ich kann nicht installieren Sie externe Bibliotheken, wie pexpect, entweder daran, dass AIX nicht /config-Ordner in das python-Installationsverzeichnis. Ein fix dafür ist, um zu installieren python-devel für AIX, aber ich kann nicht installieren Sie das Programm, so bin ich noch stecken geblieben.
UPDATE 2: ich habe beschlossen, zu verzichten SCP zu Gunsten von FTP. Ich habe eine Kombination von diese und diese meinen FTP-script. Vielen Dank für Eure Antworten und helfen, mich leiten.
- Vielleicht bin ich off-base hier, ist aber nicht die Voraussetzung für das key einen SSH-Server-Seite erforderlich? So, es sei denn der server-Seite kann so konfiguriert werden, nicht mit den Tasten (einige SSH-server können, manche können das nicht), dann dies möglicherweise nicht möglich,
- Ja, aber mein Unternehmen nicht erlaubt, die Schlüssel-nur Anmeldungen. Sie verwenden sowohl pubkeys und Kennwörter authentifiziert, die werden einfach akzeptiert, bei der ersten Verbindung.
- dann kann ich nicht denken, eine andere alternative als das, was Igor Umrisse unten.
- Sie konnte roll Ihre eigenen "mini-erwarten", mithilfe von Funktionen in das os-Modul (forkpty, etc), oder versuchen Sie den subprocess-Modul.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie zum implementieren dieses in reinem Python nicht installieren, Rechte,
Sie sind unten, um das Rad neu erfinden, und es nervt. Was Sie brauchen in diesem Fall
ist die
SSH_ASKPASS
Lücke.SSH nicht wirklich wollen, dass Sie nur geben Sie ein Passwort, nachdem alle, das ist, was
keyfiles sind für. Allerdings, wenn die SSH_ASKPASS Umgebungsvariable gesetzt ist,
und die DISPLAY-Umgebungsvariable gesetzt ist, wird und ssh läuft nicht im inneren
ein TTY, es werde ausführen die ASKPASS program (während halten seine Umgebung
Variablen aus dem Kontext, dass die ASKPASS-Programm wurde aufgerufen). Als
Ergebnis, wenn Sie klug sind, können Sie festlegen, bis ein echo-Programm als Ihr
ASKPASS und zwingen ssh zu tun, was Sie wollen, dass Art und Weise.
Hier ist ein Ausschnitt aus dem code, den ich gesehen habe verwendet, dies zu tun - dies ist nicht
komplette (es ist gehoben, von der Mitte des Moduls), aber es sollte Euch
gestartet. Wir verwendet base64 zu setzen, ein Feigenblatt über unsere Passwörter in diese ein.
Müssen Sie
pexpect
.Beispiel der Nutzung (von Automatisieren SSH ohne Verwendung von public-key-Authentifizierung oder rechnen(1)):
Können Sie auch versuchen
expect
(und führen Sie dann das Skript auspython
; es ist eine gute Lösung, wenn Sie nicht installieren könnenpexpect
):~/my_python_modules
und hinzufügen, dassPYTHONPATH
).