Como posso manter um registro local com registro de data e hora de todos os comandos remotos em que uso ssh(o cliente openssh da linha de comando é iniciado bash)?
Requisitos:
Essencial:
- 100% do lado do cliente sem depender do log do servidor
- Configurado ou instalado por usuário com logs armazenados no diretório inicial do usuário.
- Suporte para distinguir entre várias sessões simultâneas com vários usuários e hosts.
- Não intrusivo (não é necessário ativá-lo todas as vezes e não interfere significativamente no uso do ssh)
Prioridade máxima:
- A saída não é registrada ou filtrada o máximo possível
- As entradas de senha não são registradas ou o arquivo é criptografado
- Indica os comandos reais usados (após a conclusão da guia / histórico, backspaces, CTRL+ C, etc ... foram processados)
Bom ter:
- Também registra comandos em sessões encadeadas (comandos inseridos durante sessões remotas
sshousu <user>) - O início e o fim da sessão devem ser registrados
- Uma
bashsolução simples , sem raiz, seria a melhor (talvez um scriptaliasoubashwrapper para osshcomando?)
- Também registra comandos em sessões encadeadas (comandos inseridos durante sessões remotas
Meu nível de habilidade:
- Eu não sou novo em programação, mas ainda estou aprendendo
bashe do "jeito Linux", portanto, exemplos de código com breves explicações seriam muito apreciados.
Estratégias possíveis
- keylogger - Problema: registra senhas, não registra a conclusão da guia / histórico (consulte a resposta de glenn )
screencom dumping de scrollback uma vez por segundo ediffentre eles para encontrar novas linhas de scrollback - Problema: como isso pode ser implementado de uma maneira automatizada útil?ssh "$@" | tee >(some_cleaner_function >> $logfile)- Problema: não é possível manipular comandos de múltiplas linhas ou histórico em sessões encadeadas, é necessária uma limpeza cuidadosa (veja minha resposta)- Uma combinação de algumas das opções acima
Um exemplo
A seguinte sessão 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
Pode resultar em um log ~/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]
Ou talvez seja criado um log separado para cada sessão com a linha de comando usada para iniciar a sessão na parte superior do arquivo.