Linuxには、scriptコマンドというシェル上で操作した内容を記録するコマンドが存在している。

これに関連するコマンドで、「scriptreplay」というコマンドが存在している。
「scriptreplay」は、「script」コマンドで記録されたログをもとに、実際にターミナル上で操作を行った状態を再生してくれるコマンドだ。

「scriptreplay」で操作を再生させるには、「script」コマンドで「-t」オプションを用いて、ターミナル上での入力時間データを記録させる必要がある。

まずは、以下のコマンドでターミナル上の操作結果を記録する「test.session」と、そのタイミングを記録した「test.time」を作成する。
この際、日本語環境のままだとうまく動作しないため、「LANG= 」を文頭につけて実行する。

LANG= script -t 2> test.time -a test.session

scriptでの記録を終了するには、「exit」コマンドを入力する。

exit

実際に行った操作を再生してみよう。
以下のコマンドでリプレイ再生を行う。

script -t 2> test.time -a test.session

ローカル環境ではうまく再生出来たようだ。
次はSSHでの接続環境ではどうだろうか?

…うーん、どうもSSH経由だと微妙な動作だなぁ。
言語が英語だったらまだしも、日本語だとあんまり実用的ではなさそう??

なお、以下の内容を「/etc/bash.bashrc」に追記することで、「/var/log/session/」フォルダ以下に全ユーザのログイン後の記録を保持させることができる。
事前にフォルダの作成と権限の設定が必要なので注意。

# Record terminal sessions.
if [ "x$SESSION_RECORD" = "x" ]; then
    timestamp=`date "+%m%d%Y%H%M"`
    output=/var/log/sessions/session.$USER.$$.$timestamp
    SESSION_RECORD=started
    export SESSION_RECORD
    script -t -f -q 2>${output}.timing $output
fi

「tail-F」で開くことで、ユーザの操作をリアルタイムで監視することも可能だ。
特にログローテーションはかからないので、実用する場合は容量の事も考えてログローテーションの方法を考えてあげること。