Nächste: , Vorige: , Nach oben: Persönliche Dienste   [Inhalt][Index]


13.3.6 Secure Shell

Im OpenSSH-Paket befindet sich ein Clientprogramm, nämlich der Befehl ssh, um eine Verbindung zu entfernten Maschinen über das SSH-Protokoll herzustellen (eine „Secure shell“). Mit dem Modul (gnu home services ssh) können Sie OpenSSH auf vorhersehbare Weise einrichten, nahezu unabhängig vom Zustand, in dem Ihr lokaler Rechner ist. Dazu instanziieren Sie home-openssh-service-type in Ihrer Persönlichen Konfiguration wie im Folgenden erklärt.

Variable: home-openssh-service-type

Dies ist der Diensttyp zum Einrichten des OpenSSH-Clients. Dadurch werden mehrere Dinge erledigt:

  • Es wird eine Datei ~/.ssh/config bereitgestellt, damit je nach Ihrer Konfiguration ssh die Rechner kennt, mit denen Sie sich regelmäßig verbinden, und Parameter damit assoziiert werden können.
  • Es wird eine Datei ~/.ssh/authorized_keys bereitgestellt, in der öffentliche Schlüssel eingetragen sind, mit denen man sich ausweisen muss, damit der lokale SSH-Server, sshd, Verbindungen zu diesem Benutzerkonto akzeptieren kann.
  • Optional wird auch eine Datei ~/.ssh/known_hosts bereitgestellt, damit ssh die Rechner authentifizieren kann, mit denen Sie sich verbinden.

Hier sehen Sie ein Beispiel, wie so ein Dienst aussehen und konfiguriert werden kann, wenn Sie ihn im services-Feld innerhalb von home-environment in Ihrer Persönlichen Konfiguration eintragen:

(service home-openssh-service-type
         (home-openssh-configuration
          (hosts
           (list (openssh-host (name "ci.guix.gnu.org")
                               (user "charlie"))
                 (openssh-host (name "chbouib")
                               (host-name "chbouib.example.org")
                               (user "supercharlie")
                               (port 10022))))
          (authorized-keys (list (local-file "alice.pub")))))

Im obigen Beispiel sind zwei Rechner mit Parametern angegeben, so dass wenn Sie etwa ssh chbouib ausführen, automatisch eine Verbindung zu chbouib.example.org auf Port 10022 hergestellt wird und Sie als Benutzer ‘supercharlie’ angemeldet werden. Außerdem wird der öffentliche Schlüssel in alice.pub autorisiert und dessen Eigentümerin darf eingehende Verbindungen an Ihr Konto am Rechner aufbauen.

Mit einer home-openssh-service-type-Instanz des Dienstes muss ein home-openssh-configuration-Verbundsobjekt assoziiert werden; die Beschreibung folgt nun.

Datentyp: home-openssh-configuration

Der Datentyp, der die Konfiguration für den OpenSSH-Client und auch den -Server bezüglich der Persönlichen Umgebung beschreibt. Dazu gehören die folgenden Felder:

