Mostrando entradas con la etiqueta gmail. Mostrar todas las entradas
Mostrando entradas con la etiqueta gmail. Mostrar todas las entradas

jueves, 13 de noviembre de 2014

Explorando powershell: Script automatizado con envío de ip pública vía email ( Windows Server 2012 + Powershell + email + SCHTASKS )







Hoy veremos un simple script para enviar un email a nuestra email desde powershell con un simple script y automatizaremos esto para que se ejecute cada cierto tiempo, teniendo así actualizada la dirección IP pública.

Lo primero que tenemos que hacer es comprobar que nuestra powershell esté en la versión 4.0, ejecutando 'get-host' nos mostrará la versión actual.

Despues de comprobar la versión vamos a realizar el script esto, lo podemos hacer con un editor cualquiera como notepad++, block de notas o como en mi caso Powershell ISE.

Abrimos a nuestro Powershell ISE (con permisos de administrador) e introducimos la script (mis valores son con cuenta gmail y en las letras en rojo tendréis que editarlas con vuestros valores).


#almacenamos la fecha en la variable $date
$date = Get-Date -format d
#Extraemos la ip de la web "http://chekip.dyndns.com" y la almacenados en la variable $currentip
$currentip = (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]" 
while ($currentip -eq '') {$currentip = (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]"} 
#Montamos nuestro correo añadimos las variables almacenadas y lo enviamos
Write-Host "sending public ip $currentip ..." 
$EmailFrom = "usuario@gmail.com"
$EmailTo = "usuario@gmail.com
$Subject = "#$date - ip windows server
$Body = "Fecha: $date // Public server ip $currentip
$SMTPServer = "smtp.gmail.com
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("cuenta_usuario_mail_sin_dominio", "contraseña_del_email"); 

$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)


Una vez escrito todo lo comprobamos que funciona desde el mismo edito ejecutamos > guardamos y comprobamos que funciona bien tanto en la pantalla, como que llega a nuestro email.






Una vez ejecutado sin fallos comprobamos nuestro email.






Una vez realizado todo lo anterior ahora vamos a crear una tarea programada para añadir este script y que se ejecute cuando nosotros queramos.

Para esto utilizaremos schtask, podemos consultar el enlace anterior o simplemente buscar la ayuda en nuestro powershell con 'schtask /?'. 

Ejemplo explicado:

schtasks /create /sc el_tipo_de_tiempos /mo cada_cuanto_tiempo /d cuantos_dias /tn nombre_tarea_programada /tr /ruta/del/script /st hora_de_inicio

Ejemplo: 


schtasks /create /sc minute /mo 10 /d 31 /tn send_public_ip /tr C:\scripts\public_ip_email_send.ps1 /st 08:00:00







Y por último mostramos el estado de la tarea programada con el comando de consulta query 'schtask /query /TN send_public_ip'.




Y finalmente como vemos en la imagen nos muestra el estado del proceso y cuándo se va a ejecutar la próxima vez. 

Si queremos eliminar nuestro schtask ejecutaremos por ejemplo como es mi caso 'schtask /delete /TN send_public_ip'









miércoles, 5 de noviembre de 2014

Script automatizado con envío de ip pública vía email ( Linux + sSMTP + email + cron&crontab )










Anteriormente vimos en "Enviando email desde consola (Linux): SSMTP + GMAIL" como configurar nuestro sistema para enviar emails desde el terminal y también vimos en "Buscando nuestra dirección ip pública" como saber cual es nuestra ip pública. 

En este caso tiraremos de lo anterior y generaremos un script el cual nos va a permitir tener en nuestro correo la dirección ip pública de nuestro host de forma automatizada y que se ejecutará cuando nosotros queramos. Para esto último tiraremos de cron&contrab que nos permitirá ponerle un tiempo de ejecución a nuestro script para mantener actualizado y saber si hemos tenido algún cambio en nuestra ip pública.


" Como aspecto de seguridad esta "herramienta" la podríamos tener en nuestro propio portátil, así en caso de ser sustraído y conecten nuestro ordenador este ya enviaría la ip pública a nuestro email. Con esta información ya tendríamos un gran paso y nos pondríamos manos a la obra en la recuperación de nuestro portátil. "

Una vez repasado todo la anterior, nos ponemos manos a la obra con nuestro script. Como editor utilizaré vim, pero siempre se puede usar el sencillo nano para ello. Nos vamos al terminal y creamos el script mediante "vim nombrescript.sh". Una vez dentro introducimos el código.


#!/bin/sh
# Script envío ip pública via email.
echo "# Ip publica mserv --> $(curl icanhazip.com) || fecha: $(date)" | mail -s "# mserv ip: $(curl icanhazip.com) | fecha: $(date)" usuario@gmail.com                       

        
                                                 
                                                                    

Este script hace un envío de la ip pública con la fecha y hora al correo electrónico en mi caso gmail.

Una vez tenemos, automatizaremos el proceso para que este script se ejecute cada 5 minutos en nuestro caso (en vuestro caso según el tiempo que deseéis), pero antes de nada vamos hacer un pequeño repaso a crontab.

Con crontab podemos controlar el momento en ele que se ejecutan determinadas tareas según una fecha, una hora, una serie de veces, etc. 

Para usar crontab podemos hacerlo de la siguiente manera:

crontab -e  (Nos permite editar y configurar el script o tarea que se vaya a realizar)
crontab -l   (Nos lista tareas que ya están programadas)
crontab -d  (Borra las tareas que ya están programadas)

Una vez dentro del fichero tendremos que escribir con un orden tal que así ''m h dom mon dow user /command/ruta/del/script.sh'
  • m = el minuto en el que se va a ejecutar.
  • h  = la hora en que se va a ejecutar.
  • dom = el día del mes en el que se va a ejecutar.
  • dow = el día de la semana.
  • user = el usuario que lo va a ejecutar.
  • command = la ruta del script que vamos a ejecutar. 

Tenemos también caracteres especiales predefinidos como son:

  • @reboot (al iniciarse el sistema)
  • @yearly (una vez al año)
  • @annually (una vez al año)
  • @monthly (una vez al mes)
  • @weekly (una vez a la semana)
  • @daily (una vez al día)
  • @midnight (una vez al día)
  • @hourly  (una vez cada hora)

Una vez visto por encima pondré un par de ejemplos

*/30 * * * * /ruta/del/script.sh (se ejecutará cada 30 minutos)

30 21 * 7 root apt-get -y update (el domingo a las 21:30 root ejecutará la actualización)

Si necesitáis más ejemplos, aquí los tenéis

Una vez habiendo visto crontab por encima procedemos a hacer nuestro ejemplo. Abrimos la consola y escribimos '
crontab -e'. Una vez ahí escribiré mi ejemplo (si vosotros usáis otro pues el vuestro).


*/5 * * * * /ruta/del/script/enviodecorreoip.sh 


 (esto lo que hará será dirigirse a la ruta del script y ejecutarlo cada 5 minutos) 


Una vez echo esto nos dirigimos a nuestro correo (gmail en mi caso) y comprobamos que ha comenzado a funcionar.