<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.7">Jekyll</generator><link href="https://proyectos.parravidales.es/feed.xml" rel="self" type="application/atom+xml" /><link href="https://proyectos.parravidales.es/" rel="alternate" type="text/html" /><updated>2020-06-04T06:38:34+00:00</updated><id>https://proyectos.parravidales.es/feed.xml</id><title type="html">Parra</title><subtitle>Mi bloc de notas online, proyectos y cacharreos varios</subtitle><entry><title type="html">Monitorizar Raspberry Pi</title><link href="https://proyectos.parravidales.es/Monitorizar-Raspberry-Pi/" rel="alternate" type="text/html" title="Monitorizar Raspberry Pi" /><published>2019-09-24T00:00:00+00:00</published><updated>2019-09-24T00:00:00+00:00</updated><id>https://proyectos.parravidales.es/Monitorizar-Raspberry-Pi</id><content type="html" xml:base="https://proyectos.parravidales.es/Monitorizar-Raspberry-Pi/">&lt;p&gt;No pude evitarlo… Los &lt;em&gt;dashboards&lt;/em&gt; y la monitorización es algo que siempre me ha llamado la atención, sobre todo cuando es útil 
para ver de un vistazo el estado de un sistema o de una aplicación. Y desde que conocí &lt;strong&gt;Grafana&lt;/strong&gt; estaba claro que en algún momento 
acabaría implementando algún sistema en mi &lt;em&gt;Raspberry&lt;/em&gt; que la usara. Pero primero empecemos por partes, y en orden…&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;En esta entrada veremos cómo configurar:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://influxdata.staging.wpengine.com/time-series-platform/telegraf/&quot;&gt;&lt;strong&gt;Telegraf&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.influxdata.com/get-influxdb/&quot;&gt;&lt;strong&gt;InfluxDB&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://grafana.com/&quot;&gt;&lt;strong&gt;Grafana&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;IMPORTANTE&lt;/strong&gt;: En este tutorial se contempla la instalación en una &lt;em&gt;Raspberry Pi Model B&lt;/em&gt; con &lt;em&gt;Debian 9 Stretch&lt;/em&gt;. Comprueba la 
versión de tu sistema y modifica los &lt;em&gt;script&lt;/em&gt; en los casos que sea necesario.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1 id=&quot;telegraf&quot;&gt;Telegraf&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Telegraf&lt;/strong&gt; es un agente encargado de recopilar datos o métricas de un determinado sistema y almacenarlos donde le indiquemos. 
En nuestro caso, va a almacenar datos como el uso de memoria, CPU, temperatura de los procesadores… y los enviará a &lt;em&gt;InfluxDB&lt;/em&gt;, 
la cual se encargará de almacenarlos. Ambas aplicaicones pertenecen a &lt;em&gt;InfluxData&lt;/em&gt;, por lo que se integran perfectamente.&lt;/p&gt;

&lt;h2 id=&quot;instalación-de-telegraf&quot;&gt;Instalación de Telegraf&lt;/h2&gt;

&lt;p&gt;El primer paso que vamos a realizar es añadir las claves PGP del repositorio de InfluxData a nuestro sistema, para 
integrarlo con el sistema de gestión de paquetes APT de Debian y mantenerlo actualizado:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;curl &lt;span class=&quot;nt&quot;&gt;-sL&lt;/span&gt; https://repos.influxdata.com/influxdb.key | &lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-key add -
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;deb https://repos.influxdata.com/debian stretch stable&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/influxdb.list

&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get update
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;telegraf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;configuración-de-telegraf&quot;&gt;Configuración de Telegraf&lt;/h2&gt;

