¿Cómo puedo mantener un registro local con marca de tiempo de todos los comandos remotos que uso en ssh(se inició el cliente openssh de línea de comandos bash)?
Requisitos:
Esencial:
- 100% del lado del cliente sin depender del registro del servidor
- Configurado o instalado por usuario con registros almacenados en el directorio de inicio del usuario.
- Soporte para distinguir entre múltiples sesiones simultáneas con varios usuarios y hosts.
- No intrusivo (no es necesario activarlo cada vez y no interfiere significativamente con el uso de ssh)
Alta prioridad:
- Cualquiera de las salidas no se registra o filtra tanto como sea posible
- Las entradas de contraseña no están registradas o el archivo está encriptado
- Indica los comandos reales utilizados (después de que se haya completado la tabulación / historial, retrocesos, CTRL+ C, etc.)
Agradable tener:
- También registra comandos en sesiones encadenadas (comandos ingresados durante sesiones remotas
sshosu <user>) - El inicio y el final de la sesión deben registrarse
- Un simple
bash-Basado, solución que no sea root sería mejor (tal vez unaaliasobashguión envoltorio para elsshcomando?)
- También registra comandos en sesiones encadenadas (comandos ingresados durante sesiones remotas
Mi nivel de habilidad:
- No soy nuevo en programación, pero todavía estoy aprendiendo
bashy en la "forma de Linux", por lo que agradecería mucho las muestras de código con explicaciones breves.
Posibles estrategias
- keylogger - Problema: registra las contraseñas, no registra la finalización de la pestaña / historial (consulte la respuesta de Glenn )
screencon volcado de desplazamiento una vez por segundo ydiffentre ellos para encontrar nuevas líneas de desplazamiento - Problema: ¿cómo se puede implementar de una manera automatizada útil?ssh "$@" | tee >(some_cleaner_function >> $logfile)- Problema: no puede manejar comandos multilínea o historial en sesiones encadenadas, se necesita una limpieza cuidadosa (vea mi respuesta)- Una combinación de algunos de los anteriores.
Un ejemplo
La siguiente sesión 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
Podría resultar en un registro en ~/logs/ssh.logcomo:
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]
O quizás se creará un registro separado para cada sesión con la línea de comando utilizada para iniciar la sesión en la parte superior del archivo.