Execute o script (system) no login e / ou logout do SSH

12

Eu 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.

    
por sunside 29.10.2010 / 20:02

4 respostas

9

Você pode forçar um comando para seus usuários de SSH em vez do que eles solicitam (ou seu shell se eles não derem um comando específico). Isso pode ser feito especificando esse comando com algo como ForceCommand /root/ssh-wrapper in /etc/ssh/sshd_config (não importa onde o script está localizado ou como é chamado, apenas certifique-se de que ele é executável por todos os usuários e o arquivo de configuração sshd aponta para isto). Você também precisa reiniciar / recarregar sshd . O comando original está acessível para o comando forçado como $SSH_ORIGINAL_COMMAND .

Eu acabei de hackear este script:

#! /bin/sh

# add logger options when needed
log="logger -t ssh-wrapper"

# find IP address
ip='echo $SSH_CONNECTION | cut -d " " -f 1'

$log $USER login from $ip
espeak "$USER just logged in from $ip" > /dev/null 2>&1

$log command: ${SSH_ORIGINAL_COMMAND:-shell}
${SSH_ORIGINAL_COMMAND:-shell}

$log $USER logout
espeak "$USER just logged out" > /dev/null 2>&1

Agora, toda vez que eu faço login ou faço logout, uma voz fala sobre isso e uma entrada de log é gravada no syslog. Também registra o comando. Você pode usar algo como o seguinte para "seguir" o uso do sshd:

tailf /var/log/syslog | grep ssh-wrapper

Por favor, note que este script é principalmente não testado, então use a seu próprio risco! ; -)

PS: lembre-se que este script é executado como o usuário que efetuou login, então você não pode fazer tudo o que quiser se você o alterar para adicionar mais recursos ...

    
por JanC 30.10.2010 / 05:55
1

Eu já vi esses eventos correspondentes no arquivo de log antes (o que permitiria flexibilidade na correspondência de qualquer coisa). Esta página está mal formatada, mas pode ajudá-lo a começar: link com esound

    
por kanaka 29.10.2010 / 20:47
0

(Resposta publicada na mesma pergunta em ServerFault )

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. 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/auth para sessões ssh novas (e de fechamento). Dessa forma, seria capaz de enviar notificações no login e no logout.

    
O
por EEAA 29.10.2010 / 20:54
0

Você pode usar o sshrc (man sshd, procurar por sshrc)

ssh executará o / etc / ssh / sshrc se ele existir e você pode executar um script (ou chamar vários scripts) a partir dali

você pode chamar qualquer variável bash, como $USER ou obter o IP via

read -d " " ip <<< $SSH_CONNECTION

você pode escrever um script para testar ou registrar o que quiser.

Script de logout ... bem, é isso que estou procurando! : D

    
por higuita 06.06.2016 / 20:53