&lt;p&gt;Una vez hecho esto, tendremos nuestro agente recopilador instalado en nuestra Raspberry… ¡pero tenemos que configurarlo! 
Para ello, accedemos como &lt;em&gt;root&lt;/em&gt; al fichero &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/telegraf/telegraf.conf&lt;/code&gt; y lo actualizamos para que coincida con la siguiente 
configuración:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[[outputs.influxdb]]
  urls = [&quot;http://127.0.0.1:8086&quot;]
  database = &quot;telegraf&quot;
  skip_database_creation = true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Lo que estamos haciendo ahí es indicarle a Telegraf que envíe las métricas que recopile a InfluxDB, que estará en la misma máquina 
corriendo en el puerto 8086 (el estándar de InfluxDB) y que haga uso de la base de datos &lt;em&gt;telegraf&lt;/em&gt; y que no cree dicha base de datos, 
ya que lo haremos nosotros manualmente.&lt;/p&gt;

&lt;p&gt;A continuación, es recomendable que, si vamos a exponer nuestro InfluxDB al exterior, le añadamos seguridad, por lo que, de ser así, 
deberemos configurar los siguientes campos en nuestro &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;telegraf.conf&lt;/code&gt; con el usuario y contraseña que definamos en la base de datos más adelante.
Por simplificar, podríamos decir que para la BD &lt;em&gt;telegraf&lt;/em&gt;, el usuario será &lt;em&gt;telegraf&lt;/em&gt; y la contraseña &lt;em&gt;telegrafPass&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[[outputs.influxdb]]
  ## HTTP Basic Auth
  username = &quot;telegraf&quot;
  password = &quot;telegrafPass&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Así mismo, podríamos configurar la conexión HTTPS también, pero puesto que nuestro InfluxDB va a ser accesible únicamente en nuestra 
máquina, por ahora omitiremos este paso (y lo dejaremos para un posterior post de securización :) ).&lt;/p&gt;

&lt;p&gt;A continuación, para que Telegraf nos envíe información también del estado de la CPU y la GPU, necesitamos hacer unos pasos adicionales. 
Primero, deberemos agregar el usuario al grupo de vídeo, tal que así:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;usermod &lt;span class=&quot;nt&quot;&gt;-G&lt;/span&gt; video telegraf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Y crear un nuevo fichero de configuración en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/telegraf/telegraf.d/raspberrypitemp.conf&lt;/code&gt; con la siguiente información:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[[inputs.file]]
  files = [&quot;/sys/class/thermal/thermal_zone0/temp&quot;]
  name_override = &quot;cpu_temperature&quot;
  data_format = &quot;value&quot;
  data_type = &quot;integer&quot;

