以前構築したシステムの要件に、操作履歴としてhistoryを保管というものがあったのですが、NW機器にssh接続する要件があり、その作業の操作履歴はhistoryには保存されないため、scriptコマンドで操作ログを取得することにしました。
scriptコマンドは、何もオプションを付けなくてもログを取得できますが、デフォルトではカレントディレクトリにtypescriptというファイル名でログが保存されます。
ただそれでは管理がしにくいので、
script /<保存先>/<ログファイル名>.log
と実行すると、指定のディレクトリへ好きな名前で保存できます。
ログの取得を終了したい場合は、exitコマンド(もしくはCtrl+d)を実行すると、終了することが出来ます。
また、同じ日に再度作業するのであれば、同じログに書き込みたい事もあるかと思いますが、その場合は-aオプションを付けると、同じログに追記することが出来ます。
これで簡単に操作ログを取得することが出来ますが、毎回手動で実行するのは忘れてしまう可能性が高いので、ログイン時に自動的にログが取得できるように設定します。
こちらのサイトを参考にし、要件に合わせて書き換えます。
if [ "$SHLVL" = "2" ] && [ ! -z "$PS1" ] ; then
[ -d /var/log/history ] || mkdir /var/log/history
script -af /var/log/history/`whoami`.log
fi
こちらを各ユーザの.bashrcに追記し、保存すれば完了です!
ログインし直してみると、
Script started on /var/log/history/ユーザ名.log
と表示され、ログの取得が始まったことが分かります。
ただ、こちらの設定はloglotateでローテーションすることを前提にしているので、ログローテしない場合はログファイル名に日付などを入れた方が良いです。
(永遠に同じログに書き続けてしまうと思います…)
ちなみにscriptコマンドの-fオプションは、操作内容をファイルに即時反映するもので、こちらを指定しないとexitを実行するタイミングでログが書き込まれるようなのですが、前に実行中のログを確認したら文字化けしていたので、付けなくても良いかもしれません。
ログを確認する場合は、一度exitでログの取得を終了させてから見てください!
また、$SHLVLという変数はシェルの深さを表しているようで、コンソールからログインしていた時は参考にしたサイトと同じように「1」で設定していましたが、
Teratermからssh接続するようになってからは取得ができなくなり、$SHLVLを「2」に変更してみたところ取得できるようになったので、上手くいかない場合は$SHLVLを見直してみてください!
ではまた!![]()