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 ohne eigenen Mail-Server versenden mit SSMTP

E-Mail ohne eigenen Mail-Server versenden mit sSMTP Client zum Senden mit SMTP und SMTPS

Systeme verwenden in der Regel ein Mail Transfer Agent (MTA) wie Postfix oder Exim für den Versand von E-Mails.

MTAs wie Postfix verfügen über einen mächtigen Funktionsumfang, was sich auch in einer komplexen Konfiguration wieder findet.

In Situationen bei diesen ein Linux Host E-Mails nicht direkt über ein Mail-Server versenden sollen, beispielsweise von Cron-Task, dieser im Fall von Fehler den Status per Mail versendet, oder ein Webserver mit einem Ticket oder einem Shop System, dieses mittels PHP Mails zustellt. Dafür aber extra ein kompletten MTA mit Postfix aufbauen zu komplex wäre. Auch sind kleine Netzwerke ohne eigenen MTA, ohne gültiges CA-Zertifikat und ohne fixe IP-Adresse ohnehin nicht in der Lage, E-Mails direkt versenden zu können, die meisten Mailserver werden den Empfang von diesen Servern ablehnen. Für solche Szenarien ist daher die weiterleitung von E-Mails an einen SMTP-Smarthost die probate Lösung, hierzu diesen Prozess das Tool ssmtp übernehmen kann.

sSMTP Mail Submission STARTTLS

ssmtp ist kein vollwertiger MTA (Mail-Transfer-Agent) wie Postfix oder Exim, viel mehr ist es ein einfaches Tool das E-Mails zu einem autorisierten MTA Smarthost weiterleitet. sSMTP unterstützt die Mail Submission Authentifizierung und STARTTLS.

Die sSMTP Installation

Die Installation von ssmtp hier auf RHEL als root wie folgt:

$ yum install ssmtp -y

Die Installation auf einer Debian basierten Distribution ist:

$ apt-get -y install ssmtp

E-Mails über Office 365 aus CLI versenden

Nach der Installation gibt es die zwei Konfigurationsdateien /etc/ssmtp/ssmtp.conf und /etc/ssmtp/revaliases, diese an die eigene Anforderung angepasst werden. Hier wird die Konfiguration erstellt, um E-Mails über ein Office 365 Konto zu verschicken.

$ vi /etc/ssmtp/ssmtp.conf

root=shop@domain.com
mailhub=smtp.office365.com:587
useSTARTTLS=YES
AuthUSER=shop@domain.com
AuthPass=password
RewriteDomain=domain.com
Hostname=domain.com
UseTLS=YES
TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt

  Anstelle des Platzhalter shop@domain.com wird der entsprechende Benutzer verwendet dieser bei Office 365 erstellt wurde, bei password ist das zum Benutzer gehörende Passwort einzutragen, bei domain.com kann die eigene Domain oder outlook.com eingetragen werden. Natürlich funktioniert es auch mit anderen Anbieter, wie Goolge Mail (smtp.gmail.com). Dabei soll nicht unerwähnt sein, das der Zugriff auf das Google-Konto Zugriff durch weniger sichere Apps aktiviert sein muss.

Nun legt man fest welche User den Mailserver nutzen dürfen. Dies wird über die Datei revaliases festgelegt, reverse aliases ist die umgekehrte Version von aliases, dazu editiert man /etc/ssmtp/revaliases.

$ vi /etc/ssmtp/revaliases

root:shop@domain.com:smtp.office365.com:587
john:shop@domain.com:smtp.office365.com:587

Es darf root und der User john direkt vom Host senden.

Anschliessend wird eine Datei mit Parameter für ssmtp im richtigen Format erstellt, im Editor deiner wahl durch  Copy Past die nachstehenden Zeilen einfügen, inklusive Punkt am Ende:

$ vi ~/testmail.txt

To:touser@domain.net
From:shop@domain.com
Subject: Test Mail

This is a test mail.
.

  Anstelle To:touser@domain.net die eigentliche Empfänger Email eintragen, und bei From:shop@domain.com die korrekte Absender Email. Sollen weitere Empfänger erreicht werden, können dazu einfach weitere Zeilen To: mit den gewünschten Adressen eingetragen werden.