[[inputs.exec]]
  commands = [&quot;/opt/vc/bin/vcgencmd measure_temp&quot;]
  name_override = &quot;gpu_temperature&quot;
  data_format = &quot;grok&quot;
  grok_patterns = [&quot;%{NUMBER:value:float}&quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Y con esto ya tenemos configurado nuestro Telegraf, con lo que sólo nos queda arrancar el servicio y habilitarlo para que arranque 
automáticamente cuando se (re)inicie el sistema, por lo que ejecutamos:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl start telegraf

&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;telegraf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;influxdb&quot;&gt;InfluxDB&lt;/h1&gt;

&lt;p&gt;Llegados a este punto, tenemos un agente que está recopilando información del sistema, pero que no es capaz de almacenarla y gestionarla 
por sí mismo, sino que la está enviando a una base de datos… que debemos instalar y configurar. Se trata de &lt;strong&gt;InfluxDB&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;instalación-de-influxdb&quot;&gt;Instalación de InfluxDB&lt;/h2&gt;

&lt;p&gt;Para instalar InfluxDB, como ya hemos configurado el repositorio de paquetes de InfluxData para instalar Telegraf, podemos realizar 
la instalación simplemente ejecutando:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;influxdb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;configuración-de-influxdb&quot;&gt;Configuración de InfluxDB&lt;/h2&gt;

&lt;p&gt;En InfluxDB ya no hay una interfaz disponible para gestionar las bases de datos, por lo que el puerto 8083 ha quedado libre 
y todo lo referente a la sección &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[admin]&lt;/code&gt; del fichero de configuración es ignorado por la aplicación.&lt;/p&gt;

&lt;p&gt;Antes de arrancar el servicio, accedemos como &lt;em&gt;root&lt;/em&gt; al fichero &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/influxdb/influxdb.conf&lt;/code&gt; y modificamos la configuración 
para que cuadre con la siguiente:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[http]
  enabled = true
  bind-address = &quot;:8086&quot;
  auth-enabled = false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Una vez configurado nuestro InfluxDB, arrancamos el servicio y lo configuramos para que se inicie al arrancar el sistema:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl start influxdb
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl enabled influxdb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Una vez que tenemos InfluxDB corriendo en nuestro sistema, crearemos nuestra base de datos y configuraremos un 
usuario y una contraseña para acceder a la misma. Podríamos hacerlo por consola, pero InfluxData nos proporciona una 
herramienta más visual, como es &lt;a href=&quot;https://www.influxdata.com/time-series-platform/chronograf/&quot;&gt;&lt;strong&gt;Chronograf&lt;/strong&gt;&lt;/a&gt;. La podemos bajar para cualquier sistema 
y nos bastará con ejecutarla para disponer de una interfaz web corriendo en el puerto 8888. En mi caso la he bajado 
desde un ordenador con Windows.&lt;/p&gt;

&lt;p&gt;Para ello, desde el menú de &lt;em&gt;Configuración&lt;/em&gt; crearemos una nueva conexión especificando el &lt;em&gt;host&lt;/em&gt; y puerto (8086) 
y como base de datos, pondremos &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_internal&lt;/code&gt;. Los campos de usuario y contraseña de momento los dejamos vacíos, ya que aún no los 
hemos creado. Una vez creada la conexión, en el apartado &lt;em&gt;InfluxDB admin&lt;/em&gt;, en &lt;em&gt;Databases&lt;/em&gt; crearemos una nueva base de datos 
llamada &lt;em&gt;telegraf&lt;/em&gt; y le pondremos una duración de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;7d&lt;/code&gt;, para que no nos almacene el tiempo infinitamente, que no nos interesa.&lt;/p&gt;

&lt;p&gt;Acto seguido, en &lt;em&gt;Users&lt;/em&gt; crearemos un usuario &lt;em&gt;admin&lt;/em&gt; con una contraseña y le daremos todos los permisos, y después un usuario 
&lt;em&gt;telegraf&lt;/em&gt; con la contraseña que dijimos (TelegrafPass) y le concederemos todos los permisos también.&lt;/p&gt;

&lt;p&gt;Tras esto, en la configuración de InfluxDB cambiaremos el campo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auth-enabled&lt;/code&gt; por &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; y reiniciaremos la aplicación, la cual 
lo hará ya con la autenticación habilitada por defecto.&lt;/p&gt;

&lt;p&gt;Si ahora volvemos a Chronograf y editamos la conexión añadiendo el usuario y la contraseña, y añadimos en &lt;em&gt;Dashboard&lt;/em&gt; el de 
&lt;em&gt;System&lt;/em&gt;, veremos cómo en la pestaña de &lt;em&gt;Dashboards&lt;/em&gt; tenemos ya información sobre nuestra Raspberry :).&lt;/p&gt;

&lt;p&gt;¡Ya sólo nos resta visualizarla como es debido!&lt;/p&gt;

&lt;h1 id=&quot;grafana&quot;&gt;Grafana&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Grafana&lt;/strong&gt; es una utilidad que nos permitirá visualizar de manera muy efectiva los datos que recojamos de distintas fuentes, 
como por ejemplo InfluxDB o Prometheus (del que hablaré en otra entrada).&lt;/p&gt;

&lt;h2 id=&quot;instalación-de-grafana&quot;&gt;Instalación de Grafana&lt;/h2&gt;

&lt;p&gt;Para instalar Grafana en nuestra Raspberry, nos bastará con el comando:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;grafana
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Sin embargo, esto requiere de un montón de dependencias que quizá no queramos en nuestro sistema, como entornos de escritorio. 
Por eso, en mi caso vamos a usar Docker (se da por sentado que está instalado ya en la Raspberry).&lt;/p&gt;

