摘要
history 可以保存历史命令, 执行时间, 但是 执行命令时的屏幕打印的信息无法获取, 不能直观再现操作现场情景。这时就可以使用script 命令, 来记录终端会话轨迹, 保存下来, 进行回放。(一些跳板机或者堡垒机都可以实现这些,并且更友好。)
1.0 script是什么?
script是一个linux 命令,在rhel 7 (rhel 6 中好像也有)系统中都已经集成了。它可以将一个会话的内容(你输入了什么,屏幕又打印了什么)保存到文件中,还是文本格式,可以很方便的查看。
同时还可以使用scriptreplay命令,将保存的文件,通过回放的方式展示出来。
这里只探索script 的使用方式, script 怎么实现的, 则不做讨论。
2.0 script使用
既然是一个系统命令,那用起来就很方便了,同时script又是基于会话进行记录屏幕内容的。所以通常将script写在/etc/profile中,这样每个用户登录时,都会触发记录。当然了,也可以指定用户记录。 如下:
base_dir="/var/log/scripts/`date +%Y`/`date +%m`/`date +%d`/$USER"
if [ $UID -ge 0 ]; then
test -d $base_dir || /usr/bin/mkdir -p $base_dir
exec /usr/bin/script -t 2&>$base_dir/$USER-$UID-`date +%H:%M:%S`.date -a -f -q $base_dir/$USER-$UID-`date +%H:%M:%S`.log
fi
可以看到这里指定了两个文件,*.data 和 *.log ,其中.log 是保存屏幕内容的,.data 用来记录时间戳,这些都是文本文件,可以直接查看。
这些路径可以自己定义,为了方便查看,我做成了这种结构:
script 还有些其他参数,可以找些资料了解下。这个数据存储的目录结构可以根据实际情况,进行定义。因为我这里登录的账号和频率较高,所以才以用户为最小单位。
2.1 记录指定用户会话
回到上面的配置,每个用户登录都会加载 /etc/profile 文件,它其实就是一个shell脚本,我这里通过一个if 判断,来指定uid 大于等于的账号,触发script,也就是所有用户都会记录会话。
如果对指定用户就可以通过这种方式,进行设置,很方便。
同时这里记录的数据,如果数据量增大或者担心被破坏,可以同步的将这些内容,发送到远端服务器,还可以写脚本自动清理 例如:30天前的文件。
3.0 scriptreplay 回放操作记录
回放也和简单, 直接使用 scriptreplay , 依次传入两个文件, 时间戳和数据文件(顺序不要错)。
scriptreplay root-0-10\:03\:57.date root-0-10\:03\:57.log
4.0 此处有坑
https://www.