Frage :Wie kann ich den Verlauf der Shell-Befehle auf Syslog umleiten?
Dazu gibt es mehrere Methoden. Sie können es mit einer der drei folgenden Methoden versuchen:
Methode 1 – über den rsyslog-Dienst
Um rsyslog zum Protokollieren aller Shell-Befehle zu verwenden, befolgen Sie einfach die folgenden Schritte:
1. Erstellen Sie eine neue rsyslog-Konfigurationsdatei und definieren Sie den Protokolldateipfad. Beispiel:/var/log/commands.log .
# vi /etc/rsyslog.d/bash.conf local6.* /var/log/commands.log
2. Bearbeiten Sie ~/bashrc des Benutzers . Hinweis:Sie müssen das ~/bashrc jedes einzelnen Benutzers bearbeiten, der solche Protokolle benötigt.
# 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]"'
Zum Beispiel:
[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. Starten Sie den rsyslog-Dienst neu
# systemctl restart rsyslog
Alles erledigt. Siehe das Beispiel für das Protokollformat unten:
[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 ~]#
Methode 2 – über Bash-Shell-Option
1. Fügen Sie „shopt -s syslog_history“ hinzu ‘ in die systemweite Startdatei /etc/profile oder die persönliche Initialisierungsdatei ~/.bash_profile. Zum Beispiel:
[root@hostname ~]# cat /etc/profile | grep shopt shopt -s syslog_history
2. Melden Sie sich ab und wieder an, um diese Option wiederzugeben.
3. Protokollbeispiel:
[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
Methode 3 – per Skriptbefehl
Wenn Sie nur eine einzelne Terminalsitzung protokollieren möchten, versuchen Sie es einfach mit dem Befehl „script“ wie unten, er ist ebenfalls einfach zu verwenden und sehr hilfreich.
1. Um mit der Protokollierung zu beginnen, führen Sie einfach Folgendes aus:
# script /tmp/screen.log
2. Jetzt können Sie Ihre Bash-Befehle starten. Sobald Sie fertig sind, können Sie beenden:
# exit
Es speichert dann die gesamte Sitzung in einer Datei /tmp/screen.log
3. Überprüfen Sie die Ausgaben:
# cat /tmp/screen.log
Zum Beispiel:
[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 ~]#