Gelöst: Shellskript: lftp/sftp mit Keyfile und Passphrase

Fan

New Member
Ich stelle gerade den Server um von Passwort-Authentifizierung auf Keyfiles mit Passphrase. Nun habe ich ein Problem. Normalerweise lädt ein Shellskript einmal täglich automatisch per Cronjob Datenbanksicherungen von meinem Server herunter. Das spart Zeit und ist komfortabel. Ohne Keyfile ging das noch mit:

lftp -c "set sftp:auto-confirm yes ; open -u $USERNAME,$PASSWORD sftp://$HOST ; mirror -r /root/dumpfiles /root/dumpfiles ; quit"

Nun wird aber nicht mehr nach Passwort gefragt, sondern ein Keyfile verlangt und danach logischerweise die Passphrase für ebendas. Wie folgt funktioniert es zumindest mit dem Keyfile, der akzeptiert wird. Aber dann kommt "Keine Verbindung". Natürlich, denn die Passphrase fehlt.

lftp -c 'set sftp:connect-program "ssh -v -a -x -i /root/keyfile.ppk" connect sftp://root:dummy@11.22.33.44 mirror -r /root/dumpfiles /root/dumpfiles ; quit'

Wo gehört die hin? Wie muss der Befehl aussehen, damit es funktioniert? Weiß das jemand?
 

danton

Debian User
Außerdem macht es Sinn, für unbeaufsichtigte Jobs ein Keyfile ohne Passwort zu verwenden. Wenn ich das Passwort im Klartext in einer Datei speichern muss, kann ich es auch direkt weglassen. Und für den Download nicht root verwenden, sondern einen unpriviligierten User, der nur Zugriff auf das Dumpfile hat.
 

Fan

New Member
Warum verwendest Du nicht direkt scp?
Wenn es praktikabel ist, würde ich das schon machen. Allerdings finde ich dafür nirgends ein Beispiel. Ich wüsste also nicht, wie ich das per Shellscript anstellen sollte. Kannst du da weiterhelfen?
 

Fan

New Member
Außerdem macht es Sinn, für unbeaufsichtigte Jobs ein Keyfile ohne Passwort zu verwenden. Wenn ich das Passwort im Klartext in einer Datei speichern muss, kann ich es auch direkt weglassen. Und für den Download nicht root verwenden, sondern einen unpriviligierten User, der nur Zugriff auf das Dumpfile hat.
Da haste Recht. Habe es mit neuem File ohne versucht, aber auch damit klappt es nicht. Nach wie vor "Keine Verbindung". Irgendwo klemmt es.
 

GwenDragon

Registered User
Vielleicht mal in die Logatei von lftp schauen, so wird der Debug mode aktiviert: echo debug >> ~/.lftp/rc
 
  • Like
Reactions: Fan

DeaD_EyE

Blog Benutzer
Du nutzt lftp um rekursiv von der Quelle zum Ziel kopieren.
Hatte ich auch mal genutzt, weil mir nur ftp zur Verfügung stand und ich ähnliche Features wie bei rsync haben wollte.
Wenn dir SSH zur Verfügung steht, könntest du auch rsync benutzen. Nur mal so eine Idee.
 

sbr2d2

Registered User
Ich benutze sshfs, verbinde mit Keyfile. Damit läßt sich eine Verbindung dann wie ein Verzeichnis behandeln.
Verbunden wird dann mit
Code:
sshfs tolleruser@ziel-IP:/home/tolleruser/ /home/temp/ -o IdentityFile=/home/user/.ssh/keyfile
Läuft wunderbar und läßt sich gut in ein Shellscript einbauen.
 

nexus

Active Member
Läuft wunderbar und läßt sich gut in ein Shellscript einbauen.
Rein aus Neugier...Wie zufrieden bist du bei deiner Lösung mit dem Datendurchsatz?
Ich frage deshalb, weil ich auch schon mit sshfs experimentiert habe (im Zusammenspiel mit BorgBackup) . Da war allerdings die Performance bei größeren Datenmengen so grottenschlecht, daß ich diesen Ansatz wieder verworfen habe.
 

Fan

New Member
Vielleicht mal in die Logatei von lftp schauen, so wird der Debug mode aktiviert: echo debug >> ~/.lftp/rc
Danke für den Tipp. Ich habe debug aktiviert. Offenbar gibt es ein Problem mit der Passphrase, die mit dem neuen Key eigentlich gar nicht erforderlich wäre.

Code:
lftp -c 'set sftp:auto-confirm yes; set sftp:connect-program "ssh -v -a -x -i /root/key.ppk"; open -u root, sftp://11.22.33.44:123; mirror -r /root/dumpfiles /root/dumpfiles ; quit'

<---
<---
<---
<---
<--- debug1: key_load_private_type: incorrect passphrase supplied to decrypt private key
<--- Enter passphrase for key '/root/key.ppk': XXXX
<--- debug1: No more authentication methods to try.
<--- Permission denied (publickey).
 

