То, чего я хочу достичь, - это возможность автоматически записывать сеансы терминала в файл всякий раз, когда я использую Yakuake / Konsole.
Это легко сделать, если в начале моей сессии я сделаю:
script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log
Но я хочу запускать вышеупомянутое автоматически всякий раз, когда я запускаю Yakuake или открываю новую вкладку.
Использование .bashrc не работает, потому что он создает бесконечный цикл, поскольку «скрипт» открывает новый сеанс, который, в свою очередь, читает .bashrc и запускает другой «скрипт» и так далее.
Так что, предположительно, мне нужно как-то написать скрипт Yakuake / Konsole, чтобы один раз запустить «скрипт» при открытии новой вкладки. Вопрос в том, как?
exec
в начале строки. он должен начинатьсяscript -f
в той же оболочке PID.Ответы:
Если кто-то хочет записывать свои терминальные сеансы автоматически - включая сеансы SSH (!) - используя
script
утилиту, вот как.Добавьте следующую строку в конец
.bashrc
вашего домашнего каталога или иным образом,/etc/bash.bashrc
если вы хотите записывать только сессии всех пользователей. Мы проверяем, что родительский процесс оболочки неscript
запущен, а затем запускаемscript
.Для Linux:
Для BSD и macOS измените
script -f
наscript -F
:Вот и все!
Теперь, когда вы откроете новый терминал, вы увидите:
script
запишет ваши сеансы в файл в вашем домашнем каталоге, назвав их30-Nov-11_00-11-12_shell.log
в результате.Больше настроек:
script -a /path/to/single_log_file
script -f
(Linux) илиscript -F
(BSD и macOS)Этот ответ предполагает, что вы
script
установили, конечно. В дистрибутивах на основе Debianscript
является частьюbsdutils
пакета.источник
edit
кнопку, которая появляется прямо под ним.${RANDOM}
и / или$$
к имени файла, так как запуск двух оболочек в секунду друг от друга вызовет конфликт имени файла. Лично я часто использую,script.$(date -u +%Y%m%dt%H%M%S).${HOSTNAME:-$(hostname)}.$$.${RANDOM}.log
чтобы гарантировать, что файлы автоматически сортируются по дате / времени, и они согласованы между TZ, я знаю хост, который его инициировал, я знаю процесс владения, и нет конфликтов имен. Я редко использую,${USER}
потому что это обычно что-то для меня.Хотя этот вопрос был задан человеком, желающим записать свои собственные сеансы, альтернативным вариантом использования может быть системный администратор, который хочет отслеживать действия различных пользователей.
Альтернативный подход
Это руководство с 2008 года ( в архиве ) использует другой метод , чтобы силы
script
для запуска , когда пользователь входит в систему с SSH, который требует , чтобы пользователи войти с / закрытым ключом общественности.Это делается путем добавления сценария в
.ssh/authorized_keys
файл пользователя перед ключом:Затем
log-session
( заархивированный ) сценарий решает, нужно ли запускать/usr/bin/script
для регистрации сеанса этого пользователя.Чтобы пользователь не мог удалить добавленную команду, администратор должен принять на себя ответственность за
authorized_keys
файл пользователя .К сожалению, это означает, что пользователь не сможет самостоятельно добавлять какие-либо дополнительные ключи или, что более важно, отзывать существующий ключ, если он скомпрометирован, что далеко от идеала.
Предостережения
Обычно конфигурация sshd по умолчанию позволяет пользователям выполнять SFTP через свою регистрацию ssh. Это позволяет пользователям редактировать файлы без регистрации изменений. Если администратор не хочет, чтобы пользователи могли это делать, он должен включить ведение журнала для SFTP или отключить службу. Хотя даже в этом случае пользователи могут вносить невидимые изменения в файлы, запустив что-то вроде этого в своем терминале:
Можно отслеживать подобные изменения, используя файловую систему «копировать при записи», которая записывает всю историю файлов.
Но подобный трюк позволит пользователю выполнять команды без их регистрации:
Я не знаю каких-либо простых решений для этого. Возможности могут быть:
Подобные вещи могут быть возможны с помощью audd .
Но все таки...
источник
Вместо того:
Я хотел бы использовать:
В этом случае двойные кавычки не нужны, но я все равно использую их как стандартную практику. Я определенно рекомендую использовать переключатель "x" для grep и pgrep, чтобы избежать редкого, но проблемного совпадения с подстроками.
источник