Volver

Linux

Mandar correo desde la línea de comandos.

Averiguar la IP publica de nuestro router desde la línea de comandos.


En anteriores artículos había realizado un servidor web.
Al no disponer IP fija de mi operadora, al algún caso cuando se reiniciaba el router, se cambiaba la IP pública.
Esto me hacía imposible entrar en mi servidor desde el exterior al no saber la IP en ese momento.
La única forma era mandarme un correo cada cierto tiempo de la IP publica que tengo.
En este artículo explico como averiguar mi IP pública, y cada 12 horas mandar a mi correo personal un correo donde indico la IP publica en ese momento.
El programa que se utiliza para mandar el correo y averiguar la IP pública es curl.
El programa curl es una auténtica navaja suiza, puede trabajar con la mayoría de los protocolos de internet.

Para averiguar nuestra IP pública utilizamos el comando:  
    curl ifconfig.me 
Nos devolvera una dirección IP, que corresponde la IP externa de nuestro router.

Para mandar un correo desde la línea de comandos (el servidor de correos es GMAIL) se utiliza el programa curl con los comandos:
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd   --mail-from 'correoOrigen@gmail.com' --mail-rcpt 'correoDestino@gmail.com'   --upload-file correo.txt --user 'correoOrigen@gmail.com:CONTRASEÑA' --insecure
Como podéis ver, para mandar un correo necesitamos una cuenta de correos de origen, y una cuenta de correos donde vamos a mandar el correo.
El correo mandado será desde un archivo de texto, que en este caso se llama correo.txt .

El fichero modelo del correo tiene el siguiente formato:
correo.txt
From: "SERVIDOR_PI" <correoOrigen@gmail.com>
To: "Otro Nombre" <
correoDestino@gmail.com>
Subject: AsuntoIP

Hola IP actual
vie may 10 00:00:01 CEST 2019
87.221.154.144


Todo lo anterior se junta en un script donde a partir de un modelo de correo, solo cambio las 2 últimas líneas donde inserto la fecha y la IP pública en ese momento.
/home/seta/tareas/tarea1.sh
#!/bin/bash
datecreated=`date`

cd /home/seta/tareas
echo "Mandando correo de la IP actual"
sed -i '$d' correo.txt
sed -i '$d' correo.txt

echo $datecreated >> correo.txt
curl ifconfig.me >> correo.txt

curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd   --mail-from 'correoOrigen@gmail.com' --mail-rcpt 'correoDestino@gmail.com'   --upload-file correo.txt --user 'correoOrigen@gmail.com:CONTRASEÑA' --insecure


Ya tenemos el script creado, pero nos falta que el script se ejecute cada 12 horas.
Para esta tarea utilizaremos cron.  El comando cron es un administrador regular de procesos en segundo plano que viene de serie en linux.
Para añadir el comando que se debe ejecutar en segundo plano, utilizaremos el comando crontab -e  .
Y editaremos de la siguiente forma:

0 */12 * * * /home/seta/tareas/tarea1.sh >/dev/null 2>&1

De esta forma el script se ejecutará cada 12 horas.


Espero que os sirva de algo este artículo.


Saludos
Juan Galaz