Schlagwort-Archive: bash Bourne-again shell

Bash (für Bourne-again shell) ist eine freie Unix-Shell und Teil des GNU-Projekts. Sie ist heute auf vielen unixoiden Systemen die Standard-Shell.

E-Mail Versenden aus Linux Shell

E-Mails versenden aus CLI und Shell-Scripts

Das Versenden von E-Mails aus der Linux Shell über einen Server ist sehr nützlich, wenn beispielsweise programmgesteuert Benachrichtigungen aus Shell-Scripts oder Webanwendungen generiert werden.

Dieses Tutorial beleuchtet, wie mit dem Mail-Befehl unter Linux E-Mails von der Befehlszeile aus versendet werden. Zur Anwendung kommt Heirloom („mailx“), das verbreitete Open Source Projekt beinhaltet eine Sammlung traditioneller Unix-Dienstprogramme. Ziel ist es, durch praxiserprobte Beispiele mögliche Lösungswege wiederzugeben, es stellt jedoch keine komplette Sammlung umfangreicher Anwendungsmöglichkeiten dar.

mailx – mailutils bei Fedora und CentOS

Damit das E-Mail Versenden aus der Linux Shell möglich ist, muss das Paket mailx, oft auch mailutils auf dem host vorhanden sein, die Bereitstellung unter Fedora und CentOS geht wie folgt:

$ sudo yum install -y mail

heirloom-mailx bei Debian und Ubuntu

Für Debian und Linux Mint oder weitere Ubuntu forkes kann folgendes apt-get command ausgeführt werden:

$ sudo apt-get install heirloom-mailx

Der CLI Befehl mail ist nun in der Shell anwendbar:

$ mail -s "Hello World" email@example.com

Beim ersten Versuch eine E-Mail zu Versenden, erhält man wahrscheinlich gleich mal ein Fehler!

No configuration file found at /home/joe/.esmtprc or /etc/esmtprc

Gelöst wird der Fehler, indem man die Konfigurationsdatei esmtprc erstellt, mit vi oder nano oder dem Editor der Wahl:

$ vi ~/.esmtprc

Ein SMTP-Gateway hinzufügen, dieses es erlaubt von unserem Host E-Mail anzunehmen.

hostname = smtp.example.com:25

Mit dieser Konfiguration wird der Benutzer berechtigt, über smtp.example.com E-Mails zu Versenden. Sollen alle Benutzer berechtigt werden, muss die Datei /etc/esmtprc erstellt und bearbeitet werden.

Gibt es noch ein Fehler! muss ein Relayhost berechtigt werden:

SMTP server problem Connection refused

Es sollen E-Mails von unserem Host angenommen werden, zB. soll das Gateway smtp.example.com über TCP Port 25 E-Mails weiterleiten.

Beim SMTP-Gateway wird, wenn dieses Postfix ist, die Datei main.cf angepasst. Mit sudo die Postfix Hauptkonfiguration main.cf editieren.

$ sudo vi /etc/postfix/main.cf

Bei mynetworks wird die Host IP oder der Hostname hinzugefügt, dieser E-Mails versenden darf.

mynetworks =
        127.0.0.0/8
        [::1]/128
        192.168.2.3

In diesem Beispiel ist 192.168.2.3 unser Host von diesem E-Mails versendet werden sollen.

Die änderung der Postfix Hauptkonfiguration aktivieren:

$ sudo postfix reload

Beispiele Mail versenden in der Befehlszeile

echo "message here" | mail -s "subject" email@example.com < dump.sql.gz

Die klassische Methode ist die Verwendung von sendmail.

$ sendmail -F "Linux host" -f "noreply@example.org" -t 
email@example.org << EOF
Subject: try to test
seems it works.
EOF

Mit sendmail den Inhalt von stats.log an example@email.org senden.

$ (cat /mnt/stats.log) | sendmail -i -- example@email.org

Das Versenden eines zuvor erstellten SQL-Dump, dieser nach der Sicherung zugestellt werden soll.

