1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Server administrieren

OpenSSH verbindet das Terminal über eine verschlüsselte Verbindung mit dem Kommandointerpreter auf entfernt stehenden Rechnern und ermöglicht die passwortfreie Anmeldung mit einem kryptografischen Schlüssel.

Sichere Verbindung vom Client zum Server

Pakete installieren

apt install openssh-client libpam-ssh sshfs

Das Client-Paket enthält folgende Programme:

Konfigurationsdateien

Client Server
/etc/ssh/ssh_config
Systemweite Konfiguration des Clients
/etc/ssh/ssh_known_hosts
Liste allgemeiner bekannter Hostschlüssel
~/.ssh/config
Benutzer- und hostspezifische Einstellungen
~/.ssh/id_rsa.pub
Öffentlicher Schlüssel des Benutzers
~/.ssh/id_rsa
Privater Schlüssel des Benutzers
~/.ssh/known_hosts
Liste gesammelter Hostschlüssel
/etc/ssh/sshd_config
Konfiguration des Daemons
/etc/ssh/ssh_host_{dsa,ecds,ed25519,rsa}_key
Hostschlüssel für diverse Algorithmen
/etc/ssh/sshrc
Systemweites Anmeldeskript
~/.ssh/authorized_keys
Liste zugriffsberechtigter Schlüssel
~/.ssh/environment
Benutzerspezifische Umgebungsvariablen
~/.ssh/rc
Benutzerspezifisches Anmeldeskript

Schlüssel generieren

Wir generieren einmalig einen privaten Schlüssel, der unter ~/.ssh/id_rsa abgelegt wird.

ssh-keygen

Das Programm fragt nach einer Passphrase, mit der der private Schlüssel gesichert wird. Wenn diese mit dem Anmeldepasswort übereinstimmt, startet libpam-ssh automatisch den ssh-agent(1). Den öffentlichen Schlüssel aus ~/.ssh/id_rsa.pub kopieren wird auf den Server, wo er unter ~/.ssh/authorized_keys abgelegt wird.

ssh-copy-id Host

Zugänge konfigurieren

Eine Konfigurationsdatei hilft, wenn

Zum Beispiel:

~/.ssh/config
Host Host User User

Wenn ein Server nicht direkt erreichbar ist, weil er zum Beispiel hinter einer restriktiven Firewall steht, kann man über einen exponierten Host einen Tunnel aufbauen.

ssh -N -L LocalPort:TargetHost:TargetPort [User@]JumpHost

Auch solche Weiterleitungen kann man in der Konfiguration hinterlegen.

~/.ssh/config
Host TargetName User TargetUser Hostname TargetHost ProxyJump JumpHost

Verzeichnisse auf anderen Rechnern lassen sich mit dem FUSE-Treiber sshfs(1) transparent montieren.

sshfs Host:Dir Dir

Zum aushängen:

fusermount -u Dir

Client-Referenz

Direktiven für die Konfiguration des Clients, siehe ssh_config(5)