&lt;p&gt;Para ello, lo primero que haremos será crear un contenedor para que Grafana tenga dónde almacenar los &lt;em&gt;plugin&lt;/em&gt; y su base de datos, 
y así no perderlo en los reinicios. Para ello:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;docker volume create grafana-storage
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Tras ello, podemos arrancar nuestro contenedor de Grafana con la siguiente instrucción (en contraseña pondremos la que queramos tener de &lt;em&gt;login&lt;/em&gt;):&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;docker run &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; 3000:3000 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;grafana &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; grafana-storage:/var/lib/grafana &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;GF_INSTALL_PLUGINS=grafana-piechart-panel&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;GF_SECURITY_ADMIN_PASSWORD=admin&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  grafana/grafana
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Y si accedemos a la URL &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://&amp;lt;ip&amp;gt;:3000&lt;/code&gt; veremos cómo nos sale el cuadro de inicio de sesión de Grafana.&lt;/p&gt;

&lt;h2 id=&quot;configuración-de-grafana&quot;&gt;Configuración de Grafana&lt;/h2&gt;

&lt;p&gt;Una vez tenemos Grafana instalado, deberemos seguir 2 pasos: Configurar nuestra fuente de datos y configurar nuestro &lt;em&gt;dashboard&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;[EN DESARROLLO…]&lt;/p&gt;</content><author><name>Parra</name></author><category term="docker" /><category term="raspberry pi" /><category term="linux" /><category term="raspbian" /><category term="monitorización" /><category term="telegraf" /><category term="influxdb" /><category term="grafana" /><summary type="html">No pude evitarlo… Los dashboards y la monitorización es algo que siempre me ha llamado la atención, sobre todo cuando es útil para ver de un vistazo el estado de un sistema o de una aplicación. Y desde que conocí Grafana estaba claro que en algún momento acabaría implementando algún sistema en mi Raspberry que la usara. Pero primero empecemos por partes, y en orden…</summary></entry><entry><title type="html">Notificar eventos SSH</title><link href="https://proyectos.parravidales.es/Notificar-eventos-SSH/" rel="alternate" type="text/html" title="Notificar eventos SSH" /><published>2019-08-26T00:00:00+00:00</published><updated>2019-08-26T00:00:00+00:00</updated><id>https://proyectos.parravidales.es/Notificar-eventos-SSH</id><content type="html" xml:base="https://proyectos.parravidales.es/Notificar-eventos-SSH/">&lt;p&gt;En cierto modo, soy un paranoico de la seguridad. Constantemente estoy monitorizando mis dispositivos conectados a la red con el fin de 
detectar posibles intrusiones o envíos de datos &lt;em&gt;no permitidos&lt;/em&gt;. Así pues, empleo varias herramientas para ello, pero además, soy 
fan declarado de las notificaciones de eventos, por lo que no podía dejar escapar esta oportunidad de fusionar ambas “manías”.&lt;/p&gt;

&lt;p&gt;Además de las medidas de seguridad que tengo en mi entorno digital (de las que pondré algún &lt;em&gt;post&lt;/em&gt;), he dedicido implantar un 
sistema de notificaciones que me avise cada vez que alguien (idealmente sólo yo mismo…) se logue en mi RPi a través de SSH.&lt;/p&gt;

&lt;p&gt;¿Y por qué sólo a través de SSH? Porque en mi casa es la única manera de acceder a ella, ya que no tiene conectado ni teclado, ni ratón, 
ni monitor… sólo la toma de red y de corriente.&lt;/p&gt;

&lt;p&gt;Así pues, decidí notificar estos eventos haciendo uso de mi cuenta de Telegram y el &lt;em&gt;script&lt;/em&gt; de notificaciones que describí 
&lt;a href=&quot;/Notificaciones-en-Telegram/&quot;&gt;aquí&lt;/a&gt;. Buscando información en internet, descubrí que la mejor manera de 
tratar los eventos SSH es haciendo uso del PAM. Con esto en mente, creé el &lt;em&gt;script&lt;/em&gt; 
&lt;a href=&quot;/scripts/ssh_alert_script_pam.sh&quot;&gt;ssh_alert_script_pam.sh&lt;/a&gt; y le metí los manejadores para &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open_session&lt;/code&gt; y 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;close_session&lt;/code&gt; solamente, con el fin de crear un mensaje que posteriormente pasaría a mi &lt;em&gt;script&lt;/em&gt; de notificación.&lt;/p&gt;

