Sftp - nur nicht vorhandene Dateien übertragen

Hallo zusammen!

Ich möchte gerne wissen, ob es eine einfache Möglichkeit gibt, bei einer sftp Session nur Dateien zu übertragen, die im lokalen Verzeichnis nicht vorhanden sind.

Hintergrund:
Gegeben ist ein SFTP Server und mehrere Benutzerkonten auf die ich keinerlei Einfluss habe. Jedes Benutzerkonto darf nur die ihm gehörenden Dateien zugreifen. Täglich werden von den Benutzern Dateien auf den Server abgelegt, die von mir 1x täglich automatisiert abgerufen werden sollen.

Ich habe bereits unter Linux (openSUSE) ein Shell-Script geschrieben, welches sich automatisch beim SFTP Server anmeldet und alle Dateien herunterlädt. Leider ist SFTP ziemlich langsam und bei der immer größer werdenden Menge an Daten dauert der Vorgang inzwischen viel zu lange. Daher möchte ich das Script so umstellen, dass nur noch Dateien abgeholt werden, die nicht im lokalen Verzeichnis vorhanden sind, weil die Dateien, die vorhanden sind, nicht mehr geändert werden und daher auch nicht nochmals übertragen werden müssen.

Ein Umsteigen auf rsync ist meines Wissens nach nicht möglich, da dazu doch auf dem Server ein rsync Dämon laufen müsste, oder?

Hoffe ich habe verständlich machen können, worum es mir geht.

Vielen Dank für eure Bemühungen im Voraus!

Gruß

Manuel

Hallo,

so als Frage, warum verwendest du nicht bspw SVN - Es werde nur Dokumente aktualisert die sich veränder (!) haben (die neuen werden natürlich abgerufen) - du könntest sogar vergleichen was sich verändert hat.

Man kann zudem zu jeder Zeit zurück auf den Stand von vor X Tagen. Ich glaube das ist eher das was du suchst…

Grüße

weil du das wohl weisst frag ich gleich mal nach.

wenn ich kein SVN auf dem server einrichten kann , sondern nur auf meinem sicherungs computer, wie kann ich dann via sftp die daten auschecken , bzw abgleichen . ???

Hallo,

welchen genauen Zugriff der Ersteller genau hat - darüber können wir nur spekulieren. Er hat nur über den FTP selbst gesprochen - dieser kann aber unabhängig vom SSH konfiguriert sein.

Für die Aktion die durchgeführt werden soll ist SVN oder eine andere Versionierungssoftware eigentlich wie geschaffen. Wenn ich keine Möglichkeit dazu habe rede ich halt mit dem Admin oder dem Cheff und erkläre ihm, dass mir das am Tag X Minuten / Stunden spart den Traffic minimiert und die Software zudem kostenlos ist.

Das Einrichten ist ja in ein paar Minuten erledigt

(ebenso grußlos)

Ich habe bereits unter Linux (openSUSE) ein Shell-Script
geschrieben,

Dann erweitere das Script doch so, dass erst eine Liste der remote-Dateien ausgegeben wird und du die Liste dann einfach abklapperst. Das ist kein Hexenwerk und sicher schneller geschrieben, als ein SVN installiert oder sonstige Methoden, mit Atombomben einen Spatz zu erlegen.

Gruß

wenn ich kein SVN auf dem server einrichten kann , sondern nur
auf meinem sicherungs computer, wie kann ich dann via sftp die
daten auschecken , bzw abgleichen . ???

Danke… DAS wüsste ich dann nämlich auch gern :smile:

Dann erweitere das Script doch so, dass erst eine Liste der
remote-Dateien ausgegeben wird und du die Liste dann einfach
abklapperst. Das ist kein Hexenwerk (…)

Genau das ist eben der Punkt um den ich gern herumgekommen wäre. Ich hab noch nicht viel mit Shell Scripten gemacht und müsste mir das alles erst anlesen. Daher wollte ich erstmal schauen, ob’s da was einfaches gibt.

Hallo,

welchen genauen Zugriff der Ersteller genau hat - darüber
können wir nur spekulieren. Er hat nur über den FTP selbst
gesprochen - dieser kann aber unabhängig vom SSH konfiguriert
sein.

Ich dachte mit „Gegeben ist ein SFTP Server und mehrere Benutzerkonten auf die ich keinerlei Einfluss habe.“ wäre das hinreichend erläutert. Der SFTP Server ist nicht mir. Ich kann dort nur mit mehreren Benutzeraccounts via SFTP Daten abrufen. Mehr ist nicht möglich. Ich kann keine anderen Dienste auf dem Server nutzen (sofern es welche gibt - selbst das weiß ich nicht) und ich kann auch nicht dafür sorgen, dass es welche gibt.

Für die Aktion die durchgeführt werden soll ist SVN oder eine
andere Versionierungssoftware eigentlich wie geschaffen. Wenn
ich keine Möglichkeit dazu habe rede ich halt mit dem Admin
oder dem Cheff und erkläre ihm, dass mir das am Tag X Minuten
/ Stunden spart den Traffic minimiert und die Software zudem
kostenlos ist.

Der Server ist aber nicht in meinem Einflussbereich. Da kann ich mit nimandem drüber reden oder um irgendwas bitten.

Gruß

Manuel

doch rsync

Genau das ist eben der Punkt um den ich gern herumgekommen
wäre. Ich hab noch nicht viel mit Shell Scripten gemacht und
müsste mir das alles erst anlesen. Daher wollte ich erstmal
schauen, ob’s da was einfaches gibt.

