Wie kann ich eine lokale Aufzeichnung mit Zeitstempel aller Remote-Befehle führen, die ich verwende ssh
(Befehlszeilen-OpenSSh-Client wurde über gestartet bash
)?
Bedarf:
Wesentlich:
- 100% clientseitig ohne Serverprotokollierung
- Konfiguriert oder installiert pro Benutzer mit Protokollen, die im Home-Verzeichnis des Benutzers gespeichert sind.
- Unterstützung für die Unterscheidung zwischen mehreren gleichzeitigen Sitzungen mit verschiedenen Benutzern und Hosts.
- Nicht aufdringlich (muss nicht jedes Mal aktiviert werden und beeinträchtigt die Verwendung von ssh nicht wesentlich)
Hohe Priorität:
- Entweder wird die Ausgabe nicht so weit wie möglich protokolliert oder herausgefiltert
- Entweder werden Passworteinträge nicht protokolliert oder die Datei wird verschlüsselt
- Zeigt die tatsächlich verwendeten Befehle an (nachdem Tab / Verlauf abgeschlossen wurde, wurden Backspaces, CTRL+ Cusw. verarbeitet).
Schön zu haben:
- Protokolliert auch Befehle in verketteten Sitzungen (Befehle, die während der Remote- Sitzung
ssh
oder insu <user>
Sitzungen eingegeben wurden ). - Sitzungsstart und -ende sollten protokolliert werden
- Eine einfache
bash
, nicht root-basierte Lösung wäre am besten (vielleicht einalias
oder einbash
Wrapper-Skript für denssh
Befehl?)
- Protokolliert auch Befehle in verketteten Sitzungen (Befehle, die während der Remote- Sitzung
Mein Können:
- Ich bin nicht neu in der Programmierung, lerne aber noch
bash
und die "Linux-Methode", daher wären Codebeispiele mit kurzen Erklärungen sehr willkommen.
Mögliche Strategien
- Keylogger - Problem: Protokolliert Passwörter, protokolliert keine Registerkarte / Verlaufsvervollständigung (siehe Glenns Antwort )
screen
mit Scrollback-Dumping einmal pro Sekunde unddiff
dazwischen, um neue Scrollback-Zeilen zu finden - Problem: Wie kann dies auf nützliche automatisierte Weise implementiert werden?ssh "$@" | tee >(some_cleaner_function >> $logfile)
- Problem: Kann nicht mit mehrzeiligen Befehlen oder Verlauf in verketteten Sitzungen umgehen, sorgfältige Bereinigung erforderlich (siehe meine Antwort)- Eine Kombination einiger der oben genannten
Ein Beispiel
Die folgende SSH-Sitzung:
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
Könnte zu einem Protokoll führen ~/logs/ssh.log
wie:
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
Oder es wird möglicherweise für jede Sitzung ein separates Protokoll mit der Befehlszeile erstellt, mit der die Sitzung oben in der Datei gestartet wird.