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.

Scheme-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, wie 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: '())

Hierfür muss 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.

Datentyp: openssh-host

Verfügbare openssh-host-Felder sind:

name (Typ: Zeichenkette)

Der Name zu dieser Rechnerdeklaration.

host-name (Typ: Vielleicht-Zeichenkette)

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

address-family (Typ: Adressfamilie)

Welche Adressfamilie benutzt werden soll, wenn eine Verbindung zum Rechner hergestellt wird: Entweder AF_INET (nur als IPv4-Verbindung), AF_INET6 (nur als IPv6-Verbindung) oder Sie lassen es bei *unspecified* (wenn Ihnen jede Adressfamilie recht ist).

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? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)

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

forward-x11-trusted? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)

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

forward-agent? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)

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

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

Ob übertragene Daten komprimiert werden.

proxy-command (Typ: Vielleicht-Zeichenkette)

Was für ein Befehl aufgerufen werden soll, um die Verbindung zu diesem Server herzustellen. Zum Beispiel wäre ein Befehl, um sich mittels eines HTTP-Proxys auf 192.0.2.0 zu verbinden: "nc -X connect -x 192.0.2.0:8080 %h %p".

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.


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