&lt;p&gt;Una vez creado lo ubiqué en la carpeta &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/pam.scripts/&lt;/code&gt; (que previamente tuve que crear, para tener todos mis &lt;em&gt;scripts&lt;/em&gt; de PAM agrupados) 
y ejecuté las siguientes órdenes:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# chown root:root ssh_alert_script_pam.sh&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# chmod 0700 ssh_alert_script_pam.sh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ya tenemos listo el &lt;em&gt;script&lt;/em&gt; para gestionar los eventos PAM de &lt;em&gt;login&lt;/em&gt; y &lt;em&gt;logout&lt;/em&gt; y sólo nos queda referenciarlo en el PAM para que lo 
ejecute. Así pues, en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/pam.d/sshd&lt;/code&gt; al final del archivo añadimos lo siguiente:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-batchfile&quot; data-lang=&quot;batchfile&quot;&gt;# &lt;span class=&quot;kd&quot;&gt;SSH&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;Alert&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;script&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;session&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;required&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;pam_exec&lt;/span&gt;.so &lt;span class=&quot;na&quot;&gt;/etc/pam&lt;/span&gt;.scripts/ssh_alert_script_pam.sh&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;¡Y listo!&lt;/p&gt;

&lt;p&gt;La próxima vez que alguien se logue en mi RPi, recibiré en mi Telegram una notificación como la siguiente:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/notificacion_tg_login_ssh.png&quot; alt=&quot;Notificación a Telegram de login SSH&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Y, cuando me salga, algo como:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/notificacion_tg_logout_ssh.png&quot; alt=&quot;Notificación a Telegram de logout SSH&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Y mientras esto coincida con las veces que yo entro y salgo del sistema, todo bien :)&lt;/p&gt;</content><author><name>Parra</name></author><category term="Telegram" /><category term="notificaciones" /><category term="scripts" /><category term="bash" /><category term="raspberry pi" /><category term="linux" /><category term="raspbian" /><category term="debian" /><category term="ssh" /><category term="sshd" /><category term="seguridad" /><summary type="html">En cierto modo, soy un paranoico de la seguridad. Constantemente estoy monitorizando mis dispositivos conectados a la red con el fin de detectar posibles intrusiones o envíos de datos no permitidos. Así pues, empleo varias herramientas para ello, pero además, soy fan declarado de las notificaciones de eventos, por lo que no podía dejar escapar esta oportunidad de fusionar ambas “manías”.</summary></entry><entry><title type="html">¡Hola Mundo!</title><link href="https://proyectos.parravidales.es/Hola-Mundo/" rel="alternate" type="text/html" title="¡Hola Mundo!" /><published>2019-08-25T00:00:00+00:00</published><updated>2019-08-25T00:00:00+00:00</updated><id>https://proyectos.parravidales.es/Hola-Mundo</id><content type="html" xml:base="https://proyectos.parravidales.es/Hola-Mundo/">&lt;p&gt;Pues aquí estamos, ¡primer post!&lt;/p&gt;

