Ich muss mich über ssh bei verschiedenen Servern anmelden, und es ist nützlich, das Terminal zu protokollieren (auch Dinge in Smitty-Menüs / AIX und mit korrektem / genauem Datum / Uhrzeit). Ich habe bereits eine Lösung dafür:
0)
# with root:
apt-get install bsdutils
# with the given user:
mkdir ~/logs
1)
# append this to you're "~/.bashrc" - this must be the last line!!
STARTTIME=`date +%F-%Hh-%Mm-%Ss-%N`; script -q -t 2> /home/USERNAMEHERE/logs/$STARTTIME-timing.txt -c 'bash --rcfile /home/USERNAMEHERE/.bashrc-cp' -f /home/USERNAMEHERE/logs/$STARTTIME-log.txt; exit 0
2)
# make sure the 1) is the last line of bashrc, then [this is needed to avoid "fork bomb"..]:
sed -e '$d' /home/USERNAMEHERE/.bashrc > /home/USERNAMEHERE/.bashrc-cp
Und das funktioniert super!
Die Frage ist nun: Wie werden diese Terminalprotokollierungen wiedergegeben? Dies ist die Standardmethode:
REPLAY:
# rename the filenames to you're needs! - you can only play 1 file at one time..
scriptreplay "/home/USERNAMEHERE/logs/$STARTTIME-timing.txt" "/home/USERNAMEHERE/logs/$STARTTIME-log.txt"
OK. Es klappt. Aber es ist nicht genug ..: Sie können nur mit der Wiedergabe der Aufnahme beginnen. Was aber, wenn Sie die Aufzeichnung nur zu einem bestimmten Zeitpunkt benötigen oder wissen müssen, wann genau ein Befehl ausgeführt wurde (Sie können dies in den Terminal-Protokolldateien + Timing-Dateien sehen, die "Skript" generiert). Oder besser: Sie benötigen eine Terminalprotokollierung für Bildungszwecke (daher müssen Sie die Wiedergabe der Aufzeichnung stoppen, um etwas davon aufzuschreiben usw.).
Für diese Wiederholungsprobleme habe ich immer noch keine guten Programme gefunden. Also sollte ich mein eigenes Programm darüber schreiben (aber ich habe nur Erfahrung mit Bash-Skripten).
Ich dachte, das Beste für diese Aufgabe wäre die Verwendung von ncurses (die Wiedergabelösung muss auf mehreren verschiedenen Betriebssystemen verwendet werden, z. B. OpenBSD, Ubuntu, Redhat). - Die Terminalprotokollierung könnte ein "Auditing-Tool" sein, um zu verfolgen, was die Benutzer über SSH getan haben.
Also denke ich darüber nach (dies ist ein Terminalfenster, z. B.: Gnome-terminal):
F : Was denkt unix.stackexchange? Könnte diese Wiedergabelösung mit ncurses durchgeführt werden (oder gibt es besser-> portabler / einfacher für einen Nicht-Programmierer?)? Können Sie einige Hinweise / URLs dazu geben? (Können Flüche das tun?)
ps: ein Beispiel für die Terminal-Protokolldateien (ich habe ein Terminal geöffnet, "echo hi" eingegeben und dann das Terminal geschlossen):
[USER@HOST ~/logs] cat -vte 2012-09-14-12h-46m-27s-509330863-log.txt
Script started on Fri 14 Sep 2012 12:46:27 PM CEST$
^[[0;32m[USER@HOST ~]^[[m echo hi^M$
hi^M$
^[[0;32m[USER@HOST ~]^[[m [USER@HOST ~/logs]
[USER@HOST ~/logs]
[USER@HOST ~/logs] cat -vte 2012-09-14-12h-46m-27s-509330863-timing.txt
0.512822 29$
0.179438 1$
0.925494 1$
0.254477 1$
0.065499 1$
0.075037 1$
0.139497 1$
0.136499 1$
0.039944 35$
[USER@HOST ~/logs]
UPDATE: Ich habe ein Kopfgeld für diese Frage festgelegt. :) (oder gibt es bessere Protokollierungslösungen, die gut wiedergegeben werden können? - ty!)
rootsh
können Sie Ihre Ziele erreichen. Es ist einfach perfekt, um Terminalsitzungen zu protokollieren, und ich denke, es kann Ihnen auch dabei helfen, die Sitzung wiederzugeben (fügen Sie Ihrer Protokolldatei Marker / Zeitstempel hinzu). Berechnen Sie einfach das Zeitintervalldt
zwischen aufeinanderfolgenden protokollierten Befehlen, warten Siedt
Sekunden und setzen Sie stdin und stdout der protokollierten Sitzung auf stdout. Und natürlich können Sie dies in ein ncurses-Frontend einbetten, aber ich habe keine Ahnung davon :). Nur meine zwei Cent.