Enviando correos desde la terminal de bash de Rapsbian.
A veces crear un programa de Python para enviar correo electrónico, sobre todo la primera vez que lo haces, puede resultar un poco engorroso. Por eso, resulta más útil tener configurado un servidor smtp que nos permita enviar correos directamente desde el terminal. Una vez que lo tenemos configurado, además de enviar emails desde la línea de comandos, podremos incluso usar posteriormente Python para enviar mensajes.
En la Rapsberry Pi funciona bien el programa msmtp.
1.- Instalación.
pi@raspberrypi:~ $ sudo apt-get install msmtp
2.- Configuración.
Lo primero que tenemos que hacer es crear nuestro archivo de configuración del programa. En este ejemplo voy a usar una cuenta para trastear que tengo de gmail, pero puedes usar la de otro proveedor y te dará la configuración para tu cuenta. Tecleamos el siguiente comando:
pi@raspberrypi:~ $ msmtp --configure tuCuentaEmail@gmail.com
# - copy this to your configuration file /home/pi/.msmtprc # - encrypt your password: # gpg -e -o ~/.msmtp-password.gpg account tuCuentaEmail@gmail.com host smtp.gmail.com port 587 tls on tls_starttls on auth on user tuCuentaEmail passwordeval gpg --no-tty -q -d ~/.msmtp-password.gpg from tuCuentaEmail@gmail.com
En nuestro directorio home creamos el fichero ~/.msmtprc
pi@raspberrypi:~ $ nano .msmtprc
Como yo solo voy a usar esta cuenta de gmail, en la cuarta línea del archivo de configuración, cambio 'account tuCuentaEmail@gmailc.om' por 'account default' ya que no voy a usar más correos y esta va a ser la cuenta por defecto.
.msmtp
# - copy this to your configuration file /home/pi/.msmtprc # - encrypt your password: # gpg -e -o ~/.msmtp-password.gpg account default host smtp.gmail.com port 587 tls on tls_starttls on auth on user tuCuentaEmail passwordeval gpg --no-tty -q -d ~/.msmtp-password.gpg from tuCuentaEmail@gmail.com
pi@raspberrypi:~ $ chmod 600 .msmtprc
pi@raspberrypi:~ $ echo "This is an email test." | msmtp -d correoDestino@outlook.com
3.- Aumentar la seguridad.
Es sistema que hemos utilizado para enviar el correo no es muy práctico. Si tenemos un script automático no podemos estar delante para teclear la contraseña. Y mucho menos (aunque si pones una línea como 'password tuContraseña' en la configuración funcionaría) guardar tu contraseña de correo en el archivo de configuración que al fin y al cabo es un archivo de texto plano. Todo esto lo hacemos directamente desde la rapsberry pi o desde una conexión vnc. (Por que a mi por lo menos si me conecto mediante ssh para la configuración me funciona a medias. Una vez configurado ya puedo mandar los correos de una forma normal.)
Para incrementar la seguridad podemos hacer dos cosas.
A) Usar gnome-keyring
Si ya tenemos Raspbian instalado en modo gráfico podemos utilizar esta opción para guardar nuestra contraseña de correo codificada y no tener que teclearla cada vez que mandemos un correo.
Es importante no tener el autologin activado al iniciar Rapsbian ya que si lo tenemos en automático la primera vez que enviemos un correo nos dirá que el "llavero estandar", donde se guarda la contraseña está bloqueado y tendremos que usar la contraseña del llavero para desbloquearla. Aunque solo la primera vez que lo utilicemos. Aunque se podría solucionar dejando la clave del llavero en blanco (y entonces no nos pediría desbloquearla) por seguridad no es recomendable.
Empezamos instalando las librerías necesarias:
pi@raspberrypi:~ $ sudo apt-get install libsecret-tools
pi@raspberrypi:~ $ sudo apt-get install gnome-keyring
pi@raspberrypu:~ $ secret-tool store --label=msmtp host smtp.gmail.com service smtp user tuCuentaEmail
Aquí nos pedirá la contraseña de gmail. La introducimos y después de darle al enter, nos saldrá esta ventana:
Para que funcione todo bien, utilizamos de contraseña, la misma que tengamos para el usuario 'pi' o tu usuario en el comienzo de sesión. Así cuando nos registremos para acceder a la raspberry con el usuario pi o el que tú uses, automáticamente se desbloqueara el llavero de contraseñas y no tendremos que introducirla cada vez que mandemos un email.
pi@raspberrypi:~ $ secret-tool lookup host smtp.gmail.com
account default
host smtp.gmail.com
port 587
tls on
tls_starttls on
auth on
user tuCuentaEmail
passwordeval secret-tool lookup host smtp.gmail.com
from tuCuentaEmail@gmail.com
Procedemos a reiniciar la rapsberry pi y nos aseguramos de no logearnos automáticamente, sino tecleando la contraseña. (si tienes el logueo automático puedes cambiarlo con sudo raspi-config en opciones de inicio)
Cuando arranque de nuevo, intentamos enviar un email cualquiera y nos saldrá que aun, la contraseña del llavero está bloqueada y se necesita autentificación. Si queremos que se desbloquee al inicio de la sesión, dejamos la opción marcada "Desbloquear este depósito de claves automáticamente siempre que hay iniciado sesión" e introducimos de nuevo la contraseña que pusimos. (la que pusimos antes y recuerda que tuvo que ser la misma que usa tu usuario para iniciar sesión)
B) Guardar la contraseña encriptada.
Para encriptar la clave del correo vamos a usar gpg que ya viene por defecto en Rapsbian.
(existe un paquete más moderno gpg2, pero voy a usar este aunque sea más antiguo porque ya viene por defecto).
Generaremos nuestras claves público-privadas:
pi@raspberrypi:~ $ gpg --gen-key
Nombre y apellidos: tuCuentaEmail Dirección de correo electrónico: tuCuentaEmail@gmail.com Ha seleccionado este ID de usuario: "tuCuentaEmail <tuCuentaEmail@gmail.com>"
# Vamos al directorio /dev/shm pi@raspberrypi:~ $ cd /dev/shm pi@raspberrypi:/dev/shm $ # Creamos un directorio temporal y le asignamos permisos solo al usuario. pi@raspberrypi:/dev/shm $ mkdir temporal pi@raspberrypi:/dev/shm $ chmod 700 temporal pi@raspberrypi:/dev/shm $ cd temporal # Codificamos nuestra contraseña de gmail. Dentro de temporal tecleamos: > gpg --encrypt --output=.msmtp-password.gpg --recipient=tuCuentaEmail@gmail.com - <<END > LacontraseñademicorreoGmail > END
EXPLICACIÓN DEL COMANDO ANTERIOR.
1) Primero tecleamos el comando y pulsamos Intro. Asegúrate de no olvidar el guión cerca del final, lo que haría que el comando gpg leyera la clave privada de codificación de la "entrada standar" de linux, con lo que dejamos la puerta abierta a que otro la pudiera leer.
2) Luego en esa línea ponemos la contraseña de la cuenta de gmail y pulsamos Intro.
3) tecleamos END y pulsamo intro.
Y ya está, si ahora miramos el directorio veremos nuestro archivo con la contraseña codificada:
pi@raspberrypi:/dev/shm/temporal $ ls -a . .. .msmtp-password.gpg
pi@raspberrypi:~ $ chmod 600 .msmtp-password.gpg
pi@raspberrypi:/dev/shm $ mv .msmtp-password.gpg ~/
Importante. Tenemos que entrar en el archivo de configuración de msmtp y descomentar la línea que comentamos al principio para que nos quede así:
msmtprc
# - copy this to your configuration file /home/pi/.msmtprc
# - encrypt your password:
# gpg -e -o ~/.msmtp-password.gpg
account default
host smtp.gmail.com
port 587
tls on
tls_starttls on
auth on
user tuCuentaEmail
passwordeval gpg --no-tty -q -d ~/.msmtp-password.gpg
from tuCuentaEmail@gmail.com
Sin embargo por alguna extraña razón (algun bug) si intentamos mandar ahora un correo este no funciona porque
pi@raspberrypi:~ $ echo "This is an email test." | msmtp -d correoDestino@outlook.com ignoring system configuration file /etc/msmtprc: No existe el fichero o el directorio loaded user configuration file /home/pi/.msmtprc falling back to default account gpg: descifrado fallido: No secret key msmtp: cannot read output of 'gpg --no-tty -q -d ~/.msmtp-password.gpg'
Instalamos el paquete pinentry-gtk-2
pi@raspberrypi:~ $ sudo apt-get install pinentry-gtk2
y luego tenemos que crear en el directorio .gnupg el archivo gpg-agent.conf (sino existe ya) y poner esta línea:
~/.gnupg/gpg-agent.conf
pinentry-program /usr/bin/pinentry-gtk-2
Y por fin si mandamos un correo con el comando que vimos al principio del post ya funciona y nos pide la contraseña para desencriptar. Lo bueno además es que esta contraseña queda codificada en cache y podemos seguir mandando correos sin tener que volverla a teclear mientras dure la sesión.
No hay comentarios:
Publicar un comentario