Direktive Vorgabe Opt. Beschreibung
Host Pattern Rechnerspezifischen Abschnitt einleiten
Match criteria Von Bedingungen abhängigen Abschnitt einleiten
AddKeysToAgent no Passphrase im Agenten merken
AddressFamily any -4 Internetprotokolle einschränken
BatchMode no Passwortabfrage abschalten (für Skripte)
BindAddress IpAddress -b Adresse für ausgehende Verbindungen
BindInterface IpAddress -B Schnittstelle für ausgehende Verbindungen
CanonicalDomains Suffix Liste von Suchdomänen
CanonicalizeFallbackLocal yes Resolver verwenden
CanonicalizeHostname no Hostnamen über den Resolver auflösen
CanonicalizeMaxDots 1 Anzahl der Punkte im Namen, bis nicht mehr kononisiert wird
CanonicalizePermittedCNAMEs Source:Dest
CASignatureAlgorithms …,ssh-rsa Algorithmen für Zertifizierugnsstellen
CertificateFile File Benutzerzertifikat
ChallengeResponseAuthentication yes Authentifizierung via PAM erlauben
CheckHostIP yes Hostschlüssel prüfen (~/.ssh/known_hosts)
Ciphers 3des-cbc,… -c Chiffren für Sitzungsschlüssel
ClearAllForwardings no Alle Arten von Weiterleitungen deaktivieren
Compression no -C Daten komprimieren
ConnectionAttempts 1 Obergrenze für Versuche, um eine Verbindung aufzubauen
ConnectTimeout Seconds Wartezeit bis der Server reagiert
ControlMaster no -M Verbindung für mehrere Sitzungen teilen
ControlPath File -S Steuersockel für gemeinsame Verbindungen
ControlPersist no Verbindung offen halten
DynamicForward [IpAddress:]Port Lokalen Port weiterleiten
EnableSSHKeysign no Hostschlüssel mit ssh-keysign(8) unterzeichnen
EscapeChar ~ -e Flutchsymbol für interaktive Verbindungen
ExitOnForwardFailure no Abbruch bei Fehlern mit der Weiterleitung
FingerprintHash sha256 Algorithmus um Fingerabdrücke auszugeben
ForwardAgent no -A Agent weiterleiten (nur an vertrauenswürdige Hosts!)
ForwardX11 no -X X11-Protokoll weiterleiten
ForwardX11Timeout Seconds Wartezeit für X11-Weiterleitung (20 Minuten)
ForwardX11Trusted no -Y Zugriff auf das X11 Display
GatewayPorts no -D Zugriff auf lokale Ports erlauben
GlobalKnownHostsFile File Liste vertrauenswürdiger Hosts (/etc/ssh/ssh_known_hosts)
GSSAPIAuthentication no -K Authentifizierung per GSSAPI
GSSAPIKeyExchange no Schlüsselaustausch per GSSAPI
GSSAPIClientIdentity File Ticket des Clients
GSSAPIServerIdentity File Identität des Servers
GSSAPIDelegateCredentials no -k Identität an den Server weiterleiten
GSSAPIRenewalForcesRekey no Sitzungsschlüssel zusammen mit Ticket erneuern
GSSAPITrustDns no Hostnamen kanonisieren
HashKnownHosts no Hostnamen verschleiern in ~/.ssh/known_hosts
HostbasedAuthentication no ~/.rhosts und ~/.shosts vertrauen
HostbasedKeyTypes …,ssh-rsa Schlüsselarten für hostbasierte Authentifizierung
HostKeyAlgorithms …,ssh-rsa Algorithmen für hostbasierte Authentifizierung
HostKeyAlias Host Alternativer Hostname in ~/.ssh/known_hosts
HostName Host Echter Hostname oder IP-Adresse
IdentitiesOnly no Nur explizit genannte Dateien verwenden
IdentityAgent File | $Name Sockel des Agenten (SSH_AUTH_SOCK)
IdentityFile ~/.ssh/id_rsa -i Privater Schlüssel
IgnoreUnknown Glob Ignoriermuster für unbekannte Direktiven
Include File Weitere Konfigurationsdatei einbinden
IPQoS lowdelay TOS oder DSCP Klasse
KbdInteractiveAuthentication yes Serverseitig gesteuerter Dialog
KbdInteractiveDevices method Erlaubte Methoden
KexAlgorithms curve25519… Algorithmen für den Austausch des Sitzungsschlüssels
LocalCommand Command Nach Anmeldung Kommando auf dem Client ausführen
LocalForward [IpAddress:]Port Host:Port-L Port vom Client zum Server durchreichen
LogLevel INFO Verbosität beim Loggen
MACs …,hmac-sha1 -m Algorithmen für Prüfsummen
NoHostAuthenticationForLocalhost no Hostprüfung auf localhost weglassen
NumberOfPasswordPrompts 3 Obergrenze für Versuche
PasswordAuthentication yes Authentifizierung per Passwort versuchen
PermitLocalCommand no Lokale Kommandos ausführen
PKCS11Provider File -I Pfad einer PKCS#11 Bibliothek (/usr/lib/libpkcs11.so)
Port 22 -p Portnummer des Servers
PreferredAuthentications …,password Reihenfolge der Authentifizierungsmechanismen
ProxyCommand Command Kommandos vor dem Verbinden ausführen
ProxyJump [User@]Host[:Port]-J Zwischenschritt einfügen
ProxyUseFdpass no Deskriptor weiterreichen
PubkeyAcceptedKeyTypes …,ssh-rsa Liste mit erlaubten Schlüsselarten
PubkeyAuthentication yes Authentifizierung mit Schlüssel versuchen
RekeyLimit Bytes[KMG] [Seconds] Datenmenge und Dauer bis zum nächsten Sitzungsschlüssel
RemoteCommand Command -N Kommando auf dem Server ausführen
RemoteForward [IpAddress:]Port -R Port auf dem Server weiterleiten
RequestTTY auto -t Pseudo-Terminal anfordern
RevokedHostKeys File Liste mit kompromittierten Hostschlüsseln
SendEnv Glob Muster für durchzurecihende Umgebungsvariablen
ServerAliveCountMax 3 Verbindung zu inaktiven Servern nach N Versuchen beenden
ServerAliveInterval 0 Server alle N Sekunden kontaktieren
SetEnv Name=Value Umgebungsvariable setzen
StreamLocalBindMask 0177 Maske für Sockel
StreamLocalBindUnlink no Verfallene Sockel löschen
StrictHostKeyChecking ask Hostschlüssel verifizieren
SyslogFacility USER -y Einrichtung für Protokollierung
TCPKeepAlive yes Verbindung kontinuierlich prüfen
Tunnel no Port-Weiterleitung über tun-Schnittstelle
TunnelDevice any[:any] Client- und optional serverseitige Schnittstelle
User User -l Benutzername zum Anmelden
UpdateHostKeys no Zusätzliche Hostschlüssel speichern
UserKnownHostsFile ~/.ssh/known_hosts Liste verrauenswürdiger Hostschlüssel
VerifyHostKeyDNS no Einem eventuellen SSHFP Record vertrauen
VisualHostKey no Hostschlüssel beim Anmelden darstellen
XAuthLocation /usr/bin/xauth Programm für X11-Authentifizierung
no
yes
confirm
ask
no
yes
ask
auto
bsdauth
pam
gssapi-with-mic
hostbased
publickey
keyboard-interactive
password
auto
no
yes
force
ask
accept-new
yes
no
off
no
yes
point-to-point
ethernet
no
yes
ask

