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
ssh
ousu <user>
) - O início e o fim da sessão devem ser registrados
- Uma
bash
solução simples , sem raiz, seria a melhor (talvez um scriptalias
oubash
wrapper para ossh
comando?)
- 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
bash
e 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 )
screen
com dumping de scrollback uma vez por segundo ediff
entre 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.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]
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.