Come posso conservare un registro locale, con data e ora di tutti i comandi remoti che uso in ssh(client openssh da riga di comando avviato bash)?
Requisiti:
Essenziale:
- 100% lato client senza fare affidamento sulla registrazione del server
- Configurato o installato per utente con i log memorizzati nella home directory dell'utente.
- Supporto per la distinzione tra più sessioni simultanee con vari utenti e host.
- Non invadente (non è necessario attivarlo ogni volta e non interferisce in modo significativo con l'utilizzo di ssh)
Priorità alta:
- L'output non viene registrato o filtrato il più possibile
- Le voci della password non sono registrate o il file è crittografato
- Indica i comandi effettivamente utilizzati (dopo che sono stati elaborati il completamento della scheda / cronologia, i backspaces, CTRL+ C, ecc ...)
Bello avere:
- Registra anche i comandi in sessioni concatenate (comandi immessi durante il telecomando
ssho lesu <user>sessioni) - L'inizio e la fine della sessione devono essere registrati
- Una soluzione semplice
bash, non root, sarebbe la migliore (forse uno scriptaliasobashwrapper per ilsshcomando?)
- Registra anche i comandi in sessioni concatenate (comandi immessi durante il telecomando
Il mio livello di abilità:
- Non sono nuovo nella programmazione, ma sto ancora imparando
bashe il "modo Linux", quindi i campioni di codice con brevi spiegazioni sarebbero apprezzati.
Possibili strategie
- keylogger - Problema: registra le password, non registra il completamento della scheda / cronologia (vedi la risposta di glenn )
screencon lo scrollback che scarica una volta al secondo edifftra di loro per trovare nuove righe di scrollback - Problema: come può essere implementato in un modo automatizzato utile?ssh "$@" | tee >(some_cleaner_function >> $logfile)- Problema: impossibile gestire comandi multilinea o cronologia in sessioni concatenate, è necessaria un'attenta pulizia (vedere la mia risposta)- Una combinazione di alcuni dei precedenti
Un esempio
La seguente sessione 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
Potrebbe risultare in un registro ~/logs/ssh.logcome ad esempio:
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]
Oppure, forse verrà creato un registro separato per ogni sessione con la riga di comando utilizzata per avviare la sessione nella parte superiore del file.