Server-Referenz

Direktiven für die Konfigurations des Daemons, siehe sshd_config(5)

Direktive Vorgabe Opt. Beschreibung
AcceptEnv Glob Muster für durchreichbare Umgebungsvariablen (Keine)
AddressFamily any -4 Internetprotokolle einschränken
AllowAgentForwarding yes Agenten durchreichen
AllowStreamLocalForwarding yes Weiterleitung von Sockeln erlauben
AllowTcpForwarding yes Weiterleitung von TCP-Ports erlauben
AllowGroups Group Liste von zugelassenen Gruppen (Alle)
AllowUsers User[@Host] Liste von zugelassenen Benutzern (Alle)
AuthenticationMethods any Erlaubte Authentifizierungsmethoden
AuthorizedKeysFile ~/.ssh/authorized_keys Liste öffentlicher Schlüssel
AuthorizedKeysCommand File Kommando, dass eine Liste mit Schlüsseln erzeugt
AuthorizedKeysCommandUser Uid Benutzer, unter dem das Kommando ausgeführt wird
AuthorizedPrincipalsFile File Namensliste für Authentifizierung per Zertifikat
AuthorizedPrincipalsCommand File Kommando mit Liste erlaubter Namen erzeugen
AuthorizedPrincipalsCommandUser Uid Benutzer, mit dem das Kommando ausgeführt wird
Banner File Datei vor Authentifizierung anzeigen.
CASignatureAlgorithms …,ssh-rsa Algorithmen für Zertifizierungsstellen
ChallengeResponseAuthentication yes Authentifizierung via PAM
ChrootDirectory none Pfad um Sitzungen einzusperren
Ciphers 3des-cbc,… Chiffren für Sitzungsschlüssel
ClientAliveCountMax 3 Verbindung zu inaktiven Clients nach N Versuchen beenden
ClientAliveInterval 0 Client alle N Sekunden kontaktieren
Compression yes Daten komprimieren
DebianBanner yes Distributionsspezifisches Suffix übermitteln
DenyGroups Group Liste von ausgeschlossenen Benutzergruppen (Keine)
DenyUsers User[@Host] Liste von ausgeschlossenen Benutzern (Keine)
DisableForwarding no Alle Arten von Weiterleitung deaktivieren
ExposeAuthInfo no Authentifizierungsdaten protokollieren (SSH_USER_AUTH)
FingerprintHash sha256 Algorithmus um Fingerabdrücke zu protokollieren
ForceCommand none Festes Kommando ausführen (SSH_ORIGINAL_COMMAND)
GatewayPorts no Weitergeleitete Ports auch an externe Schnittstellen binden
GSSAPIAuthentication no Authentifizierung per GSSAPI erlauben
GSSAPIKeyExchange no Schlüsseltausch per GSSAPI statt SSH erlauben
GSSAPICleanupCredentials yes Tickets beim Abmelden löschen
GSSAPIStrictAcceptorCheck yes ?
GSSAPIStoreCredentialsOnRekey no ?
HostbasedAcceptedKeyTypes …,ssh-rsa Algorithmen für hostbasierte Authentifizierung
HostbasedAuthentication no ~/.rhosts, ~/.shosts und /etc/hosts.equiv vertrauen
HostbasedUsesNameFromPacketOnly no Vertrauenswürde Hosts per DNS auflösen
HostCertificate File -c Optionales Hostzertifikat
HostKey /etc/ssh/*_key -h Privater Hostschlüssel
HostKeyAgent File Sockel für den Agenten (SSH_AUTH_SOCK)
HostKeyAlgorithms …,ssh-rsa Algorithmen für Hostschlüssel
IgnoreRhosts yes Benutzereigene ~/.rhosts und ~/.shosts ignorieren
IgnoreUserKnownHosts no Benutzereigene ~/.ssh/known_hosts ignorieren
IPQoS lowdelay TOS oder DSCP Klasse
KbdInteractiveAuthentication yes Serverseitig gesteuerter Dialog
KerberosAuthentication no Passwort gegen Kerberos prüfen (benötigt servtab)
KerberosGetAFSToken no Bei Anmeldung AFS-Token holen
KerberosOrLocalPasswd yes Passwort notfalls per NSS prüfen
KerberosTicketCleanup yes Tickets nach Abmeldung löschen
KexAlgorithms curve25519… Algorithmen für den Austausch des Sitzungsschlüssels
ListenAddress Host[:Port] Adressen auf den der Daemon lauscht
LoginGraceTime 120 -g Wartezeit bis zur erfolgreichen Anmeldung
LogLevel INFO Achtung, DEBUG protokolliert auch Passwörter
MACs …,hmac-sha1 Algorithmen für Prüfsummen (MAC)
Match criteria Von Bedingungen abhängigen Abschnitt einleiten
MaxAuthTries 6 Obergrenze für Authentifizierungsversuche
MaxSessions 10 Obergrenze für Sitzungen pro Verbindung
MaxStartups 10:30:100 Obergrenzen für Verbindungsversuche
PasswordAuthentication yes Anmeldung mit Passwort erlauben
PermitEmptyPasswords no Anmeldung mit Passwort nur erlauben, wenn gesetzt
PermitListen [Host:]Port Lauschende Port-Weiterleitung einschränken
PermitOpen Host:Port Ziele für Port-Weiterleitung einschränken
PermitRootLogin prohibt-password Anmeldung als root erlauben
PermitTTY yes Pseudo-Terminal reservieren
PermitTunnel no Port-Weiterleitung über tun-Schnittstelle erlauben
PermitUserEnvironment no Muster für überschreibbare Umgebungsvariablen
PermitUserRC yes Bei Anmeldung Benutzerskript ~/.ssh/rc ausführen
PidFile /run/sshd.pid Pfad der Prozessnummer, none für keine
Port 22 -p Portnummer des Daemons
PrintLastLog yes Datum der letzten Anmeldung ausgeben
PrintMotd yes Tagesmotto bei Anmeldung ausgeben (/etc/motd)
PubkeyAcceptedKeyTypes …,ssh-rsa Liste mit erlaubten Schlüsselarten (ssh -Q key)
PubkeyAuthentication yes Authentifizierung mit Schlüssel
RekeyLimit Bytes[KMG] [Seconds] Datenmenge und Dauer bis zum nächsten Sitzungsschlüssel
RevokedKeys File Liste mit kompromittierten Benutzerschlüsseln
RDomain Siehe rdomain(4)
SetEnv Name=Value Umgebungsvariable setzen
StreamLocalBindMask 0177 Maske für Sockel
StreamLocalBindUnlink no Verfallene Sockel löschen
StrictModes yes Zugriffsrechte prüfen
Subsystem Name Command Externes Subsystem (sftp)
SyslogFacility AUTH Einrichtung für Protokollierung
TCPKeepAlive yes Verbindung kontinuierlich prüfen
TrustedUserCAKeys File Liste mit vertrauenswürdigen Zertifizierungsstellen
UseDNS no Adressen zu Hostnamen auflösen
UsePAM no Passwörter mittels PAM prüfen
VersionAddendum - Zusätzlicher Text beim Verbindungsaufbau
X11DisplayOffset 10 Basis für Indexnummer der Anzeige
X11Forwarding no X11-Protokoll weiterleiten
X11UseLocalhost yes Lokale Adresse für X11-Port
XAuthLocation /usr/bin/xauth Programm für X11-Authentifizierung
any
inet
inet6
any
none
publickey
password
hostbased
keyboard-interactive
gssapi-with-mic
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
ssh-ed25519
rsa-sha2-512
rsa-sha2-256
ssh-rsa
3des-cbc
aes128-cbc
md5
sha256
ecdsa-sha2-nistp256-cert-v01@openssh.com
ecdsa-sha2-nistp384-cert-v01@openssh.com
ecdsa-sha2-nistp521-cert-v01@openssh.com
ssh-ed25519-cert-v01@openssh.com
rsa-sha2-512-cert-v01@openssh.com
rsa-sha2-256-cert-v01@openssh.com
ssh-rsa-cert-v01@openssh.com
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
ssh-ed25519
rsa-sha2-512
rsa-sha2-256
ssh-rsa

ssh-rsa
hmac-md5
hmac-sha1
hmac-sha2-512
lowdelay
throughput
reliability
af[1-4][1-3]
cs[0-7]
ef
N
none
curve25519-sha256

ecdh-sha2-nistp521
QUIET
FATAL
ERROR
INFO
VERBOSE
DEBUG
DEBUG1
DEBUG2
DEBUG3
DAEMON
USER
AUTH
LOCAL[0-7]
User
Group
Host
LocalAddress
LocalPort
RDomain
Address
prohibit-password
forced-commands-only
yes
no
yes
point-to-point
ethernet

Literatur

  1. Barrett, Silverman: SSH, The Secure Shell: The Definitive Guide, O'Reilly 2001
  2. Aris' Blog: SSH: Best practices
  3. Mozilla Infosec: OpenSSH server