hosts (Vorgabe: '())

Eine Liste von openssh-host-Verbundsobjekten, mit denen Rechnernamen und damit assoziierte Verbindungsparameter festgelegt werden (siehe unten). Diese Rechnerliste wird in ~/.ssh/config platziert, was ssh beim Start ausliest.

known-hosts (Vorgabe: *unspecified*)

Es muss eines hiervon sein:

  • *unspecified*, in diesem Fall überlässt home-openssh-service-type es dem ssh-Programm und Ihnen als Benutzer, die Liste bekannter Rechner in ~/.ssh/known_hosts zu pflegen, oder
  • eine Liste dateiartiger Objekte, die dann zusammengefügt werden zu ~/.ssh/known_hosts.

In der Datei ~/.ssh/known_hosts steht eine Liste von Paaren aus Rechnername und zugehörigem Schlüssel, mit denen ssh die Rechner authentifiziert, mit denen Sie sich verbinden. So werden mögliche Angriffe mit Doppelgängern erkannt. Das vorgegebene Verhalten von ssh folgt dem Prinzip TOFU, Trust-on-first-use: Wenn Sie sich zum ersten Mal verbinden, wird der zum Rechner gehörende Schlüssel in dieser Datei für die Zukunft gespeichert. Genau so verhält sich ssh, wenn sie die Einstellung von known-hosts unspezifiziert lassen (d.h. sie den Wert *unspecified* hat).

Wenn Sie stattdessen die Liste bekannter Rechnerschlüssel vorab im known-hosts-Feld hinterlegen, haben Sie eine eigenständige und zustandslose Konfiguration, die Sie auf anderen Rechnern jederzeit nachbilden können. Dafür stellt es beim ersten Mal einen Mehraufwand dar, die Liste aufzustellen, deshalb ist *unspecified* die Vorgabeeinstellung.

authorized-keys (Vorgabe: #false)

Vorgegeben ist #false, was bedeutet, dass eine gegebenenfalls vorhandene Datei ~/.ssh/authorized_keys in Ruhe gelassen wird. Andernfalls muss hierfür eine Liste dateiartiger Objekte angegeben werden, von denen jedes einen öffentlichen SSH-Schlüssel enthält, für den es erlaubt ist, sich mit dieser Maschine zu verbinden.

Intern werden die Dateien zusammengefügt und als ~/.ssh/authorized_keys bereitgestellt. Wenn auf diesem Rechner ein OpenSSH-Server, sshd, läuft, kann er diese Datei berücksichtigen; so verhält sich sshd in seiner Vorgabeeinstellung, aber Sie sollten wissen, dass man sshd auch so konfigurieren kann, dass es die Datei ignoriert.

add-keys-to-agent (Vorgabe: no)

Mit dieser Zeichenkette bestimmen Sie, ob neue Schlüssel automatisch zum laufenden ssh-agent hinzugefügt werden sollen. Wenn Sie sie auf yes setzen und ein Schlüssel aus seiner Datei geladen wurde, bleiben Schlüssel und Passphrase im SSH-Agenten für einige Zeit (die voreingestellte Gültigkeitsdauer) gespeichert, als hätte man ssh-add aufgerufen. Wenn Sie die Option auf ask setzen, wird ssh um Bestätigung bitten. Wenn Sie sie auf confirm setzen, müssen Sie jede Verwendung des Schlüssels bestätigen. Wenn Sie sie auf no setzen, werden Schlüssel nicht im SSH-Agenten gespeichert. Alternativ können Sie für diese Option eine Zeitdauer angeben, wie lange der Schlüssel beim ssh-agent gespeichert bleibt, und danach wird er automatisch entfernt. Sie können also entweder no, yes, confirm (optional gefolgt von einer Zeitdauer), ask oder eine Zeitdauer angeben.

Datentyp: openssh-host

Verfügbare openssh-host-Felder sind:

name (Typ: Zeichenkette)

Der Name zu dieser Rechnerdeklaration. Für einen openssh-host darf nur entweder name oder match-criteria festgelegt werden. Für allgemeine Optionen verwenden Sie \"*\" als einen host-name.

host-name (Typ: Vielleicht-Zeichenkette)

Der Rechnername, z.B. "foo.example.org" oder "192.168.1.2".

match-criteria (Typ: Vielleicht-Match-Kriterien)

Wenn angegeben, benennt diese Zeichenkette alle Rechner, für die der Eintrag gelten soll, anstelle des Feldes host-name. Ihr erstes Element muss all oder ein Schlüsselwort aus ssh-match-keywords sein. Die restlichen Elemente sind Argumente an das Schlüsselwort oder weitere Kriterien. Für einen openssh-host darf nur entweder name oder match-criteria festgelegt werden. Die anderen Konfigurationsoptionen darin werden für alle zu match-criteria passenden Rechner gelten.

address-family (Typ: Vielleicht-Adressfamilie)

Welche Adressfamilie benutzt werden soll, wenn eine Verbindung zum Rechner hergestellt wird: Entweder AF_INET (nur als IPv4-Verbindung) oder AF_INET6 (nur als IPv6-Verbindung). Außerdem ist es möglich, für das Feld keinen Wert anzugeben, wenn jede Adressfamilie erlaubt werden soll.

identity-file (Typ: Vielleicht-Zeichenkette)

Anhand welcher Identitätsdatei Sie sich authentisieren, z.B. "/home/charlie/.ssh/id_ed25519".

port (Typ: Vielleicht-Natürliche-Zahl)

Die TCP-Portnummer, mit der eine Verbindung hergestellt wird.

user (Typ: Vielleicht-Zeichenkette)

Der Benutzername am entfernten Rechner.

forward-x11? (Typ: Vielleicht-Boolescher-Ausdruck)

Ob Verbindungen an entfernte grafische X11-Clients an die grafische lokale X11-Anzeige weitergeleitet werden.

forward-x11-trusted? (Typ: Vielleicht-Boolescher-Ausdruck)

Ob den entfernten X11-Clients Vollzugriff auf die eigene grafische X11-Anzeige gewährt werden soll.

forward-agent? (Typ: Vielleicht-Boolescher-Ausdruck)

Ob der Authentisierungsagent (falls vorhanden) an die entfernte Maschine weitergeleitet wird.

compression? (Typ: Vielleicht-Boolescher-Ausdruck)

Ob übertragene Daten komprimiert werden.

proxy (Typ: Vielleicht-„proxy-command“-oder-„proxy-jump“-Liste)

Was für ein Befehl aufgerufen werden soll, um die Verbindung zu diesem Server herzustellen; alternativ eine Liste der Rechnernamen der SSH-Zwischenstationen, über die eine Verbindung mit dem Server aufgebaut wird. Setzen Sie dieses Feld entweder auf einen proxy-command oder auf eine Liste von proxy-jump-Verbundsobjekten.

Zum Beispiel würde als proxy-command der Befehl, um sich mittels eines HTTP-Proxys auf 192.0.2.0 zu verbinden, so angegeben: (proxy-command "nc -X connect -x 192.0.2.0:8080 %h %p").

Datentyp: proxy-jump

Verfügbare proxy-jump-Felder sind:

user (Typ: Vielleicht-Zeichenkette)

Der Benutzername am entfernten Rechner.

host-name (Typ: Zeichenkette)

Der Rechnername, z.B. foo.example.org oder 192.168.1.2.

port (Typ: Vielleicht-Natürliche-Zahl)

Die TCP-Portnummer, mit der eine Verbindung hergestellt wird.

host-key-algorithms (Typ: Vielleicht-Zeichenketten-Liste)

Die Liste der Schlüsselalgorithmen, die für diesen Rechner akzeptiert werden, etwa '("ssh-ed25519").

accepted-key-types (Typ: Vielleicht-Zeichenketten-Liste)

Die Liste der akzeptierten Schlüsseltypen für öffentliche Schlüssel.

extra-content (Vorgabe: "") (Typ: Rohe-Konfigurations-Zeichenkette)

Zusätzlicher Inhalt, der unverändert zu diesem Host-Block in ~/.ssh/config noch angehängt wird.

Mit dem parcimonie-Dienst wird ein Daemon gestartet, der nach und nach einen öffentlichen GnuPG-Schlüssel von einem Schlüsselserver aktualisiert. Dabei wird je ein Schlüssel gleichzeitig aktualisiert. Nach jeder Aktualisierung eines Schlüssels pausiert Parcimonie eine zufällige Zeitspanne lang. Die Zeitspanne ist lang genug, damit der zuletzt gewählte Tor-Kanal ausläuft. So soll es für einen Angreifer schwierig sein, die verschiedenen Schlüsselaktualisierungen in Zusammenhang zu bringen.

Zum Beispiel würden Sie hiermit parcimonie so einrichten, dass es die Schlüssel in Ihrem GnuPG-Schlüsselbund aktualisiert, sowie außerdem die Schlüsselbunde, die Guix eingerichtet hat, etwa wenn Sie guix import benutzen:

(service home-parcimonie-service-type
         (home-parcimonie-configuration
           (refresh-guix-keyrings? #t)))

Dabei nehmen wir an, dass der Tor-Dienst für anonyme Netzwerkrouten auf Ihrem System bereits läuft. Auf Guix System heißt das zum Beispiel, dass Sie tor-service-type eingerichtet haben (siehe tor-service-type).

Es folgt die Referenz dieses Dienstes.

Variable: parcimonie-service-type

Dies ist der Diensttyp für parcimonie (Webauftritt von Parcimonie). Sein Wert muss ein home-parcimonie-configuration-Objekt sein, wie im Folgenden beschrieben.

Datentyp: home-parcimonie-configuration

Verfügbare home-parcimonie-configuration-Felder sind:

parcimonie (Vorgabe: parcimonie) (Typ: dateiartig)

Das parcimonie-Paket, das benutzt werden soll.

verbose? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)

Ob die Protokollierung des Dienstes ausführlicher sein soll.

gnupg-already-torified? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)

Ob GnuPG bereits so eingestellt ist, dass aller Netzwerkverkehr über Tor geleitet wird.

refresh-guix-keyrings? (Vorgabe: #t) (Typ: Boolescher-Ausdruck)

Guix legt ein paar Schlüsselbunde in $XDG_CONFIG_DIR an, z.B. bei Aufrufen von guix import (siehe guix import aufrufen). Wenn Sie dies auf #t setzen, werden auch diese durch Guix angefertigten Schlüsselbunde aktualisiert.

extra-content (Vorgabe: #f) (Typ: Rohe-Konfigurations-Zeichenkette)

„Roher Inhalt“, der zusätzlich an den parcimonie-Befehl übergeben wird.

Das OpenSSH-Paket enthält einen Daemon, nämlich den Befehl ssh-agent, mit dem Schlüssel für Verbindungen zu entfernten Maschinen über das Protokoll SSH (Secure Shell) vorgehalten werden. Mit dem Dienst aus (gnu home services ssh) können Sie den ssh-agent von OpenSSH so einrichten, dass er ab der Benutzeranmeldung ausgeführt wird. Siehe home-gpg-agent-service-type für eine Alternative zum ssh-agent von OpenSSH.

Hier sehen Sie ein Beispiel, wie so ein Dienst aussehen und konfiguriert werden kann, wenn Sie ihn im services-Feld innerhalb von home-environment in Ihrer Persönlichen Konfiguration eintragen:

(service home-ssh-agent-service-type
         (home-ssh-agent-configuration
          (extra-options '("-t" "1h30m"))))
Variable: home-ssh-agent-service-type

Dies ist der Diensttyp des Persönlichen ssh-agent-Dienstes. Als Wert verwendet er ein home-ssh-agent-configuration-Objekt.

Datentyp: home-ssh-agent-configuration

Verfügbare home-ssh-agent-configuration-Felder sind:

openssh (Vorgabe: openssh) (Typ: dateiartig)

Das zu benutzende OpenSSH-Paket.

socket-directory (Vorgabe: XDG_RUNTIME_DIR/ssh-agent") (Typ: G-Ausdruck)

Das Verzeichnis, wo der Socket für den ssh-agent liegen soll.

extra-options (Vorgabe: '())

Zusätzliche Befehlszeilenoptionen, die dem ssh-agent mitgegeben werden sollen. Führen Sie man ssh-agent aus, um weitere Informationen zu erhalten.


Nächste: GNU Privacy Guard, Vorige: Benutzer-Daemons verwalten, Nach oben: Persönliche Dienste   [Inhalt][Index]