Estoy buscando una manera de ejecutar SSH (OpenSSH en particular, pero no necesariamente) y registrar todos los comandos que ejecuto en el control remoto en un archivo local.
Ejecutar cada comando como un comando ssh independiente registraría cada comando en mi historial local, pero generalmente no es deseable ejecutarlo, por ejemplo.
ssh [email protected] -- foo -a --bar baz
para cada comando.
Prefiero ingresar por ssh al servidor de forma normal, ya sea a través del propio ssh o mediante un comando contenedor, como 'ssh-logging'.
Estoy imaginando que el programa guarde los comandos ingresados a través de ssh en un archivo en la máquina cliente local de manera comparable a cómo lo hacen los shells, por ejemplo, ~/.ssh_history parece un buen valor predeterminado, tal vez permutado por combinación de usuario + host, pero no lo hago. Realmente me importa dónde se guarda en este momento.
En resumen, me gustaría que sucediera algo como lo siguiente:
~ $ ssh [email protected]
[user@host ~]$ foo --bar
[user@host ~]$ exit
~ $ cat .ssh_history_user@host
foo --bar
exit
~ $
¿Existe tal cosa, ya sea como una oscura configuración de cliente OpenSSH, o como parte de otro cliente ssh de código abierto/libre, o como un programa contenedor ligero que puede simplemente interponerse en el camino de las entradas estándar del usuario y enviar de forma transparente ¿Los guarda en la entrada estándar del programa en ejecución mientras los registra? (Escuché que SecureCRT tiene una función de registro que quizás sea más o menos así, pero al menos en mi vida personal no deseo usar herramientas que no sean FLOSS).
Respuesta1
Si estás en Unix, la utilidad estándarscript
está diseñado para este propósito. Si ejecuta script
sin argumentos, inicia una copia de su shell y registra la sesión en un archivo llamado "mecanografiado":
~ jdoe$ script
Script started, output file is typescript
bash-3.2$ date
Fri May 8 16:29:44 EDT 2015
bash-3.2$ exit
exit
Script done, output file is typescript
~ jdoe$ cat typescript
Script started on Fri May 8 16:29:42 2015
bash-3.2$ date
Fri May 8 16:29:44 EDT 2015
bash-3.2$ exit
exit
Script done on Fri May 8 16:29:45 2015
~ jdoe$
Puede especificar el archivo para iniciar sesión y el comando para ejecutar en lugar del shell. Esta parte no está completamente estandarizada. En mi sistema OSX, lo ejecutarías así:
script name-of-log-file command arg...
eg
script ssh-log ssh user@somehost
Con la versión común de Linux, lo ejecutarías así:
script -c 'command arg...' name-of-log-file
eg
script -c 'ssh user@somehost' ssh-log
Respuesta2
Gracias aEugenio Rieckcomentario sobre la tubería ssh a través de la camiseta, pude implementar uncontenedor de registro alrededor de sshque hace lo que estaba buscando.