Testmail senden

Jetzt wird getestet, wir senden mit folgendem Command.

ssmtp -vvv -t < ~/testmail.txt

Es wird als der angemeldete Benutzer gesendet, ist john eingeloggt kann dieser Mails versenden weil er in revaliases eingetragen ist.

Die verbose Ausgabe in der Console dann etwa wie folgt:

[<-] 220 GV0P275CC0026.outlook.office365.com Microsoft ESMTP MAIL Service ready at Wed, 15 Jul 2020 05:37:09 +0000
[->] EHLO 12.34.56.78.dynamic.wline.res.cust.isp.net
[<-] 250 SMTPUTF8
[->] STARTTLS
[<-] 220 2.0.0 SMTP server ready
[->] EHLO 12.34.56.78.dynamic.wline.res.cust.isp.net
[<-] 250 SMTPUTF8
[->] AUTH LOGIN
[<-] 334 VCMlbm6hbXU7
[->] c3hvcECtb3VobC6jaA==
[<-] 334 UAFzc3dxcmQ7
[<-] 235 2.7.0 Authentication successful
[->] MAIL FROM:<shop@domain.com>
[<-] 250 2.1.0 Sender OK
[->] RCPT TO:<touser@domain.net>
[<-] 250 2.1.5 Recipient OK
[->] DATA
[<-] 354 Start mail input; end with <CRLF>.<CRLF>
[->] Received: by 12.34.56.78.dynamic.wline.res.cust.isp.net (sSMTP sendmail emulation); Wed, 15 Jul 2020 07:37:10 +0200
[->] Date: Wed, 15 Jul 2020 07:37:10 +0200
[->] To:touser@domain.net
[->] From:shop@domain.com
[->] Subject: Test Mail
[->]
[->] This is a test mail.
[->] .
[<-] 250 2.0.0 OK <DB8PR08MB3323E3B68DF12935DBECFADAB87E0@DC8PR09MB3123.eurprd09.prod.outlook.com> [Hostname=DB8PR08MB3123.eurprd09.prod.outlook.com]
[->] QUIT
[<-] 221 2.0.0 Service closing transmission channel

Im maillog sollte die ausgabe etwa wie diese zu finden sein.

Jul 14 20:51:16 fedora sSMTP[25809]: Creating SSL connection to host
Jul 14 20:51:16 fedora sSMTP[25809]: SSL connection using ECDHE-RSA-AES256-GCM-SHA384
Jul 14 20:51:19 fedora sSMTP[25809]: Sent mail for user@domain.com (221 2.0.0 Service closing transmission channel) uid=0 username=root outbytes=531

Damit nun auch beim Empfänger anstatt root, die eigentliche Absenderadresse erscheint, kann /etc/passwd angepasst werden.

$ grep "root:x" /etc/passwd
root:x:0:0:root:/root:/bin/bash

Hier kann das Finger Command chfn angewendet werden.

chfn -f 'here I am' root

Der mit Finger chfn geänderte full name in passwd weist danach folgenden Inhalt aus:

$ grep "root:x" /etc/passwd
root:x:0:0:here I am,,,,:/root:/bin/bash

Sollen E-Mail nur als root versendet werden, kann auf diese Konfiguration verzichtet werden, dabei wird über ssmtp.conf ermöglicht das eine Absenderadresse übergeben werden kann.

$ vi /etc/ssmtp/ssmtp.conf

# Set this to never rewrite the "From:" line (unless not given) and to
# use that address in the "from line" of the envelope.
FromLineOverride=YES

E-Mail mit sSMTP ohne installierten Mail-Server versenden

Zu guter Letzt wollen natürlich nicht nur Testmails versendet werden. Für den produktiven Einsatz könnte beispielsweise mit PHP oder einem Shell Script eine Datei mit Parameter für ssmtp erzeugt werden, diese dann automatisiert die gewünschten Informationen dynamisch bereitstellt. Eine E-Mail mit sSMTP ohne installierten Mail-Server versenden mit ssmtp kann auch mit dem folgenden Einzieler ausgeführt werden.

