Ubuntu / Debian / OpenSSH: script Executar (sistema) no login SSH e / ou logout

2

No Ubuntu, gostaria que meu servidor OpenSSH iniciasse um script sempre que um usuário efetuasse login usando o SSH, de preferência transmitindo o nome do host ou o IP, bem como o nome do usuário. Além disso, eu gostaria que ele executasse um script sempre que uma sessão fosse terminada (passando o nome de usuário). Esses scripts não devem ser executados na sessão do usuário, mas no sistema inteiro.

A ideia é fornecer um aviso de áudio no login e logout, por exemplo usando espeak e para exibir as informações em um monitor externo.

Eu vi que há um pacote pam-scripts , mas não tenho certeza se isso faz o que eu quero, nem como usá-lo.

Qualquer ajuda é apreciada! - Markus

(Eu também postei essa pergunta em askubuntu .)

    
por sunside 29.10.2010 / 20:19

3 respostas

8

Aqui está um script wrapper a ser chamado pelo ForceCommand em sshd_config. Isso diferencia entre um comando de login e um comando chamado via ssh como ssh host "ls -l" , já que você pode querer lidar com isso de maneira diferente.

#!/bin/bash

if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
    eval $SSH_ORIGINAL_COMMAND
else
    echo "LOGIN: $USER $SSH_CONNECTION" >> /tmp/ssh.log
    $SHELL
    echo "LOGOUT: $USER $SSH_CONNECTION" >> /tmp/ssh.log
fi

Você pode substituir os comandos de eco com o que quiser. As informações de IP estão em $SSH_CONNECTION , faça o que você quiser.

Se você chamar isso de /usr/local/bin/ssh-command.sh , adicione isso ao seu sshd_config :

ForceCommand /usr/local/bin/ssh-command.sh

É provavelmente uma boa ideia usar Match para apenas capturar certos usuários. Supondo que todos os usuários estejam no grupo "gobias":

Match Group gobias
    ForceCommand /usr/local/bin/ssh-command.sh

De qualquer forma, talvez valha a pena.

    
por 29.10.2010 / 22:01
3

Basta escrever um script para fazer o que quiser e, em seguida, colocá-lo em /etc/profile ou possivelmente /etc/bash.bashrc dependendo de suas necessidades. As alterações nesses arquivos serão aplicadas a todos os usuários. No entanto, não sei como você notificaria no logout com essa abordagem.

Como alternativa, outra maneira de fazer isso seria ter um daemon simples monitorando /var/log/secure (ou /var/log/auth , dependendo de qual distro você estiver usando) para sessões ssh novas (e de fechamento). Dessa forma, seria capaz de enviar notificações no login e no logout.

    
por 29.10.2010 / 20:47
1

Se o arquivo / etc / ssh / sshrc existir, ele será executado por sh (1) depois de ler o ambiente do usuário, mas antes de iniciar o shell ou comando do usuário. Veja man sshd .

Por exemplo, o seguinte adicionado a / etc / ssh / sshrc produzirá a saída mostrada quando um usuário fizer login com sucesso via OpenSSH:

~$ cat /etc/ssh/sshrc
echo "Login by $USER from $SSH_CLIENT on 'date'" >> /var/log/ssh_connections.log

Saída em /var/log/ssh_connections.log:

Login by Markus from 10.0.0.1 57853 22 on Fri Oct 29 03:41:31 2010
    
por 29.10.2010 / 21:03