subnet="$(ip -4 a | grep inet | grep -v 'virbr' | grep -v 'docker' | awk '{print $2}' | grep -v '127.0.0.1')"; ipcalc "${subnet}" | mail -s "${subnet}" hostmaster@example.com

Hier wird die IPv4 Konfiguration mit dem ip-Befehl ermittelt, es wird versucht die virtuellen Interfaceses durch grep und awk auszufiltern.

ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | mail -s "ifconfig" hostmaster@example.com

ifconfig ist der traditionelle Befehl, dabei muss bei neueren Distributionen das Paket net-utils installiert sein.

hostnamectl | mail -s "my host" email@domain.com

Der Befehl hostnamectl liefert nützliche Informationen, vorhanden bei neueren Linux Versionen.

Der Aufruf man mail zeigt die umfangreichen Möglichkeiten von mailx.

Linux Splash Screen mit Linuxlogo

Linuxlogo ist ein Linux-Befehlszeilenprogramm, das ein farbiges ANSI-Bild des Distributionslogos als Splash Screen mit den wichtigsten Systeminformationen erzeugt.

Linuxlogo Splash Screen im Terminal erzeugen

Hierbei bietet sich die Datei issue.net oder motd auf sinnvolle weise an, ein Splash Screen des Host auszugeben, motd steht für message of the day. Diese Dateien, welche vom Login-Prozess genutzt werden, befinden sich unter dem Konfigurationsverzeichnis /etc und geben nach einem erfolgreichem Login – aber noch vor dem Start der jeweiligen Login-Shell eine Meldung aus.

Linuxlogo Installation

# redhat CentOS
$ sudo yum -y install linux_logo
# Debian Ubuntu
$ sudo apt-get -y install linuxlogo
# Fedora
$ sudo dnf -y install linux_logo

Die Autostart Konfiguration rc.local erzeugt beim Boot-Prozess die nötigen Einträge, für den Konsole Login mit der Datei issue und den Remote Login issue.net.

$ sudo vi /etc/rc.d/rc.local
# Debian & Ubuntu
$ sudo vi /etc/rc.local
if [ -f /usr/bin/linux_logo ]; then
     echo "" > /etc/issue
     /usr/bin/linux_logo -L debian_banner -u >> /etc/issue
     echo >> /etc/issue
fi
if [ -f /usr/bin/linux_logo ]; then
     echo "" > /etc/issue.net
     /usr/bin/linux_logo -L debian_banner -a -u >> /etc/issue.net
     echo >> /etc/issue.net
fi

Der Aufruf unter Debian und Ubuntu ist wie folgt:

$ /usr/bin/linuxlogo -L debian_banner_2 -u

rc.local muss ausführbar sein.

$ sudo chmod +x /etc/rc.d/rc.local

Damit der Splash Screen bei Remote Login im SSH-Terminal erscheint, muss man den Banner des SSH Daemon aktivieren.

$ sudo vi /etc/ssh/sshd_config

