Como configuro um alerta de e-mail quando um login ssh é bem-sucedido?

41

Alguém tem um script bash que enviará por email ou notificar alguém no caso de um login bem-sucedido em um servidor ssh? Quero ser notificado se alguém fizer login em minha caixa pessoal.

Estou usando o Ubuntu 12.04 executando o xfce

    
por Rick T 24.08.2012 / 16:10

8 respostas

41
  

Aviso: de acordo com os comentários, isso não funciona se o usuário criar um arquivo chamado ~/.ssh/rc . *

Modifique ou crie /etc/ssh/sshrc com o seguinte conteúdo:

ip='echo $SSH_CONNECTION | cut -d " " -f 1'

logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | sendemail -q -u "SSH Login" -f "Originator <[email protected]>" -t "Your Name <[email protected]>" -s smtp.server.com &

Isso o notificará efetivamente por e-mail sempre que alguém fizer login por meio do SSH, e o login será registrado no syslog.

Observação: você precisará do pacote sendemail ( sudo apt-get install sendemail ) para que a notificação por e-mail funcione.

Observação: funciona com o encaminhamento de porta, mas com a opção -N não.

    
por SirCharlo 24.08.2012 / 17:16
55
  

Aviso: Como sempre, ao alterar a configuração de login, deixe uma sessão ssh de backup aberta em segundo plano e teste o login a partir de um novo terminal.

Como o método sshrc não funciona se o usuário tiver seu próprio arquivo ~/.ssh/rc , explicarei como fazer isso com pam_exec conforme sugerido pelo @adosaiguas. O bom é que isso também pode ser facilmente adaptado para tipos de login diferentes de ssh (como logins locais ou até mesmo todos os logins) conectando em um arquivo diferente em /etc/pam.d/ .

Primeiro você precisa ser capaz de enviar e-mail a partir da linha de comando. Existem outras questões sobre isso. Em um servidor de email, é provavelmente mais fácil instalar o mailx (que provavelmente já está instalado).

Então você precisa de um arquivo de script executável login-notify.sh (eu coloquei em /etc/ssh/ , por exemplo) com o seguinte conteúdo. Você pode alterar as variáveis para alterar o assunto e o conteúdo da notificação por e-mail. Não se esqueça de executar chmod +x login-notify.sh para torná-lo executável.

#!/bin/sh

# Change these two lines:
sender="[email protected]"
recepient="[email protected]"

if [ "$PAM_TYPE" != "close_session" ]; then
    host="'hostname'"
    subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
    # Message to send, e.g. the current environment variables.
    message="'env'"
    echo "$message" | mailx -r "$sender" -s "$subject" "$recepient"
fi

Depois de ter isso, você pode adicionar a seguinte linha a /etc/pam.d/sshd :

session optional pam_exec.so seteuid /path/to/login-notify.sh

Para fins de teste, o módulo é incluído como optional , para que você ainda possa efetuar login se a execução falhar. Depois de ter certeza de que funciona, você pode alterar optional para required . Então, o login não será possível a menos que a execução do seu script de gancho seja bem-sucedida (se é isso que você quer).

Para aqueles que precisam de uma explicação sobre o que é o PAM e como ele funciona, aqui é muito bom um .

    
por Fritz 16.04.2014 / 16:39
8

Temos usado monit para monitorar processos em nossas caixas de linux. O monit também pode alertar por e-mails em logins bem-sucedidos sobre o ssh. Nossa configuração monit se parece com isso

 check file ssh_logins with path /var/log/auth.log  
     # Ignore login's from whitelist ip addresses
     ignore match "100.100.100.1"    
     # Else, alert
     if match "Accepted publickey" then alert

Nota: A configuração do servidor de e-mail, o formato de e-mail, etc. devem ser configurados em monitrc file

Atualização: Escreveu uma postagem no blog mais detalhada isso

    
por Litmus 02.06.2014 / 13:52
4

Coloque o seguinte em /etc/profile :

if [ -n "$SSH_CLIENT" ]; then 
    TEXT="$(date): ssh login to ${USER}@$(hostname -f)" 
    TEXT="$TEXT from $(echo $SSH_CLIENT|awk '{print }')" 
    echo $TEXT|mail -s "ssh login" [email protected] 
fi

Como o script funciona

/etc/profile é executado a cada login (para usuários do shell bash). A declaração if só retornará true se o usuário tiver efetuado login via ssh, o que, por sua vez, fará com que o bloco de código indentado seja executado.

