So erhalten Sie SCP-Protokolle auf einem Remote-Server

So erhalten Sie SCP-Protokolle auf einem Remote-Server

Grundsätzlich möchte ich jede einzelne Datei protokollieren, die über SCP auf dem Server gesendet oder empfangen wird.

Angenommen, ein Benutzer führt einen SCP von Server-1 zu Server-2 durch. Ich habe herausgefunden, wie man Protokolle auf der Absenderseite erhält.aber wie gelangt das Übertragene auf die Empfängerseite?

Ich möchte, dass die Protokolle auf der Empfängerseite die Namen der Dateien enthalten, die über SCP an ihn übertragen werden.

Um Protokolle auf der Absenderseite zu erhalten, verwende ich außerdem mein Bash-Skript, das zuerst den Dateinamen in einer Protokolldatei speichert und diese dann mit SCP überträgt. Gibt es dafür einen besseren Ansatz?

Vielen Dank im Voraus für alle Vorschläge.

Antwort1

Ich habe gerade eine interessante Lösung gefunden, die andere vielleicht interessiert:

Bei der Verwendung scpwird mit dem Flag auch die Binärdatei auf dem Server aufgerufen -f. Das bedeutet, dass man einen einfachen Wrapper für die Serverseite schreiben kann scp, etwa so:

Ändern Sie zuerst scpden Namen Ihres Originals:

mv /usr/bin/scp /usr/bin/scp-org

Erstellen Sie dann ein einfaches Skript in seinem Namen:

sudo nano /usr/bin/scp

mit dem Inhalt:

#/bin/bash

scp-org $@ | tee >(grep -aEo "[CD][0-7]{4} [0-9]* .*$" --line-buffered >> /var/log/scp.log)

Dies könnte natürlich noch verfeinert werden, aber es funktioniert als Beispiel. Sie können jetzt tail -f /var/log/scp.logalle übertragenen Dateien in Echtzeit verwenden und sehen

Antwort2

Sie können versuchen, den scpBefehl auf dem Server durch eine geänderte Version zu ersetzen, die Ihren Anforderungen entspricht. scpist ein sehr einfaches Programm und das Hinzufügen von Protokollierungscode sollte keine große Aufgabe sein.

Antwort3

Sie verwenden wahrscheinlich das Softwarepaket OpenSSH. Das OpenSSH- scpDienstprogramm protokolliert nichts. Es unterstützt die Debugausgabe für die zugrunde liegende SSH-Sitzung, protokolliert jedoch nicht die tatsächlich stattfindenden Dateiübertragungen.

Ebenso kann der OpenSSH-Server so eingestellt werden, dass er Details seiner Aktivitäten protokolliert oder die Tatsache protokolliert, dass ein Benutzer eine Verbindung hergestellt und ausgeführt hat; scpdie tatsächlich stattfindenden Dateiübertragungen werden jedoch nicht protokolliert.

Wenn Sie diese Benutzer nicht dazu bringen können, stattdessen SFTP zu verwenden, stehen Ihnen drei Ansätze zur Verfügung:

  1. Untersuchen Sie alternative (also kommerzielle) SSH/SFTP/SCP-Server. Diese sollten grundsätzlich die Protokollierung von Dateiübertragungen unterstützen.

  2. Ersetzen Sie das scpDienstprogramm auf dem Server durch eines, das die gewünschten Daten protokolliert. OpenSSH ist Open Source. Jemand, der weiß, wie man in C für Unix programmiert, könnteLaden Sie die Quelle herunterund ändern Sie es.

  3. Ersetzen Sie das scpDienstprogramm durch einen „Wrapper“, der das ursprüngliche scp-Programm startet und überwacht, was es tut. Es gibt Debugging-Tools für Unix, die überwachen können, was ein anderer Prozess tut.

Ich musste einmal Transfers protokollieren scpund habe den dritten Ansatz verwendet. Ich habe ein Perl-Skript geschrieben, das das ursprüngliche scp-Programm unterstrace. Strace würde die Namen der Dateien ausgeben, die vom scp-Prozess geöffnet und geschlossen werden. Das Perl-Skript analysierte die Strace-Ausgabe und fand heraus, welche Dateien übertragen wurden.

Antwort4

Ich bin davon überzeugt, dass die Lösungen, die einen Wrapper um die Binärdatei auf dem Server vorschlagen, bei neueren Clients scpnicht funktionieren werden .scp

Since OpenSSH 8.8 (8.7 in Red Hat/Fedora builds), scp has use the SFTP protocol for transfers by default.

Bei solchen neueren Clients scpfunktioniert dieser Mechanismus zum Umschließen auf dem Server nur, wenn der Client scpmit dem -OFlag aufgerufen wird (um das alte Protokoll durchzusetzen).

Für solche Zwecke könnte vielleicht die Verwendung rsyncvon anstelle von scphilfreich sein? rsyncscheint die Möglichkeit zu haben, Dateizugriffe zu protokollieren: aus der rsyncd.confManpage:

log format
This parameter allows you to specify the format used for logging file transfers when transfer logging is enabled.
[..]
%f the filename (long form on sender; no trailing lq/rq)

verwandte Informationen