Die Zeile (ca. 108) das hash (#) entfernen und issue.net hinzufügen.

# no default banner path
Banner /etc/issue.net

Die Änderung wird wirksam mit neustart des SSH Daemon.

# CentOS 7
$ sudo systemctl restart sshd
# CentOS 6
$ sudo service sshd restart

Wo aus rechtlichen Gründen ein Hinweis vor unautorisiertem Zugriff zur Konsole warnen soll, kann die Datei /etc/motd folgende Ausgabe erzeugen:

$ sudo vi /etc/motd
##############################################################################
#             Unauthorized access to this system is prohibited !             #
#                                  ******                                    #
#    This system is actively monitored and all connections may be logged.    #
#         By accessing this system, you consent to this monitoring.          #
##############################################################################

Auch bietet sich an, den Splash Screen mit Linux Logo aus der ~/.bashrc auszugeben, hier ein Beispiel für die Systemweite bash Konfiguration der redhat Distribution.

$ sudo vi /etc/bashrc

Die Zeile am Ende der Datei ~/.bashrc einfügen.

if [ -f /usr/bin/linux_logo ]; then linux_logo -L redhat -u; fi

Erweitern lässt sich linuxlogo etwa mit folgender Zeile ~/.bashrc

if [ -f /usr/bin/linuxlogo ]; then linuxlogo ;hostnamectl status | grep "Operating System";fi
uname -sor

Linux Logo Parameter

Distributionen:

/usr/bin/linux_logo -L list

Available Built-in Logos:
        Num     Type    Ascii   Name            Description
        1       Banner  Yes     bsd_banner      FreeBSD Logo
        2       Classic Yes     irix            Irix Logo
        3       Classic Yes     bsd             FreeBSD Logo
        4       Banner  Yes     solaris         The Default Banner Logos
        5       Classic Yes     aix             AIX Logo
        6       Classic Yes     classic         The Default Classic Logo
        7       Banner  Yes     debian_banner   Debian Banner (white)
        8       Banner  Yes     mandrake_banner Mandrake(TM) Linux Banner
        9       Banner  Yes     pld             PLD Linux banner
        10      Banner  Yes     suse            SUSE Logo
        11      Banner  Yes     sourcemage_ban  Source Mage GNU/Linux banner
        12      Classic Yes     gnu_linux       Classic GNU/Linux
        13      Classic Yes     core            Core Linux Logo
        14      Classic Yes     debian          Debian Swirl Logos
        15      Banner  Yes     slackware       Slackware Logo
        16      Banner  Yes     mandriva        Mandriva(TM) Linux Banner
        17      Banner  Yes     redhat          RedHat Banner (white)
        18      Banner  Yes     ubuntu          Ubuntu Logo
        19      Classic Yes     debian_old      Debian Old Penguin Logos
        20      Banner  Yes     sme             SME Server Banner Logo
        21      Banner  Yes     sourcemage      Source Mage GNU/Linux large
        22      Banner  Yes     mandrake        Mandrakelinux(TM) Banner
        23      Banner  Yes     banner          The Default Banner Logo
        24      Classic Yes     classic-simp    Classic No Dots Or Letters
        25      Classic Yes     classic-nodots  The Classic Logo, No Periods
        26      Banner  Yes     banner-simp     Simplified Banner Logo

Do "linux_logo -L num" where num is from above to get the appropriate logo.
Remember to also use -a to get ascii version.

Linux Logo Help Screen

/usr/bin/linux_logo -h

Linux Logo Version 5.11 using libsysinfo 0.2.1
        by Vince Weaver <vince@deater.net>
   Newest Versions at:
      https://www.deater.net/weave/vmwprod/linux_logo
      https://metalab.unc.edu/pub/Linux/logos/penguins

Usage:   /usr/bin/linux_logo [-a] [-b] [-c] [-d] [-D file] [-e file] [-f] [-g]
                    [-h] [-i] [-k] [-l] [-n] [-o num] [-p] [-s] [-t str] [-u] [-v]
                    [-w Num] [-x] [-y] [-F format] [-L num | NAME | list | random_xy]
         [-a]     -- Display an ascii-only Logo
         [-b]     -- Display a Banner Logo!
         [-c]     -- Display a "Classic" type logo
         [-d]     -- disable "prettying" of output
         [-D file]-- use custom logo from "file"
         [-e file]-- Use "file" instead of /proc/cpuinfo [for debugging]
         [-f]     -- force the screen clear before drawing
         [-F format] Format output.  See README.
      B  [-g]     -- give system info only
         [-h]     -- this help screen
         [-i]     -- ignore ~/.linux_logo and /etc/linux_logo.conf
         [-k]     -- keep sysinfo flushed-left (non-centered)
      B  [-l]     -- display logo only
      C  [-o Num] -- offset output Num spaces to the right
         [-p]     -- preserve cursor location
         [-s]     -- skip Bogomips [speeds up on non-Linux platforms]
         [-t str] -- display user-supplied string
      *  [-u]     -- show uptime
         [-v]     -- version information
         [-w Num] -- set width of screen to Num [default 80]
      *  [-y]     -- show load average
         [-L num | NAME | list | random_xy] -- multiple Logo options.  See README

 B=Banner mode only, C=Classic Mode Only  *=Works Only in Linux