Em seguida, criamos o texto da mensagem:

  • $(date) será substituído pela saída do comando date
  • ${USER} será substituído pelo nome de login do usuário
  • $(hostname -f) será substituído pelo nome do host completo do sistema que está sendo registrado em

A segunda linha TEXT é adicionada à primeira, fornecendo o endereço IP do sistema do qual esse usuário está efetuando login. Finalmente, o texto gerado é enviado em um email para o seu endereço.

Resumo O Linux irá, por padrão, registrar cada login do sistema, seja por ssh ou não, nos arquivos de log do sistema, mas às vezes - particularmente para um sistema que raramente é acessado via ssh - uma notificação rápida e suja pode ser útil.

    
por user476225 26.11.2015 / 11:48
1

Nesta outra pergunta , você provavelmente tem o que está procurando. Basicamente, você pode adicionar uma chamada ao comando de e-mail no script que é executado quando um usuário efetua login via ssh: /etc/pam.d/sshd

    
por adosaiguas 24.08.2012 / 17:01
1

Esse script em /etc/ssh/sshrc envia um email e adiciona um log ao criador de logs do sistema. Uma diferença é feita (para que você possa desativá-lo, se quiser) entre sua sub-rede pessoal e a world wide web (requer sudo apt-get install mailutils ).

SUBNET="192.168.0"

IP='echo $SSH_CONNECTION | cut -d " " -f 1'
CURRENT_SUBNET="$(echo $IP|cut -d'.' -f1-3)"
if [ "$CURRENT_SUBNET" = "$SUBNET" ]; then
        msg="This message comes from same subnet! User $USER just logged in from $IP"
        echo $msg|mail -s "$msg" root
else
        msg="This message comes from different subnet! User $USER just logged in from $IP"
        echo $msg|mail -s "$msg" root
fi

logger -t ssh-wrapper $USER login from $IP
    
por Philippe Gachoud 11.05.2018 / 15:11
0

Eu acabei de modificar a resposta do @SirCharlo

ip='echo $SSH_CONNECTION | cut -d " " -f 1'

logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | mail -s "SSH Login" "who to <[email protected]>" &

Isso funciona em 14.04, 16.04 e servidores Centos 6.5.x que eu configurei, eu tenho certeza que você precisa garantir que o mta está configurado, mas uma vez feito isso, isso funciona bem. Próximo passo alertas do twilio

    
por MrMesees 13.12.2016 / 14:24
0

Eu peguei algumas das excelentes respostas deste tópico e fiz algo que é mais ou menos copiável e copiável. Ele usa o Mailgun para enviar os e-mails para que você não tenha problemas com a configuração do STMP. Você só precisa de uma chave de API do Mailgun e um domínio de envio.

Após o login SSH, o script enviará detalhes do login (usuário, nome de host, endereço IP e todas as variáveis de ambiente atuais) para um endereço de e-mail. É fácil adicionar outros parâmetros que você deseja enviar, personalizando a variável message .

#!/bin/sh

# this script is triggered on SSH login and sends an email with details of the login
# such as user, IP, hostname, and environment variables

# script should be placed somewhere on the server, eg /etc/ssh
# to trigger on SSH login, put this line in /etc/pam.d/sshd:
#   session optional pam_exec.so seteuid /etc/ssh/snippet-for-sending-emails-on-SSH-login-using-PAM.sh

# Script settings
MAILGUN_API_KEY=
MAILGUN_DOMAIN=
SENDER_NAME=
SENDER_EMAIL_ADDRESS=
RECIPIENT_EMAIL_ADDRESS=

if [ "$PAM_TYPE" != "close_session" ]; then
    host=$(hostname)
    ip=$(dig +short myip.opendns.com @resolver1.opendns.com) # gets public IP
    # Message to send, e.g. the current environment variables.
    subject="SSH login - user:$USER pam-host:$PAM_RHOST host:$host ip:$ip" \
    message=$(env)
    curl -s --user '$MAILGUN_API_KEY' \
        https://api.mailgun.net/v3/$MAILGUN_DOMAIN/messages \
        -F from='$SENDER_NAME <$SENDER_EMAIL_ADDRESS>' \
        -F to=$RECIPIENT_EMAIL_ADDRESS \
        -F subject="$subject" \
        -F text="${subject} ${message}"
fi
    
O
por pacharanero 16.11.2017 / 19:12

Tags