Wenn ein sftp-Zugriff möglich ist, also auf der entfernten Maschine ein sshd läuft, sollte eigentlich auch rsync über ssh funktionieren, ohne dass du dafür einen Dämon installieren musst. Z. B.

rsync -avzbe ssh [email protected]:/tmp /tmp

oder, wenn die Authentifizierung ein Zertifikat erfordert,

rsync -avzbe 'ssh /pfad/zum/zertifikat' [email protected]:/tmp /tmp

HTH

Hi,

es würde wohl auch schon reichen, wenn einfach nur die Dateien kopiert wurden, die in den letzten 3 Tagen oder so verändert wurden. Das sollte mit Skript (find) einfach zu bewerkstelligen sein. Und ist evtl. einfacher als der Abgleich zweier Dateilisten.

Gruß Lutz

es würde wohl auch schon reichen, wenn einfach nur die Dateien
kopiert wurden, die in den letzten 3 Tagen oder so verändert
wurden. Das sollte mit Skript (find) einfach zu
bewerkstelligen sein. Und ist evtl. einfacher als der Abgleich
zweier Dateilisten.

Naja, da geht’s aber schon ein bisschen ans Eingemachte. Der find-Befehl müsste nämlich auf dem fernen Rechner laufen, und seine Ergebnisse dem ftp-Befehl auf dem lokalen Rechner mitteilen. Machbar ist sowas, aber ob das wirklich einfacher ist als ein ‚ls > /tmp/liste‘, ein zeilenweises Durchgehen durch diese Liste und jeweils ein ‚if !exist‘…

Gruß

Ein Umsteigen auf rsync ist meines Wissens nach nicht möglich,
da dazu doch auf dem Server ein rsync Dämon laufen müsste,
oder?

Du kannst rsync auch ohne rsyncd nutzen, allerdings setzt das einen ssh-Zugang voraus.

Stefan

Ja ok,

wann wie welche Skripte ausgelöst werden können, ist mir nicht ganz klar, die Shell-Befehle innerhalb sftp sind etwas eingeschränkter als die Originale.

Wenn rsync+ssh funktioniert, sollte das auch benutzt werden.

Ansonsten könnte man auch, um mal weiterzuspinnen, in den Accounts ja ein Script per crontab aufrufen, welches die aktuellsten Dateien auf den Backup-Server schiebt, statt dass dieser sie abfragt.

Gruß, Lutz

Hallo,

„Gegeben ist ein SFTP Server und mehrere
Benutzerkonten auf die ich keinerlei Einfluss habe.“

Leichter wäre es gewesen wenn du über einen Zugang gesprochen hättest.

Ein SFTP - Server muss auf irgend einem (physikalischen / virtuellen) Server / Rechner laufen über den Zugriff auf eben diesen hast du kein Wort verloren.

Bspw Arbeite ich als Entwickler. Ich „habe“ auf der Arbeit mehrere Applikationsserver, Datenbankserver usw. auf denen ich bspw deployen muss - Die Firma gibt vor Entwickler sollen die Server nicht Konfigurieren, dafür werden die Admins bezahlt - die sollen sie nur „benutzen“ also kann ich auf diesen Servern nichts an den Benutzereinstellungen ändern oder (an den meißten) konfigurationen vornehmen. Trotzdem gestatten mir die Admins einen SSH Zugang mit Benutzerrechten, sodass ich die Möglichkeit habe bspw die Applikationsserver von der Console aus neu zu starten, falls das von nöten ist.

Durch diese Rechte könnte ich mir bspw einen portablen SVN-Client hochladen und über diesen ein Checkout machen. Ob der SVN Server nun auf dem Client oder Server installiert ist, ist in erster Linie wurst, auf dem Server wärs halt schöner. SVN kann man auch über SSH oder SFTP laufen lassen, also sollte man keine Probleme mit der Firewall bekommen.

Wenn der SVN-Server auf dem Client läuft, muss man halt 2 Schritte machen (committen und updaten) - geht aber immer noch schneller als eine große Datenmenge zu übertragen.

Gruß

Manuel

Gruß

Hallo hermann!

Hab es jetzt einfach mal zum Testen versucht.
Zunächst mal war der Befehl nicht ganz korrekt. Wenn ich mich mit einem Zertifikat authentifiziere geht es mit:

rsync -avzbe ‚ssh -oIdentityFile=/pfad/zum/zertifikat‘ user@host:/pfad/zum/quellordner /pfad/zum/zielordner

Andernfalls will er das Zertifikat als Host hernehmen…

Wenn ich das so mache, wie ich schreibe, bekomme ich aber nur eine Fehlermeldung:

exec request failed on channel 0
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(632) [receiver=3.0.4]

Die Anmeldung mit dem Zertifikat funktioniert für das sftp hervorragend. Das kann schon mal nicht die Ursache dafür sein. Für mich schaut es einfach so aus als ob das Gegenstück zu rsync fehlt.

Gruß

Manuel

Hallo Lutz,

Wenn rsync+ssh funktioniert, sollte das auch benutzt werden.

Hab ich probiert - ging leider nicht. Siehe anderer Zweig in diesem Thread.

Ansonsten könnte man auch, um mal weiterzuspinnen, in den
Accounts ja ein Script per crontab aufrufen, welches die
aktuellsten Dateien auf den Backup-Server schiebt, statt dass
dieser sie abfragt.

Gruß, Lutz

Das liegt leider komplett jenseits von dem was möglich ist. Auf der Server-Seite herrscht da mehr eine „Friss oder stirb“ Mentalität und „man habe mit dem zufrieden zu sein, was man kriegt“. Nur möchte ich mir halt die Arbeit so weit es geht vereinfachen.

Gruß

Manuel