Aviso por Telegram de los acceso a través de SSH

 

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 :

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"
URL="https://api.telegram.org/bot$KEY/sendMessage"
DATE_EXEC="$(date "+%d %b %Y %H:%M")"
TMPFILE='/tmp/ipinfo-$DATE_EXEC.txt' // creamos un archivo temporal 
if [ -n "$SSH_CLIENT" ]; then
	IP=$(echo $SSH_CLIENT | awk '{print $1}') //extraemos la IP del Cliente
	PORT=$(echo $SSH_CLIENT | awk '{print $3}') //extraemos el puerto 
	HOSTNAME=$(hostname -f) //extraemos el nombre del equipo
	IPADDR=$(curl -s http://whatismijnip.nl |cut -d " " -f 5) //obtenemos la IP externa
	curl http://ipinfo.io/$IP -s -o $TMPFILE //Consultamos la información de conexión del cliente y lo guardamos en el archivo temporal 
	BOGON=$(cat $TMPFILE | jq '.bogon' | sed 's/"//g') // extraemos si la conecsion es Bogon
	if $BOGON ;then
		TEXT="$DATE_EXEC: ${USER} logged in to $HOSTNAME ($IPADDR) from Local Network $IP on port $PORT" //creamos el texto a enviar 
	else
		CITY=$(cat $TMPFILE | jq '.city' | sed 's/"//g') // extraemos la ciudad del archivo temporal  
		REGION=$(cat $TMPFILE | jq '.region' | sed 's/"//g') //extraemos la provincia del archivo temporal 
		COUNTRY=$(cat $TMPFILE | jq '.country' | sed 's/"//g') //extraemos el pais del archivo temporal 
		ORG=$(cat $TMPFILE | jq '.org' | sed 's/"//g') //extraemos el proveedor u organización de la conexión
		TEXT="$DATE_EXEC: ${USER} logged in to $HOSTNAME ($IPADDR) from $IP - $ORG - $CITY, $REGION, $COUNTRY on port $PORT" //creamos el texto a enviar 
	fi
	curl -s --max-time $TIMEOUT -d "chat_id=$USERID&disable_web_page_preview=1&text=$TEXT" $URL > /dev/null 2>&1 //enviamos el texto por telegram 
	rm $TMPFILE //eliminamos el archivo temporal
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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *