Executar script (sistema) no login e / ou logout SSH
12
Gostaria que meu servidor OpenSSH iniciasse um script sempre que um usuário efetuar login usando SSH, passando o nome do host ou IP idealmente, bem como o nome do usuário. Além disso, eu gostaria que ele executasse um script, sempre que uma sessão terminasse (passando o nome de usuário). Esses scripts não devem ser executados na sessão do usuário, mas em todo o sistema.
A idéia é emitir um aviso de áudio no login e logout, por exemplo espeak, usando e exibir as informações em um monitor externo.
Vi que existe um pam-scriptspacote, mas não tenho certeza se isso faz o que quero, nem como usá-lo.
Você pode forçar um comando para seus usuários SSH em vez daquele que eles solicitam (ou seu shell, se não derem um comando específico). Isso pode ser feito especificando esse comando com algo como ForceCommand /root/ssh-wrapperin /etc/ssh/sshd_config(não importa onde o script está localizado ou como ele é nomeado, apenas verifique se ele é executável por todos os usuários e o arquivo de configuração sshd aponta para ele). Você também precisa reiniciar / recarregar sshd. O comando original está acessível ao comando forçado como $SSH_ORIGINAL_COMMAND.
Acabei de hackear esse 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 logoff, uma voz me fala sobre isso e uma entrada de log é gravada no syslog. Ele 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
Observe que esse script geralmente não foi testado; portanto, use por seu próprio risco! ;-)
PS: lembre-se de que este script é executado como o usuário que efetuou login, portanto, você não pode fazer tudo o que quiser se o alterar para adicionar mais recursos ...
Oi, Existe alguma maneira de detectar a situação quando o usuário acabou de fechar a janela com o cliente ssh. Seu script não liga essa situação. Obrigado.
Dmitry Eskin
Em shell$ {SSH_ORIGINAL_COMMENT: -shell} deve ser substituído pelo caminho real para o shell, por exemplo. / bin / bash? Quando apenas tento executar isso, ele reclama que não existe um comando como o shell. Na verdade, acho que talvez o que você quis dizer com $ SHELL? Isso deve executar o shell especificado do usuário.
Ibrahim
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:
https://help.ubuntu.com/community/AudibleLogs#Play with esound
Eu acho que você / eles querem dizer em espeakvez de esound?
janc
0
(Resposta cruzada da mesma pergunta no ServerFault )
Apenas escreva um script para fazer o que quiser e depois cole-o /etc/profileou possivelmente /etc/bash.bashrcdependendo de suas necessidades. As alterações nesses arquivos serão aplicadas a todos os usuários. Não sei ao certo como você notificaria o logout com essa abordagem.
Como alternativa, outra maneira de fazer isso seria ter um daemon simples monitorando /var/log/authnovas sessões (e fechando) ssh. Dessa forma, seria capaz de enviar notificações no logon e logout.
# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh
Não há necessidade de reiniciar nenhum serviço. Observe que esse script também será executado quando um usuário efetuar login no terminal em vez do SSH.
Nota 1: Você pode canalizar para espeakou qualquer outro processo que atenda às suas necessidades (email, notificação por push etc.). Se você usar writee o usuário estiver logado, ele ou ela verá as mensagens de saída diretamente em seu terminal.
shell
$ {SSH_ORIGINAL_COMMENT: -shell} deve ser substituído pelo caminho real para o shell, por exemplo. / bin / bash? Quando apenas tento executar isso, ele reclama que não existe um comando como o shell. Na verdade, acho que talvez o que você quis dizer com $ SHELL? Isso deve executar o shell especificado do usuário.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: https://help.ubuntu.com/community/AudibleLogs#Play with esound
fonte
espeak
vez deesound
?(Resposta cruzada da mesma pergunta no ServerFault )
Apenas escreva um script para fazer o que quiser e depois cole-o
/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 ao certo como você notificaria o logout com essa abordagem.Como alternativa, outra maneira de fazer isso seria ter um daemon simples monitorando
/var/log/auth
novas sessões (e fechando) ssh. Dessa forma, seria capaz de enviar notificações no logon e logout.fonte
Você pode usar o sshrc (man sshd, procure por sshrc)
O ssh executará o / etc / ssh / sshrc, se existir, e você poderá executar um script (ou chamar vários scripts) a partir daí
você pode chamar qualquer variável bash, curtir
$USER
ou obter o IP viavocê pode escrever um script para testar ou registrar o que quiser.
Script de logout ... bem, é isso que estou procurando! : D
fonte
Eu acho que o PAM é a melhor opção. É em todo o sistema e não pode ser substituído pelos arquivos de configuração do usuário.
Você pode seguir estas etapas. Eles trabalharam para mim no Ubuntu 14.04.4 LTS.
Corre:
Edite esse arquivo vazio e adicione estas linhas:
Depois disso, dê permissão de execução ao script:
Agora, execute:
Adicione estas linhas no final do arquivo:
Não há necessidade de reiniciar nenhum serviço. Observe que esse script também será executado quando um usuário efetuar login no terminal em vez do SSH.
Nota 1: Você pode canalizar para
espeak
ou qualquer outro processo que atenda às suas necessidades (email, notificação por push etc.). Se você usarwrite
e o usuário estiver logado, ele ou ela verá as mensagens de saída diretamente em seu terminal.Referências:
https://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https://blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands-on -login de usuário/
Relacionado:
Como configuro um alerta de email quando um login ssh é bem-sucedido?
/server/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely-accessed-via
/server//questions / 395393 / email-notification-about-each-ssh-connection-to-linux-server
fonte