Automatisieren SSH ohne öffentliche Schlüssel-Authentifizierung mit oder erwarten (1)
-
06-07-2019 - |
Frage
Gibt es eine Möglichkeit, ein Passwort übergeben automatisch ssh. Ich möchte automatisch an einen Server ssh ohne mit Public-Key-Authentifizierung oder Skripte erwarten, von irgendwie ssh bekommen das Passwort von stdin oder einer Datei zu lesen.
Der Grund, dass es so sein muss, ist, dass Ich mag würde meine Dateien auf einen Server mit rsync / ssh sichern als cron-Job ausgeführt wird. Dieser Server besteigt mein Home-Verzeichnis nach es authentifiziert mich, so Public-Key-Authentifizierung mit nicht funktioniert, da ~ / .ssh nicht verfügbar ist, bis die Anmeldung erfolgreich ist. erwarten (1) ist nicht in Frage, weil ich möchte, dass es als cron-Job laufen, und da Cron-Jobs unter einem Terminal die Kombination nicht laufen von erwarten / ssh funktioniert einfach nicht. Ich habe keine Root-Zugriff auf den Server haben, und es wäre schwierig, die Administratoren zu erhalten, um Änderungen vorzunehmen, um die Art und Weise Dinge dort arbeiten.
Lösung
Mit sshpass
.
Wenn zum Beispiel Passwort ist in password.txt
Datei:
sshpass -fpassword.txt ssh username@hostname
(aus der Antwort auf eine ähnliche Frage )
Andere Tipps
erwarten indiskutabel ist, weil ich es als cron-Job ausgeführt werden soll, und da Cron-Jobs nicht unter einem Terminal die Kombination laufen erwarten / ssh nur nicht funktioniert
Sie können Skripts ausführen von cron erwarten, zumindest können Sie mit Bibliotheken wie „pexpect“ für Python erwarten. Ich dies nur getestet, um zu bestätigen, einen pexpect scp / ssh-Skript von cron ausgeführt wird, und ich konnte erfolgreich eine Datei von einem Python-Skript scp in cron ausgeführt wird.
Beispielcode:
#!/usr/bin/python
import pexpect
FILE="/path/to/file"
REMOTE_FILE=""
USER="user"
HOST="example.com"
PASS="mypass"
COMMAND="scp -oPubKeyAuthentication=no %s %s@%s:%s" % (FILE, USER, HOST, REMOTE_FILE)
child = pexpect.spawn(COMMAND)
child.expect('password:')
child.sendline(PASS)
child.expect(pexpect.EOF)
print child.before
Anstatt vorbei Ihr Passwort ein öffentliches / privates Schlüsselsystem verwenden. Fügen Sie den öffentlichen Schlüssel für eine Maschine zur autorisierten Schlüssel-Liste auf allen Maschinen, die Sie eine Verbindung herstellen möchten. Mit dieser Methode SSH verwenden, können die Schlüssel automatisch validieren und kein Kennwort erforderlich ist.
Sie können Anweisungen finden Sie hier: http://linuxproblem.org/art_9.html
Da ich gerade gelesen, die Frage genauer, könnte man sich nach einem anderen SSH-Client aussehen soll, die ohne Interaktion mit dem Benutzer-Passwort-Authentifizierung unterstützt. Ich schnelle Google-Suche angedeutet, dass sie existieren ( http: / /www.derkeiler.com/Newsgroups/comp.security.ssh/2004-12/0134.html )
Related Stackoverflow Fragen:
Diese Diskussion Gespräche über das, was Sie zu tun versuchen:
http://cygwin.com/ml/cygwin/2004-02 /msg01449.html
Wenn Sie nicht der Administrator haben ein lokales Verzeichnis erstellen für Sie, dann wird dies nicht funktionieren.
SSH benötigt einen „Sprung des Glaubens“ Manipulation der anfänglichen Handshake gegen Zukunft zu sichern. (Sie vertrauen zunächst den Schlüssel der Server gibt Ihnen)
Ein derzeit verfügbare, aber nicht gut bekannte Ansatz ist SSH-SRP zu verwenden. Dies nutzt die gegenseitige Passwort Wissen sowohl Sie authentifiziert und Sitzungsverschlüsselungsschlüssel erforderlich bieten, um sicher Ihre SSH-Sitzung zu verschlüsseln.
Es ist viel sicherer als SSH anfängliche „vertraut mir“ und erfordert keine langfristige Speicherung von Schlüsseln.
Erwarten Sie nicht verwenden, pexpect oder dergleichen in einem Passwort zu füttern. Wenn Sie das tun, hat Ihr Passwort irgendwo in Klartext sein, was eigentlich sein kann, weniger sicherer als ein passwordless öffentliches / privates Schlüsselpaar verwendet. Und es ist mehr Arbeit!
Lesen Sie diese Seite von „SSH: The Definitive Guide“ für eine Diskussion über Ihre Möglichkeiten: http://www.snailbook.com/faq/no-passphrase.auto. html
Sie haben, wie Authentifizierung über öffentliche Schlüssel funktioniert falsch verstanden. Sie brauchen keinen Zugriff auf Ihr Remote-Home-Verzeichnis, einfach ausgedrückt den lokalen öffentlichen Schlüssel in der Fernbedienung authorized_keys
Datei. Haben Sie eine Google um, gibt es viele Anleitungen.