Você pode fazer isso usando o PAM e o módulo pam_exec.so
.
Você simplesmente adiciona uma linha a /etc/pam.d/sshd
à seção "sessão", como a seguir:
session optional pam_exec.so /usr/local/bin/ipset-ssh
Em que ipset-ssh
é algum script criado por você.
O script será executado como root. Você pode obter o endereço IP do cliente com a variável PAM_RHOST
. Você também desejará verificar a variável PAM_TYPE
, pois seu script será executado no login e no logout. No login PAM_TYPE
será definido como open_session
. No logout, ele é definido como close_session
.
Aqui está a lista completa de variáveis que recebo de um teste simples (coloquei env > /tmp/pamenv
no script):
PAM_SERVICE=sshd
PAM_RHOST=127.0.0.1
GNOME_KEYRING_CONTROL=/home/phemmer/.cache/keyring-vJUUda
PAM_USER=phemmer
PWD=/
GNOME_KEYRING_PID=19742
SHLVL=1
PAM_TYPE=open_session
PAM_TTY=ssh
_=/usr/bin/env
Seu script pode ser tão simples quanto:
#!/bin/bash
[[ "$PAM_TYPE" == "open_session" ]] && ipset add whitelist $PAM_RHOST