Nächste: GNU Privacy Guard, Vorige: Benutzer-Daemons verwalten, Nach oben: Persönliche Dienste [Inhalt][Index]
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.
Dies ist der Diensttyp zum Einrichten des OpenSSH-Clients. Dadurch werden mehrere Dinge erledigt:
ssh
die Rechner kennt, mit denen Sie sich regelmäßig
verbinden, und Parameter damit assoziiert werden können.
sshd
, Verbindungen zu diesem
Benutzerkonto akzeptieren kann.
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.
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
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.
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")
.
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.
Dies ist der Diensttyp für parcimonie
(Webauftritt von
Parcimonie). Sein Wert muss ein home-parcimonie-configuration
-Objekt
sein, wie im Folgenden beschrieben.
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"))))
Dies ist der Diensttyp des Persönlichen ssh-agent
-Dienstes. Als Wert
verwendet er ein home-ssh-agent-configuration
-Objekt.
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]