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
ssh
o lesu <user>
sessioni) - L'inizio e la fine della sessione devono essere registrati
- Una soluzione semplice
bash
, non root, sarebbe la migliore (forse uno scriptalias
obash
wrapper per ilssh
comando?)
- 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
bash
e 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 )
screen
con lo scrollback che scarica una volta al secondo ediff
tra 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.log
come 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.