Comandos de log executados por SSH no lado do cliente

0

Eu estou procurando uma maneira de executar o SSH (OpenSSH em particular, mas não necessariamente) e registrar todos os comandos que eu executo no controle remoto, para um arquivo localmente.

A execução de cada comando como um comando ssh independente registraria cada comando no meu histórico local, mas geralmente é indesejável executar, por exemplo,

ssh [email protected] -- foo -a --bar baz

para todos os comandos.

Eu prefiro ssh no servidor de forma normal, seja através do próprio ssh, ou através de um comando wrapper, como 'ssh-logging'.

Estou visualizando o programa salvando a entrada de comandos através do ssh em um arquivo na máquina do cliente local de forma comparável à forma como as shells fazem isso, por exemplo. ~ / .ssh_history parece ser um bom padrão, talvez permutado por combinação de usuário + host, mas eu não me importo com onde ele salva neste momento.

Em suma, gostaria que algo como o seguinte acontecesse:

~ $ ssh [email protected]
[user@host ~]$ foo --bar
[user@host ~]$ exit
~ $ cat .ssh_history_user@host
foo --bar
exit
~ $

Existe tal coisa, seja como uma configuração obscura do cliente OpenSSH, ou como parte de outro cliente ssh open-source / libre, ou como um programa wrapper fino que pode simplesmente se colocar no caminho das entradas stdin do usuário, e transparente enviá-los para o stdin do programa em execução ao registrá-los? (Eu ouço que o SecureCRT tem um recurso de registro que talvez seja mais ou menos assim, mas pelo menos na minha vida pessoal eu não desejo usar ferramentas que não sejam do FLOSS).

    
por mtraceur 04.05.2015 / 21:05

2 respostas

0

Se você estiver no unix, o utilitário padrão script foi projetado para essa finalidade. Se você executar script sem argumentos, ele iniciará uma cópia do seu shell e registrará a sessão em um arquivo chamado "typescript":

~ 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$ 

Você pode especificar o arquivo para o qual fazer login e o comando para executar em vez do shell. Esta parte não é completamente padronizada. No meu sistema OSX, você executaria assim:

script name-of-log-file command arg...
eg
script ssh-log ssh user@somehost

Com a versão comum do Linux, você executaria assim:

script -c 'command arg...' name-of-log-file
eg
script -c 'ssh user@somehost' ssh-log
    
por 08.05.2015 / 22:37
0

Graças ao comentário de Eugen Rieck sobre o piping ssh através do tee, consegui implementar um registrando o wrapper em torno do ssh que faz o que eu estava procurando.

    
por 06.05.2015 / 16:12