$ echo -e "Subject: Hier ist der Betreff\n\nHier ist ein Text.\n\n." | ssmtp touser@domain.net

Windows Terminal Profiles.json

Das Windows Terminal

Windows-Terminal ist eine neue, moderne leistungsstarke und produktive Terminalanwendung für Befehlszeilentools wie Command Prompt, PowerShell und das Windows-Subsystem für Linux (WSL) sowie Git-Bash. Zu den Hauptfunktionen gehören, Terminal Ausführung in Taps, Unicode- und UTF-8 Zeichenunterstützung, eine GPU-Accelerated Text Rendering-Engine, sowie die Möglichkeit für benutzerdefinierte Themen und Stiles zu Konfigurieren.

Profile für eine Vielzahl von Befehlszeilenanwendungen

Alle Anwendung, die über eine Befehlszeilenschnittstelle verfügen, können in Windows Terminal ausgeführt werden. Dies umfasst alles von PowerShell und der Eingabeaufforderung und Git-Bash bis hin zu Azure Cloud Shell und beliebigen WSL-Distributionen wie Ubuntu.

Angepasste Schemas Konfigurationen

Es können Windows Terminal so konfiguriert werden, dass es über eine Vielzahl von Farbschemas und Einstellungen verfügt.

Die Konfiguration wird mittels JSON in der Konfigurationsdatei profiles.json gespeichert. Hier ein Beispiel mit Profile für PowerShell, Command Prompt, Git-Bash und das Windows Linux Subsystem (WSL).

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile" : "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "alwaysShowTabs" : true,
    "initialCols" : 144,
    "initialRows" : 43,
    "copyOnSelect": true,

    "profiles":
    [
        {
            // Make changes here to the powershell.exe profile
            "guid" : "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
            "name" : "Windows PowerShell",
            "tabTitle": "Windows PowerShell",
            "commandline" : "powershell.exe",
            "colorScheme" : "Campbell Powershell",
            "fontFace" : "Consolas",
            "fontSize" : 10,
            "hidden" : false
        },
        {
            // Make changes here to the cmd.exe profile
            "guid" : "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "name" : "cmd Classic",
            "commandline" : "cmd.exe",
            "fontFace" : "Consolas",
            "fontSize" : 10,
            "hidden" : false
        },
        {
            // Make changes here to the cmd.exe profile
            "guid" : "{27fc4584-088c-452d-ae31-00f041ab4d7a}",
            "name" : "cmd Acrylic",
            "tabTitle": "Command Prompt",
            "icon" : "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
            "commandline" : "cmd.exe",
            "colorScheme" : "One Half Dark",
            "closeOnExit" : true,
            "startingDirectory" : "%USERPROFILE%",
            "useAcrylic" : true,
            "fontFace" : "Consolas",
            "fontSize" : 10,
            "hidden" : false
        },
        {
            // Make changes here to the git-bash profile
            "guid" : "{e950864a-e41d-4268-936f-dd9e7010c86c}",
            "name" : "Git Bash Classic",
            "tabTitle": "Git Bash",
            "icon" : "ms-appdata:///local/git-logo-black.png",
            "commandline" : "\"%PROGRAMFILES%\\git\\usr\\bin\\bash.exe\" -i -l",
            "startingDirectory" : "%USERPROFILE%",
            "fontFace" : "Consolas",
            "fontSize" : 10,
            "hidden" : false
        },
        {
            // Make changes here to the git-bash profile
            "guid" : "{00000000-0000-0000-ba54-000000000002}",
            "name" : "Git Bash Acrylic",
            "tabTitle": "Git Bash",
            "icon" : "ms-appdata:///local/git-logo-red.png",
            "commandline" : "\"%PROGRAMFILES%\\git\\usr\\bin\\bash.exe\" -i -l",
            "startingDirectory" : "%USERPROFILE%",
            "closeOnExit" : true,
            "snapOnInput" : true,
            "colorScheme" : "Vintage",
            "cursorColor" : "#7ddd00",
            "cursorShape" : "vintage",
            "historySize" : 9001,
            "acrylicOpacity" : 0.75,
            "useAcrylic" : true,
            "fontFace" : "Consolas",
            "fontSize": 10,
            "padding" : "6, 0, 0, 0",
            "hidden" : false
        },
        {
            // Make changes here to the wsl profile
            "guid" : "{58ad8b0c-3ef8-5f4d-bc6f-13e4c00f2530}",
            "name" : "Debian",
            "icon" : "ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.scale-200.png",
            "commandline" : "wsl.exe -d Debian",
            "startingDirectory" : "%USERPROFILE%\\wslhome",
            "closeOnExit" : true,
            "snapOnInput" : true,
            "colorScheme" : "Campbell",
            "cursorColor" : "#FFFFFF",
            "cursorShape" : "bar",
            "acrylicOpacity" : 0.75,
            "useAcrylic" : true,
            "fontFace" : "Consolas",
            "fontSize" : 10,
            "padding" : "6, 0, 0, 0",
            "hidden" : false
        },
        {
            "guid" : "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "name" : "Azure Cloud Shell",
            "source" : "Windows.Terminal.Azure",
            "hidden" : true
        }
    ],

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings":
    [
    { "command": { "action": "splitPane", "split": "vertical" }, "keys": "ctrl+shift+-" },
    { "command": { "action": "splitPane", "split": "horizontal" }, "keys": "alt+shift+-" },
    { "command": { "action": "splitPane", "split": "auto" }, "keys": "alt+shift+|" },
    // Press Ctrl+Shift+F to open the search box
    { "command": "find", "keys": "ctrl+f" },
    // Open New Tab
    { "command": "newTab", "keys": "ctrl+t" }
    ]
}

  Mit der Option copyOnSelect true, werden markierte Texte in die Zwischenablage kopiert, wie es in Linux Bash oder von PuTTY bekannt ist.

