¿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
ssh
osu <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 unaalias
obash
guión envoltorio para elssh
comando?)
- 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
bash
y 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 )
screen
con volcado de desplazamiento una vez por segundo ydiff
entre 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.log
como:
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.