sbr2d2

Registered User
Rein aus Neugier...Wie zufrieden bist du bei deiner Lösung mit dem Datendurchsatz?
Ich kann nicht klagen. Ich muss dazu aber auch sagen das es bei mir nicht auf Geschwindigkeit ankommt und es auch nie gemessen habe. Aber 1,3 Gb sind im Schnitt in weniger als 3 Minuten von 1und1 zu Netcup gezogen.
 

Fan

New Member
Ich benutze sshfs, verbinde mit Keyfile. Damit läßt sich eine Verbindung dann wie ein Verzeichnis behandeln.
Verbunden wird dann mit
Code:
sshfs tolleruser@ziel-IP:/home/tolleruser/ /home/temp/ -o IdentityFile=/home/user/.ssh/keyfile
Läuft wunderbar und läßt sich gut in ein Shellscript einbauen.
Habe ich ausprobiert. Funktioniert auch nicht. Hier wird ebenfalls nach einer nicht angegebenen Passphrase gefragt.

Code:
Enter passphrase for key '/root/.ssh/key.ppk':
read: Connection reset by peer
Entere ich leer, wird die Verbindung abgelehnt. Derselbe Key funktioniert prima in WinSCP oder auch per Putty ohne Passphrase. So langsam nervt mich, dass das nicht funktioniert. Vielleicht fehlt was in der sshd_config des angesprochenen Servers?

EDIT: Fehler gefunden. Ich habe mit Puttygen generiert. Da muss der Key noch nach OpenSSH konvertiert werden. Dann klappt es problemlos. Danke für diese Alternative. Ich denke, wenn ich es jetzt mit dem konvertierten Key per lftp versuche, klappt es auch da.

EDIT2: Klappt auch mit lftp.

Happy :)
 
Last edited:

GwenDragon

Registered User
.ppk? Was soll da für ein Key drin sein? Du verwendest OpenSSH, da kenn ich das nicht.
//EDITH sagt: Oh, dein Edit besagt, dass du PuTTY genutzt hast. Nun ja. Der erzeugte Key von Puttygen geht da nicht ohne export ins OpenSSH.-format. Und ich dachte sowas passiert nur Windows-Nutzern. ;)
Dann hättest du ja mit dem .ppk-Schlüssel auch trotzdem pscp nehmen können zum kopieren oder plink.
 
Last edited:

Fan

New Member
.ppk? Was soll da für ein Key drin sein? Du verwendest OpenSSH, da kenn ich das nicht.
//EDITH sagt: Oh, dein Edit besagt, dass du PuTTY genutzt hast. Nun ja. Der erzeugte Key von Puttygen geht da nicht ohne export ins OpenSSH.-format. Und ich dachte sowas passiert nur Windows-Nutzern. ;)
Dann hättest du ja mit dem .ppk-Schlüssel auch trotzdem pscp nehmen können zum kopieren oder plink.
ppk = Putty Private Key

Sei nicht so streng mit mir. Ich mache das schließlich zum ersten Mal, da kann man das Konvertieren schonmal übergehen. Ich bin auch Windows-Nutzer, verwende WinSCP und Putty für die Administration. Automatisiert eben Shellscripts per Cronjobs.

Dein verlinkter Beitrag enthält ein Beispiel für pscp. Vielleicht probiere ich das mal aus. Verwendet aber auch sftp, wenn ich das richtig interpretiere. Das macht lftp auch.
 

GwenDragon

Registered User
Sei nicht so streng mit mir. Ich mache das schließlich zum ersten Mal, da kann man das Konvertieren schonmal übergehen. Ich bin auch Windows-Nutzer, verwende WinSCP und Putty für die Administration.
Bin nicht streng. Hättest du deinen Wissenshintergrund näher erläutert, dann wäre ich schneller auf PuTTY gekommen und dir erzählt was falsch läuft. So hab ich mir gedacht, da hat jemand irgendwo was kopiert und das geht nicht. Aber du lernst ja noch, da kann sowas passieren. Ich wünsch dir viel Erfolg beim Lernen.

PS: Ich habe auch nicht jeden Tag Lust Leuten alles aus der Nase zu ziehen, wenn sie nicht so redselig bei Hilfersuchen sind. Ich helfe hier unentgeltlich als Hobby.
 

DeaD_EyE

Blog Benutzer
Rein aus Neugier...Wie zufrieden bist du bei deiner Lösung mit dem Datendurchsatz?
Heißer Tip: Probire mal Wireguard aus. Dann kannst du über private Netz z.B. NFS einhängen. Der Dienst sollte dann aber auch nur im privaten Netz verfügbar sein. Der Overhead ist sehr gering. Bin mal gespannt, wann es ofiziell im Kernel aufgenommen wird. Momentaner Blocker ist die integrierte Crypto.
 
Top