Die Datei profiles.json befindet sich in folgendem Pfad:

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState
Windows Explorer

Windows Terminal Settings

Windows Terminal Settings öffnen über die Pfeilspitze nach unten, oder über den Tastatur Hotkey Ctrl+,

Windows Terminal Settings

  Ein Windows-Terminal referenziert über die GUID (Globally Unique Identifier) in seiner Sektion (guid) in profiles.json, wer eine neue GUID erzeugen möchte, kann folgendes Command in der PowerShell ausführen.

PS C:\> [guid]::NewGuid()

Guid
----
ebe11d6b-36cc-46e3-a580-459fa0c3a06c

PS C:\>

Git for Windows Arbeitsumgebung gibt es im Download

Git Icons werden in den LocalState Ordner gespeichert.

Windows Terminal Splitting

Windows Terminal erlaubt das splitting der Terminal Fenster mit Ctrl+- Horizontal, mit Crtl+. in Vertikaler Aufteilung der Fenster.

Windows Terminal Split Horizontal Ctrl+- / Split Vertikal Ctrl+

Windows Terminal OpenSSH

Secure Shell zu einem Remote Host aus dem Windows Terminal wird emöglicht, wenn unter Windows 10, Apps & Features – Optionale Features, das Paket OpenSSH Client installiert wurde.

In der Zeile commandLine wird SSH zu einem Host aufgerufen, in einer Profile Sektion in der Datei profiles.json:

"commandline" : "ssh.exe fedora",

Dabei muss die Authentifizierung mittels SSH-Key angewandt werden, der mit ssh-keygen erzeugte Public Key befindet sich hier auf dem Host fedora.foo.bar unter User home neutrino ~/.ssh/authorized_keys.

Die SSH-Konfigurationsdatei hierfür auf dem lokalen Host hat folgenden Inhalt in ~/.ssh/config

Host fedora.foo.bar
    HostName fedora
    User neutrino
    IdentityFile ~/.ssh/hostkey
    ServerAliveInterval 60

  IdentityFile ist der in Datei ~/.ssh/hostkey beinhaltete Privatkey dieser mit ssh-keygen generiert wurde.

„commandline“ : „ssh.exe fedora“