以前構築したシステムの要件に、操作履歴として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
を見直してみてください!
ではまた!