En este artículo, recorrerá la creación de un script de shell Bash simple para enviar mensajes a Telegram messenger usando el comando Curl. Luego, utilizará este script para enviar una notificación en cada inicio de sesión ssh en su servidor.
Para enviar un mensaje a un grupo o canal de Telegram, primero debe crear su propio bot. Solo abre Telegram, busca @BotFather y escribe
/start
. Luego, siga las instrucciones para crear un bot y obtener un token para acceder a la API HTTP.Cree un nuevo canal en Telegram y agregue su bot como miembro . Entonces tu bot podría enviar mensajes al Canal.
Para obtener la identificación del canal, primero publique cualquier mensaje en el canal. Luego use esta plantilla de enlace para obtener la ID del canal:
https://api.telegram.org/bot<YourBOTToken>/getUpdates
Aquí hay un ejemplo de respuesta:
{ "ok" : true , "result" : [ { "update_id" : 123 , "channel_post" : { "message_id" : 48 , "chat" : { "id" : -123123123 , // this is your channel id "title" : "Notifications" , "type" : "channel" }, "date" : 1574485277 , "text" : "test" } } ] }
Para enviar un mensaje podríamos usar un comando simple:
curl 'https://api.telegram.org/bot<YourBOTToken>/sendMessage?chat_id=<channel_id>&text=<text>'
Pero en programación, es una buena práctica ocultar la implementación de bajo nivel. Entonces crearemos un comando de terminal Linux
telegram-send
y podría enviar mensajes con este simple comando.Vamos a crear archivo
telegram-send.sh
touch telegram-send.sh
Luego agregue el script a este archivo. Establezca su identificación de grupo y token en el script.
#!/bin/bash GROUP_ID=<group_id> BOT_TOKEN=<bot_token> # this 3 checks (if) are not necessary but should be convenient if [ " $1 " == "-h" ]; then echo "Usage: `basename $0 ` \"text message\"" exit 0 fi if [ -z " $1 " ] then echo "Add message text as second arguments" exit 0 fi if [ " $# " -ne 1 ]; then echo "You can pass only one argument. For string with spaces put it on quotes" exit 0 fi curl -s --data "text= $1 " --data "chat_id= $GROUP_ID " 'https://api.telegram.org/bot' $BOT_TOKEN '/sendMessage' > /dev/null
No es una buena práctica almacenar su token en ese lugar, pero por ahora está bien. Además, podría limitar las acciones que su bot podría hacer en el Canal solo para enviar mensajes.
Para ejecutar este script debemos agregar permiso
chmod +x telegram-send.sh
Ahora puedes probarlo
./telegram-send.sh "Test message"
Para usar este script desde todas partes y escribir
telegram-send
en cambio ./telegram-send.sh
agréguelo a la carpeta /usr/bin/ sudo mv telegram-send.sh /usr/bin/telegram-send
El propietario de todos los archivos en /usr/bin es usuario raíz. Así que hagamos lo mismo con nuestro script:
sudo chown root:root /usr/bin/telegram-send
Ahora puedes probarlo
telegram-send "Test message"
Todos los archivos con la extensión .sh en la carpeta /etc/profile.d/ se ejecutarán cada vez que se ingrese un shell de inicio de sesión de bash o se cargue la sesión de escritorio.
Agreguemos un nuevo script para enviar la notificación.
touch login-notify.sh
Agregue este código al script
#!/bin/bash # prepare any message you want login_ip= " $(echo $SSH_CONNECTION | cut -d " " -f 1) " login_date= " $(date +"%e %b %Y, %a %r") " login_name= " $(whoami) " # For new line I use $'\n' here message= "New login to server" $ '\n' " $login_name " $ '\n' " $login_ip " $ '\n' " $login_date " #send it to telegram telegram-send " $message "
Luego mueva este script a la carpeta /etc/profile.d/
sudo mv login-notify.sh /etc/profile.d/login-notify.sh
Ahora vuelva a iniciar sesión en su servidor web y compruebe que funciona.
Publicado anteriormente en https://bogomolov.tech/Telegram-notification-on-SSH-login/