Bash Command Logger - PullRequest
       6

Bash Command Logger

5 голосов
/ 25 августа 2011

Мне было любопытно, из любопытства, можно ли закодировать сценарий bash, регистрирующий все команды, выполняемые в сеансе Bash / SSH.Я знаю, что history должен регистрировать все запущенные команды, но это кажется очень ненадежным!

Сегодня я связывался с этим и придумал следующий скрипт bash, который регистрирует, что пользователь запускаеттерминал, но не выполняет все команды правильно.

prompt_read() {
  echo -n “$(whoami)@$(hostname):$(pwd)~$ “
  read userinput
}

prompt_read

while :; do
  if [[ $userinput != exit ]]; then
    logger "logit $userinput"
    bash -c "$userinput"
    prompt_read
  else
    kill -1 $PPID
  fi
done

Кто-нибудь знает что-нибудь, что регистрирует команды лучше и надежнее, чем history

Приветствия

Ответы [ 3 ]

8 голосов
/ 25 августа 2011

Причина, по которой история кажется вам ненадежной, заключается в том, что она записывает в историю только в конце сеанса BASH, поэтому вы можете потерять команды.

В моем профиле bash есть несколько вещей:

HISTFILESIZE=10000 # how many lines of history to store in the history file

HISTSIZE=10000 # how many lines of history to store in a session ( I think )

HISTCONTROL=ignoredups # ignore duplicate commands

shopt -s histappend # append history, rather than having sessions obliterate existing history
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

Последние несколько являются важными, установка PROMPT_COMMAND с помощью history -a сделает историю добавленной немедленно, а не после сеанса. А установка shopt -s histappend сделает сеансы bash добавленными в файл истории, а не перезаписывает существующие истории.

Дополнительная информация: http://linuxcommando.blogspot.com/2007/11/keeping-command-history-across-multiple.html

Кроме того, если это полезно для вас, вы можете изменить имя файла истории, который вы используете для определенного сеанса bash, с помощью переменной среды HISTFILE.

4 голосов
/ 25 августа 2011

Сценарий проверки: http://bashshell.net/commands/using-the-script-command/

Записывает все, что появляется на терминале, в файл, и iirc может воспроизводить записанный сеанс.

Вы можете установить это как оболочку пользователя, чтобы она записывала все при входе в систему.

2 голосов
/ 13 сентября 2012

Вы можете найти скрипт здесь для записи всех команд / встроенных команд bash в текстовый файл или сервер 'syslog' без использования патча или специального исполняемого инструмента.

Вы также можете писать напрямую без системного журнала в файл журнала.

Это очень легко развернуть, так как это простой сценарий оболочки, который нужно вызвать один раз при инициализации 'bash'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...