Alle Beiträge von Don Matteo

lebt in der Schweiz, ist System Engineer MCP bei A-Enterprise GmbH. Mitglied des UNBLOG Knowledge Network. Author und Blogger zu den Themen, Tutorials für Linux und Open Source.

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“

Postfix mit SASL-Authentifizierung verwenden

SMTP-Server müssen entscheiden, ob ein SMTP-Client autorisiert ist E-Mails zu versenden, für die der Server selbst zuständig ist.

Simple Authentication and Security Layer (SASL) Integration Postfix


Diese Anleitung beschreibt, wie man ein MTA (Mail Transport Agent) Postfix unter CentOS 7 mit CyrusSASL zur SMTP-Authentifizierung (SMTP-Auth) erweitert. Danach können Clients E-Mails mittels SMTP-Auth versenden. Diese Anleitung ist geprüft unter CentOS Linux release 7.7.1908 (Core), mit Postfix v2.10.1 und Cyrus-SASL 2.1.26. Es wird davon ausgegangen das Postfix bereits konfiguriert ist und TLS (Transport Layer Security) implementiert ist.

Postfix implementiert die SASL Library nicht selbst, sondern verwendet vorhandene Implementierungen als Bausteine. Dies bedeutet, dass einige SASL-bezogene Konfigurationsdateien zu Postfix gehören, während andere Konfigurationsdateien zu der spezifischen SASL-Implementierung gehören, die Postfix verwenden wird.

Cyrus-SASL Installation

Als root die Pakete mit folgendem Command installieren:

yum install cyrus-sasl cyrus-sasl-plain -y

Die einzelnen SASL-Mechanismen werden als RPMs installiert.

Es folgt die Einbindung für Postfix, hierzu die modifikation in der Datei /etc/postfix/master.cf vornehmen:

==========================================================================
 service type  private unpriv  chroot  wakeup  maxproc command + args
 (yes)   (yes)   (yes)   (never) (100)
 ==========================================================================
 smtps     inet  n       -       n       -       -       smtpd
   -o syslog_name=postfix/smtps
   -o smtpd_tls_wrappermode=yes
   -o smtpd_sasl_auth_enable=yes
   -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

Damit Postfix mit SASL funktioniert, darf Postfix nicht im chroot-Verzeichnis laufen, Zeile smtps bei Position 5 (n).

SMTP-Auth für lokale Benutzer konfigurieren, wir editieren die Postfix Datei /etc/postfix/main.cf:

smtpd_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = !gssapi, !login, static:all
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd 

Die Konfiguration von Cyrus-SASL erfolgt durch zwei Dateien. Die erste Datei /etc/sysconfig/saslauthd kann übernommen werden:

# Directory in which to place saslauthd's listening socket, pid file, and so
# on.  This directory must already exist.
SOCKETDIR=/run/saslauthd

# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam

# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=

Die SASL-Mechanismen PLAIN und LOGIN, CRAM-MD5 und DIGEST-MD5 kommen oft zum Einsatz, hierfür ist die Konfigurationsdatei /etc/sasl2/smtpd.conf zuständig, die bereitstellung wurde ebenfalls bei der Installation durchgeführt:

pwcheck_method: saslauthd
mech_list: plain login CRAM-MD5 DIGEST-MD5

Nun Cyrus-SASL Library Daemon starten und den systemd autostart aktivieren, anschliessend Postfix re-starten:

systemctl start saslauthd
systemctl enable saslauthd
systemctl restart postfix 

Der SMTP-Submission Support auf Port 587 ist nun aktiviert, überprüfen lässt sich dies mit folgendem Kommando:

ss -tuln4 | grep 587
tcp    LISTEN     0      100       *:587                  *:*

Zur Authentifizierung am SMTP-Gateway wird nun ein Benutzer erstellt, dieser E-Mails über den MTA versenden soll:

adduser -M -s /sbin/nologin User24
passwd User24

Eine lokale UserID ist für unsere Anforderung hier ausreichend, Cyrus-SASL unterstützt weiter LDAP und SQL, um mit beispielweise Kopano oder einem AD Verzeichnisdienst zu interagieren.

Cyrus-SASL SMTP-Auth Testen

Welche Mechanismen zur Authentifizierung innerhalb von STARTTLS unterstützt werden, kann mit OpenSSL überprüft werden:

openssl s_client -connect mail.relayhost.net:587 -starttls smtp

In der Ausgabe von openssl ein EHLO übergeben:

EHLO Hans
 250-mail.relayhost.net
 250-PIPELINING
 250-SIZE 27262976
 250-ETRN
 250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5
 250-ENHANCEDSTATUSCODES
 250-8BITMIME
 250 DSN

Ist OpenSSL nicht vorliegend, kann dazu auch Telnet genutzt werden, es wird zum Gateway mail.relayhost.net über Port 587 eine Verbindnung hergestellt, dazu kann auch PuTTY oder KiTTY verwendet werden.

Nun möchten wir uns beim Gateway (MTA) Authentifizieren. Der Benutzername und das Passwort muss im base64-codierten Format an das SMTP-Gateway übertragen werden, Hierzu gibt man die folgenden Befehlszeilen ein, um die base64-Codierung für den Benutzername und das Passwort zu erhalten.

echo -en "userxy" | base64
dXNlcnh5
echo -en "password" | base64
cGFzc3dvcmQ=

Die SASL SMTP-Auth Konfiguration und Authentifizierung überprüft man wie folgt mit ausführen der folgenden Zeilen im Terminal, nach Eingabe von AUTH LOGIN der mit Base64 codierte Benutzername und das Passwort einfügen.

AUTH LOGIN
dXNlcnh5
cGFzc3dvcmQ=
$ telnet mail.relayhost.net 25
Trying mail.relayhost.net...
Connected to mail.relayhost.net
Escape character is '^]'.
220 mail.relayhost.net ESMTP MAIL Service ready at  Sat, 12 Mar 2019 09:26:12
EHLO smtp.example.com
250-smtp.example.com Hello
250-AUTH=LOGIN
250-AUTH LOGIN
250-TURN
250-SIZE 2097152
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK
AUTH LOGIN
334 VXClcm5hbWU6
dXNlcnh5
334 UGFzc4dvcmQ8
cGFzc3dvcmQ=
235 2.7.0 Authentication successful

Die Ausgabe SMTP-Auth von Postfix mit Cyrus-SASL.

Die oben kodierten Credentials bei den 334 Prompts einfügen, hier bei Zeile 24 als userxy und bei Zeile 26 unser password.

  Ein 250 STARTTLS in der Ausgabe zeigt die Voraussetzungen, das Klartext-Benutzernamen mit Passwort durch STARTTLS geschützt an das SMTP-Gateway übermittelt werden.

Eine weitere einfache Möglichkeit gibt es mit SMTPConsole ein SMTP-Gateway zu testen.

SMTPConsole