質問 :シェル コマンド履歴を Syslog にリダイレクトする方法は?
これを行うにはいくつかの方法があります。以下の 3 つの方法のいずれかを試すことができます:
方法 1 – rsyslog サービス経由
rsyslog を使用してすべてのシェル コマンドをログに記録するには、次の手順に従ってください:
1. 新しい rsyslog 構成ファイルを作成し、ログ ファイルのパスを定義します。例:/var/log/commands.log .
# vi /etc/rsyslog.d/bash.conf local6.* /var/log/commands.log
2. ユーザーの ~/bashrc を編集します .注:このようなログが必要なすべてのユーザーの ~/bashrc を編集する必要があります。
# vi ~/.bashrc whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')" export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
例:
[root@hostname ~]# cat ~/.bashrc | tail -n2 whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')" export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' [root@hostname ~]#
3. rsyslog サービスを再起動します
# systemctl restart rsyslog
すべて完了。以下のログ形式の例を参照してください:
[root@hostname ~]# date Thu Apr 9 00:26:11 EDT 2020 [root@hostname ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.9 (Maipo)
[root@hostname ~]# tail -2 /var/log/commands.log Apr 9 00:26:11 hostname root: [email protected] [1643]: date [0] Apr 9 00:26:18 hostname root: [email protected] [1643]: cat /etc/redhat-release [0] [root@hostname ~]#
方法 2 – bash シェル オプション経由
1.「shopt -s syslog_history」を追加します ‘ システム全体のスタートアップ /etc/profile または個人の初期化ファイル ~/.bash_profile に。例:
[root@hostname ~]# cat /etc/profile | grep shopt shopt -s syslog_history
2. ログアウトしてから再度ログインして、このオプションを反映してください。
3. ログの例:
[root@hostname ~]# pwd /root [root@hostname ~]# date Thu Apr 9 01:26:46 EDT 2020
[root@hostname ~]# tail -2 /var/log/messages Apr 9 01:26:46 hostname -bash: HISTORY: PID=1345 UID=0 date Apr 9 01:26:52 hostname -bash: HISTORY: PID=1345 UID=0 tail -2 /var/log/messages
[bob@hostname ~]$ tail -f /var/log/messages Apr 9 01:26:45 hostname -bash: HISTORY: PID=1345 UID=0 pwd Apr 9 01:26:46 hostname -bash: HISTORY: PID=1345 UID=0 date Apr 9 01:26:52 hostname -bash: HISTORY: PID=1345 UID=0 tail -2 /var/log/messages
方法 3 – スクリプト コマンド経由
さらに、単一の端末セッションのみをログに記録したい場合は、以下のように「スクリプト」コマンドを試してみてください。これも使いやすく、非常に役立ちます。
1. ロギングを開始するには、以下を実行してください:
# script /tmp/screen.log
2. これで、bash コマンドを開始できます。終了したら、終了できます:
# exit
次に、すべてのセッションをファイル /tmp/screen.log に保存します
3. 出力を確認します:
# cat /tmp/screen.log
例:
[root@hostname ~]# script /tmp/screen.log Script started, file is /tmp/screen.log [root@hostname ~]# date Thu Apr 9 00:28:26 EDT 2020 [root@hostname ~]# whoami root [root@hostname ~]# exit exit Script done, file is /tmp/screen.log
[root@hostname ~]# cat /tmp/screen.log Script started on Thu 09 Apr 2020 12:28:23 AM EDT [root@hostname ~]# date Thu Apr 9 00:28:26 EDT 2020 [root@hostname ~]# whoami root [root@hostname ~]# exit exit Script done on Thu 09 Apr 2020 12:28:42 AM EDT [root@hostname ~]#