I need to log in to various servers via ssh, and its a useful thing to log the terminal (even things in smitty menus/AIX and with correct/exact date/time). I already have a solution for this:
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
And this works GREAT!
Now, the question is: how to replay these terminal loggings? This is the default way to do this:
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. It works. But it's not enough..: you can only start playing the recording. But what if you need the recording only from given time, or you need to know when exactly was a command excuted (you can see this in the terminal logfiles+timing files that "script" generates). Or better: you need terminal logging for educational purposes (so you need to stop the replay of the recording to write something down from it, etc.).
For these replay problems, I still haven't found and good programs. So I though I should write my own program about this (but I have only bash scripting experience).
I thought the best would be for this task is using ncurses (the replay solution needs to be used on several different OSes, like: OpenBSD, Ubuntu, Redhat). - the terminal logging could be an "auditing tool" to trace what the users done via SSH.
So I'm thinking about this (this is a terminal window, ex.: gnome-terminal):
Q: What does unix.stackexchange think? Could this replay solution done with ncurses (or are there better->more portable/easy for a non programmer?)? Can you provide some hints/URL's how to do this? (can ncurses do this?)
p.s.: a sample for the terminal logging files (I opened a terminal, typed "echo hi", then closed the terminal):
[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: I set a bounty on this question. :) (or are there any better logging solutions that can be replayed well? - ty!)
rootsh
can help you to achieve your goals. It is just perfect to log terminal sessions and i think it can help you to replay session as well (add marker/time stamps to your log file). Just calculate the time intervaldt
between consecutive logged commands, waitdt
seconds and put the stdin and stdout of the logged session on stdout. And of course you can embed this in a ncurses front end, but i have no idea about that :) . Just my two cents.