Я пытаюсь зарегистрироваться, все команды работали всеми пользователями. Я получил решение от GitHub
function log2syslog
{
declare COMMAND
COMMAND=$(fc -ln -0)
logger -p local1.notice -t bash -i -- "${USER}:${COMMAND}"
}
trap log2syslog DEBUG
PROMPT_COMMAND='history -a >(tee -a ~/.bash_history | logger -t "$USER[$$] $SSH_CONNECTION")'
но если мы просто совершаем нападки, входят многократно, журнал утверждает, что мы на самом деле выполнили команду многократно также. Как я могу избежать этого?
Нет необходимости использовать fc
, если вам просто нужна текущая командная строка, так как переменная оболочки BASH_COMMAND
содержит именно это. Я бы просто перехватил сигнал DEBUG
и использовал бы эту переменную , как и раньше , например:
trap 'echo "$USER":"$BASH_COMMAND" >>/path/to/log' DEBUG
Это также имеет то преимущество, что он ничего не записывает в журнал, если Вы просто нажимаете Enter kbd> - fc
просто читает последнюю запись из списка истории. К сожалению, я не смог проверить вашу команду logger
в моей системе, но вы звучите так, как будто она работала нормально, поэтому это также должно работать:
trap 'logger -p local1.notice -t bash -i -- "$USER":"$BASH_COMMAND"' DEBUG
Примечание как alias
похоже на ls
, записываются пустые строки ( Enter kbd>) и команды опечаток.
$ trap 'echo "$USER":"$BASH_COMMAND" >>/path/to/log' DEBUG
$ uname
Linux
$ pwd
/home/dessert
$ hostname
dessert’s plowhorse
$ ls
dir1 file1 file2
$
$
$ bahs
No command 'bahs' found, did you mean:
Command 'bash' from package 'bash' (main)
Command 'bats' from package 'bats' (universe)
bahs: command not found
$ cat /path/to/log
dessert:uname
dessert:pwd
dessert:hostname
dessert:ls --color=auto
dessert:bahs
dessert:cat /path/to/log
У меня есть очень похожая проблема. Так как я не хочу создавать дубликаты для той же проблемы, я собираюсь отправить мой в здесь также.
Я использовал синтаксис регистратора прерывания от десерта, но встречаюсь с очень нечетным последующим сообщением в моем/var/log/messages файле
Я добавил эту строку в конце своего/etc/profile:
trap 'logger -p local1.notice -t bash -i -- "${USER}":"$BASH_COMMAND"' DEBUG
Когда я теперь выслеживаю/var/log/messages в отдельном окне терминала, оно показывает мне команду, которую я выполнил в первом терминале и добавляю вторую строку, которая похожа на это:
Jun 13 11:42:34 vm-centos bash[1521]: root:nano /etc/profile
Jun 13 11:43:14 vm-centos bash[1524]: root:printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
Я предполагаю, что вторая строка хочет сказать мне, что существует некоторая ошибка, но я не вижу ошибки. У Вас есть идея, как я мог избавиться от второй строки с printf?
Благодарность заранее