Para recibir un aviso cada vez que se hace un acceso a través de ssh, necesitamos crear un pequeño script que nos diga la ip de la persona que acede y otros datos.
Lo primero que necesitamos es la librería de JSON processor
sudo apt-get install jq
y luego creamos el archivo ssh-telegram.sh y lo editamos en la carpeta de /etc/profile.d, que contiene los script que se ejecutaran a todos los usuarios al iniciar sesión.
sudo nano /etc/profiles.d/ssh-telegram.sh
He introducimos el siguiente código :
#!/bin/bash USERID="USERID" #UserId de telegram de la persona a la que le llegan los mensajes KEY="API KEY" #API key de el Bot de Telegram. TIMEOUT="10" TIMEOUT="10" URL="https://api.telegram.org/bot$KEY/sendMessage" DATE_EXEC="$(date "+%d %b %Y %H:%M")" TMPFILE='/tmp/ipinfo-$DATE_EXEC.txt' if [ -n "$SSH_CLIENT" ]; then IP=$(echo $SSH_CLIENT | awk '{print $1}') PORT=$(echo $SSH_CLIENT | awk '{print $3}') HOSTNAME=$(hostname -f) IPADDR=$(curl -s http://whatismijnip.nl |cut -d " " -f 5) curl http://ipinfo.io/$IP -s -o $TMPFILE BOGON=$(cat $TMPFILE | jq '.bogon' | sed 's/"//g') if $BOGON ;then TEXT="$DATE_EXEC: ${USER} logged in to $HOSTNAME ($IPADDR) from Local Network $IP on port $PORT" else CITY=$(cat $TMPFILE | jq '.city' | sed 's/"//g') REGION=$(cat $TMPFILE | jq '.region' | sed 's/"//g') COUNTRY=$(cat $TMPFILE | jq '.country' | sed 's/"//g') ORG=$(cat $TMPFILE | jq '.org' | sed 's/"//g') TEXT="$DATE_EXEC: ${USER} logged in to $HOSTNAME ($IPADDR) from $IP - $ORG - $CITY, $REGION, $COUNTRY on port $PORT" fi curl -s --max-time $TIMEOUT -d "chat_id=$USERID&disable_web_page_preview=1&text=$TEXT" $URL > /dev/null 2>&1 rm $TMPFILE fi
Para obtener el User Id y el Api key de Telegram os recomiendo revisar esta entrada
Al hacer login a través de SSH, nos manda un mensaje parecido a este:
Edición : he cambiado el script para que avise de las conexiones cuando es local o exterior
Hola mi nombre es Pedro , primero de todo agradecer el post , me ha sido muy útil , soy nuevo en esto ( aun que se podría decir que me pilla mayor XD ) y voy aprendiendo a medida que me encuentro con proyectos a realizar , la interacción de Telegram y mi Paspberry pi era de mi interés .
Solo he modificado el tramo final del script porque me daba error .
URL=”https://api.telegram.org/bot$KEY/sendMessage”
curl -s -X POST $URL -d chat_id=$USERID -d text=”$TEXT” &>/dev/null
No se si me abre dejado algo útil, pues aunque estuve analizando el código y buscando e interpretando algunos comando que desconocía , esta parte no se si es un error pero me lo daba y no acabe de interpretar:
$URL > /dev/null 2>&1
Por otra parte , lo guarde en la ubicación correcta /etc/profiles.d/ssh-telegram.sh , pero e aquí una duda si podrías echarme un cable , he instalado zsh con shell por curiosidad y pruebas y en este caso el script deja de funcionar , podrías orientarme del porqué?
Un saludo y gracias de antemano .
Hola Pedro. gracias por pasarte por aquí.
He actualizado el script, por que los símbolos si que estaban mal.
También he añadido al principio del script “#!/bin/bash” para que no de problemas desde zsh
Revísalo y si tienes cualquier duda no dudes en preguntar
Hola otra vez , la verdad no lo he conseguido , he agregado #!/bin/bash, pero no me ha funcionado , buscando por ahí he por lo que he leído que zsh no trabaja con /etc/profile.d.
https://askubuntu.com/questions/476246/when-i-use-zsh-how-do-i-set-path-in-etc-profile-d.
Siguiendo los comentarios de un usuario he añadido la modificación que describen en /etc/zsh/zshenv .
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
Cuando he cambiado de Shell y he vuelto a entrar por ssh me envía 3 notificaciones seguidas XDD.
Seguiré investigando, merci por tu interés también .
Hola
Te comento no me acordaba que lo resolví de otra forma en mi servidor .. lo acabo de ver
usando el pam.d.
Prueba a abrir el archivo /etc/pam.d/common-session y en el puedes añadir al final algo como esto :
#Notify through Telegram
session optional pam_exec.so type=open_session /opt/scripts/telegram_login.sh