&lt;p&gt;La idea de este blog es utilizarlo como un &lt;em&gt;bloc&lt;/em&gt; de notas de todo en general y nada en particular.&lt;/p&gt;</content><author><name>Parra</name></author><summary type="html">Pues aquí estamos, ¡primer post! La idea de este blog es utilizarlo como un bloc de notas de todo en general y nada en particular.</summary></entry><entry><title type="html">Notificaciones en Telegram</title><link href="https://proyectos.parravidales.es/Notificaciones-en-Telegram/" rel="alternate" type="text/html" title="Notificaciones en Telegram" /><published>2019-08-25T00:00:00+00:00</published><updated>2019-08-25T00:00:00+00:00</updated><id>https://proyectos.parravidales.es/Notificaciones-en-Telegram</id><content type="html" xml:base="https://proyectos.parravidales.es/Notificaciones-en-Telegram/">&lt;p&gt;Soy un usuario asiduo de &lt;a href=&quot;telegram.org&quot;&gt;Telegram&lt;/a&gt; y desde que habilitó la opción de los &lt;em&gt;bot&lt;/em&gt; no he parado de buscar y entender cómo funcionan 
y cómo puedo sacarle partido. Entre mis proyectos se encontró el de programar uno para gestionar mi Raspberry Pi. Pero puesto que eso era 
un proyecto que requería más tiempo del que disponía, busqué una alternativa: Los &lt;strong&gt;&lt;em&gt;webhook&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Los &lt;a href=&quot;https://es.wikipedia.org/wiki/Webhook&quot;&gt;&lt;strong&gt;&lt;em&gt;webhook&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; no son más ni menos que eventos que desecandenan acciones. En el caso de Telegram y sus &lt;em&gt;bot&lt;/em&gt;, 
entre otras opciones, tenemos la posibilidad de acceder a una API-REST que nos permite invocar dichos &lt;em&gt;webhook&lt;/em&gt; y desencadenar eventos 
sobre nuestros &lt;em&gt;bot&lt;/em&gt;, sin la necesidad de tener uno funcionando constantemente en un servidor.&lt;/p&gt;

&lt;p&gt;Con esta opción en mente, decidí programar un &lt;em&gt;script&lt;/em&gt; en &lt;em&gt;bash&lt;/em&gt; que me permitiera, de una manera fácil y sencilla, publicar un mensaje 
con mi &lt;em&gt;bot&lt;/em&gt; de notificaciones sin necesidad de ocuparme de su mantenimiento y con el único fin de automatizar ciertos eventos 
en mi RPi y recibir notificaciones de eventos.&lt;/p&gt;

&lt;p&gt;Así pues, haciendo uso del script &lt;a href=&quot;/scripts/publishMessageToRaspiBot.sh&quot;&gt;publishMessageToRaspiBot.sh&lt;/a&gt;, seteando las variables &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CHAT_ID&lt;/code&gt; 
y &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;API_KEY&lt;/code&gt; con los valores correspondientes al &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;chat_id&lt;/code&gt; de nuestra cuenta de Telegram donde queramos recibir la notificación y el 
&lt;em&gt;token&lt;/em&gt; del &lt;em&gt;bot&lt;/em&gt; que vamos a usar, bastará con invocar la orden (con el mensaje entre comillas):&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./publishMessageToRaspiBot.sh &lt;span class=&quot;s2&quot;&gt;&quot;Este mensaje ha sido enviado desde la consola ejecutando el script &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\`&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;publishMessageToRaspiBot.sh&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\`&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Y acto seguido en la cuenta de telegram se recibirá dicho mensaje:
&lt;img src=&quot;/images/example_notification_to_telegram.png&quot; alt=&quot;Ejemplo de notificación enviada a Telegram&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Así, bastará con invocar dicho &lt;em&gt;script&lt;/em&gt; en cada notificación de la RPi que queramos enviar con la información (siempre que no supere 
los 1024 caracteres). Además, haciendo uso del formato &lt;em&gt;Markdown&lt;/em&gt;, podremos darle incluso cierto formato (también está la opción de usar HTML, pero de momento me basta con esto).&lt;/p&gt;</content><author><name>Parra</name></author><category term="Telegram" /><category term="notificaciones" /><category term="scripts" /><category term="bash" /><category term="raspberry pi" /><category term="linux" /><category term="raspbian" /><category term="debian" /><summary type="html">Soy un usuario asiduo de Telegram y desde que habilitó la opción de los bot no he parado de buscar y entender cómo funcionan y cómo puedo sacarle partido. Entre mis proyectos se encontró el de programar uno para gestionar mi Raspberry Pi. Pero puesto que eso era un proyecto que requería más tiempo del que disponía, busqué una alternativa: Los webhook.</summary></entry></feed>