Как я могу сохранить локальную метку времени всех удаленных команд, которые я использую ssh
(клиент openssh из командной строки запускается bash
)?
Требования:
Essential:
- 100% на стороне клиента, не полагаясь на ведение журнала на сервере
- Сконфигурированный или установленный для пользователя с журналами, сохраненными в домашнем каталоге пользователя.
- Поддержка различения нескольких одновременных сеансов с различными пользователями и хостами.
- Ненавязчивый (не нужно активировать его каждый раз и не сильно мешает использованию ssh)
Высокий приоритет:
- Либо вывод не зарегистрирован или отфильтрованы в максимально возможной степени
- Либо записи пароля не зарегистрированы, либо файл зашифрован
- Указывает фактические используемые команды (после завершения табуляции / истории, возвраты, CTRL+ Cи т.д ...)
Хорошо бы иметь:
- Также регистрирует команды в связанных сессиях (команды, введенные во время удаленных
ssh
илиsu <user>
сессий) - Начало и конец сеанса должны быть зарегистрированы
bash
Лучше было бы использовать простое решение без полномочий root (возможно, сценарийalias
илиbash
оболочка дляssh
команды?)
- Также регистрирует команды в связанных сессиях (команды, введенные во время удаленных
Мой уровень мастерства:
- Я не новичок в программировании, но я все еще учусь
bash
и "способ Linux", поэтому примеры кода с краткими пояснениями будут наиболее цениться.
Возможные стратегии
- Кейлоггер - Проблема: регистрирует пароли, не регистрирует вкладку / историю завершения (см . ответ Гленна )
screen
с выгрузкой прокрутки один раз в секунду иdiff
между ними для поиска новых строк прокрутки - Проблема: как это можно реализовать полезным автоматическим способом?ssh "$@" | tee >(some_cleaner_function >> $logfile)
- Проблема: не может обрабатывать многострочные команды или историю в связанных сессиях, необходима тщательная очистка (см. Мой ответ)- Сочетание некоторых из вышеперечисленных
Пример
Следующая сессия SSH:
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
Может привести к записи в журнале, ~/logs/ssh.log
например:
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
Или, возможно, для каждого сеанса будет создан отдельный журнал с командной строкой, используемой для запуска сеанса в верхней части файла.