Wir haben einen Server, auf dem ein anderes Skript jeden Tag sFTPs und Dateien herunterlädt.
Frage: Kann ich feststellen, dass die Datei heruntergeladen wurde, und die Datei nach Abschluss automatisch archivieren?
Zur Verdeutlichung - Wir hosten die Dateien und jemand anderes kommt und lädt sie herunter.
Dies ist das Skript, das sie verwenden:
let $command = 'sftp -b /usr/tmp/file.sftp someuser@myserver'
show 'FTP command is ' $command
call system using $command #status
##file.sftp##
# Set local directory on PeopleSoft server
lcd /var/tmp
# Set remote directory on the remote server
cd ar/in
# Transfer all remote files to PeopleSoft
get file.dat
get file2.dat
# quit the session
bye
files
monitoring
sftp
Alex
quelle
quelle
Antworten:
Es gibt drei Möglichkeiten, die ich mir vorstellen kann, um Ihnen eine Lösung zu bieten.
1. Benutzerdefiniertes SFTP-Subsystem
Sie können den
sftp-server
Daemon über verpackensshd_config
und ihn mit Ihrem eigenen Skript "überschreiben", das dann abfangen kann, wassftp-server
gerade passiert, und dann handeln, wenn Sie sehen, dass eine Datei heruntergeladen wurde. Das Überschreiben der Standardeinstellungsftp-server
insshd_config
ist einfach:Herauszufinden, was im Wrapper-Skript zu tun ist, wäre der schwierige Teil
/usr/local/bin/sftp-server
.2. Beobachten Sie die Protokolle
Wenn Sie das Debuggen von
sftp-sever
aufdrehen, können Sie Protokolle darüber anzeigen, wann Dateien geöffnet / geschlossen und auf dem SFTP-Server gelesen / geschrieben werden. Sie können einen Daemon / ein Skript schreiben, das diese Protokolle überwacht und die Datei bei Bedarf sichert. Weitere Details dazu finden Sie bereits teilweise in meiner Antwort auf diese U & L-Fragen und Antworten: Aktivitätsprotokollierungsstufe in SFTP sowie hier in diesem Blog-Beitrag mit dem Titel: Aktivitätsprotokollierung für SFTP-Dateiübertragungssitzungen .Die SFTP-Protokolle können so erweitert werden, dass sie folgendermaßen aussehen:
Sie müssten dann einen Dämon / ein Skript entwickeln, der die Protokolle auf die Ereignispaare zum Öffnen / Schließen überwacht. Diese stellen eine abgeschlossene Dateiübertragung dar. Sie können auch Syslog verwenden, das die Protokollereignisse "CLOSE" überwacht und zum Kopieren der übertragenen Dateien verwendet werden kann.
3. Incron
Sie können Inotify- Ereignisse verwenden, die der Linux-Kernel bei jedem Zugriff auf eine Datei erzeugt. Es gibt einen Dienst namens Incron, der ähnlich wie Cron funktioniert. Wo Cron basierend auf der Zeit arbeitet, arbeitet Incron basierend auf Dateiereignissen. Sie können also einen Incron-Eintrag einrichten, der Ihre SFTP-Upload-Verzeichnisse überwacht. Wenn ein bestimmtes Dateiereignis erkannt wird, kopieren Sie die Datei.
In der Manpage inotify finden Sie eine Beschreibung der verschiedenen Ereignisse. Ich glaube, Sie möchten nach einem
read()
(IN_ACCESS
) gefolgt von einemclose()
(IN_CLOSE_WRITE
) Ausschau halten . Diese gelten für Dateien, die vom SFTP-Server kopiert wurden.Incron-Regeln sehen folgendermaßen aus:
Dieser Artikel mit dem Titel: Linux incrond inotify: Verzeichnisse auf Änderungen überwachen und Maßnahmen ergreifen zeigt viel mehr Details, die erforderlich sind, wenn Sie versuchen möchten, diese Option zu verwenden.
quelle
Konfigurieren Sie den SSH-Server so, dass die Aktivität protokolliert wird. Anschließend können Sie das Protokoll analysieren, um festzustellen, ob eine solche Datei heruntergeladen wurde.
Um das Anhängen
-l INFO
der Protokollierung an die Zeile des SFTP-Subsystems in der/etc/ssh/sshd_config
Datei zu aktivieren , sollte es ungefähr so aussehen (der Pfad kann je nach Distribution variieren, ich verwende SuSE 11):Jetzt werden die SFTP-Sitzungen angemeldet
/var/log/messages
.Dies ist ein Protokoll für eine von sftp heruntergeladene Datei:
Jetzt können Sie die Datei analysieren, um festzustellen, ob auf die Datei wie folgt zugegriffen wurde:
So aktivieren Sie die SFTP-Protokollierung: /server/73319/sftp-logging-is-there-a-way
quelle
Wenn Sie den Pfad und den Namen kennen, können Sie dies tun
Sie haben jedoch keine derartigen Informationen hinzugefügt.
quelle