Nachrichten Remote ins Terminal pushen

In einem vorangegangenen Beitrag bin ich auf die Möglichkeit eingegangen, Pop-Up Meldungen zwecks Wartungsarbeiten auf entfernte Linux Maschinen anzeigen zu lassen. Da einige Benutzer möglicherweise gar keine grafische Oberfläche benutzen (oder diese nicht vorhanden ist), soll es nun noch um die Verteilung von Nachrichten auf aktive Terminal-Sitzungen gehen.

Meldungen auf die Kommandozeile zu pushen ist wesentlich einfacher und mit geringerem Aufwand verbunden als über das grafische Pendant. Unser Tool der Wahl nennt sich diesmal ‘wall’. Da ‘wall’ leider lediglich Benutzer erreicht, die aktiv auf ihrer Kommandozeile angemeldet sind, möchten wir außerdem die sogenannte ‘Message of the Day’ bearbeiten, die die zu pushende Nachricht auch bei jedem SSH-Login anzeigt, vorausgesetzt, sie ist tagesaktuell. Das ganze soll von einem Shell-Skript aus gesteuert werden, welches auf einer lokalen Maschine liegt, die sich dann Remote auf die jeweiligen Maschinen anmeldet, um dort die Nachrichten abzulegen.

Wir beginnen also mit der Erstellung unseres Shell-Skriptes …

nano ~/terminal_messages.sh

… und setzen eine Variable, die unsere anzuzeigende Nachricht beinhaltet:

#!/bin/bash
message="End of working day!"

Als nächstes legen wir einen einzeiligen Cronjob an, der eine Minute nach Mitternacht das tagesaktuelle Datum, mit dem Datum bzw. Änderungsdarum der ‘Message of the Day’ (/etc/motd) vergleicht und diese löscht, falls eine Abweichung vorliegt.

echo '1 0 * * * root cur_date=$(date +%D) && motd_date=$(date -r /etc/motd +%D) && if test "$cur_date" != "$motd_date" ; then rm -f /etc/motd ; fi' > /etc/cron.d/motd

Zum Schluß wird der Inhalt der zuvor gesetzten Variable ‘message’ als ‘Message of the Day’ abgelegt …

echo $message > /etc/motd

… und als Nachricht über das Tool ‘wall’ in sämtliche Terminals geschrieben, die derzeit angemeldet sind.

wall -n /etc/motd

Im ganzen sähe das Skript folgendermaßen aus:

#!/bin/bash
message="End of working day!"

echo '1 0 * * * root cur_date=$(date +%D) && motd_date=$(date -r /etc/motd +%D) && if test "$cur_date" != "$motd_date" ; then rm -f /etc/motd ; fi' > /etc/cron.d/motd

echo $message > /etc/motd

wall -n /etc/motd

Um dieses Skript nun Remote auf entfernte Maschinen auszuführen, nutzen wir diesen Befehl (Tauscht ‘<Ziel-Maschine>’ entsprechend eurem Ziel aus):

ssh root@<Ziel-Maschine> 'bash -s' < ./terminal_messages.sh

Unspektakulär aber effektiv erscheint unsere Nachricht nun folgendermaßen auf dem Terminal:

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen