Як я можу зберігати локальний запис часу з усіма віддаленими командами, якими я користуюсь ssh
(командний рядок, що відкривається клієнтом bash
)?
Вимоги:
Основні:
- 100% на стороні клієнта, не покладаючись на реєстрацію сервера
- Налаштовано або встановлено для кожного користувача з журналами, збереженими в домашній довідці користувача.
- Підтримка розрізнення декількох одночасних сеансів з різними користувачами та хостами.
- Не нав'язливий (не потрібно активувати його щоразу і не заважати користуватися ssh)
Високий пріоритет:
- Будь-який вихід не реєструється або відфільтровується максимально
- Або записи в паролі не реєструються, або файл зашифровано
- Позначає фактично використовувані команди (після завершення вкладки / історії, обробок назад, CTRL+ Cтощо) були оброблені
Добре мати:
- Також записує команди в ланцюгові сеанси (команди, введені під час віддалених
ssh
абоsu <user>
сеансів) - Початок і кінець сесії повинні бути зареєстровані
bash
Найкраще було б просто -некореневе рішення (можливо, сценарійalias
абоbash
обгортковий текст дляssh
команди?)
- Також записує команди в ланцюгові сеанси (команди, введені під час віддалених
Мій рівень кваліфікації:
- Я не новачок у програмуванні, але все ще вчусь
bash
і "Linux шляху", тому зразки коду з короткими поясненнями були б найбільш вдячні.
Можливі стратегії
- keylogger - Проблема: реєструє паролі, не записує вкладку / завершення історії (див . відповідь Glenn )
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]
Або, можливо, буде створений окремий журнал для кожного сеансу з командним рядком, який використовується для запуску сеансу у верхній частині файлу.