Die 10 besten SSH-Tipps

16.01.2017

SSH-Logins gehören für die meisten Admins zum Alltag. Das kontinuierlich weiterentwickelte Programm bietet eine Menge Möglichkeiten, die nicht jeder kennt.

1. Public-Key-Authentifizierung statt Passwörtern

Im Allgemeinen wird empfohlen, statt der Authentifizierung per Passwort lieber asymmetrische Schlüsselpaare zu verwenden. Der Private Key liegt gesichert auf dem Client, während der Public Key auf den Server kopiert wird. Zusätzliche Sicherheit verschafft es, den Privatey Key mit einem Passwort oder Passphrase abzusichern – das ist deshalb auch die Standardeinstellung. Wer allerdings skriptgesteuert Befehle über SSH absetzen möchte, verwendet meist eher asymmetrischer Keys ohne Passphrase. Einen neuen Key erzeugt der Aufruf "ssh-keygen".
    
Empfohlen werden heute RSA-Keys mit großen Schlüssellängen (>=2048 Bit). DSA-Schlüssel sind nicht zuletzt wegen Edward Snowden in Verruf geraten und gelten in neuen SSH-Versionen als veraltet (deprecated). Alternativen sind ECDSA (Elliptic Curves) und EdDSA (Ed25519), die aber nicht kompatibel mit älteren SSH-Versionen sind. Bei ECDSA vermuten Paranoiker ebenfalls Manipulationen der NSA, weshalb im Zweifelsfall Ed25519 die sichere Wahl ist.

2. SSH absichern und Brute-Force-Angriffe verhindern

Ist Passwort-Authentifizierung erlaubt, können Angreifer Brute-Force-Angriffe versuchen, also einfach Benutzernamen und Passwörter beim SSH-Login durchprobieren. Dagegen hilft der erste Tipp oder ein Programm wie fail2ban oder SSHGuard, die das SSH-Log überwachen und bei fehlgeschlagenen Versuchen per Firewall weitere Logins sperren. Ein Nachteil solcher Programme ist, dass man sich unter Umständen selber aussperrt. Aber dies lässt sich normalerweise durch eine vernünftige Konfiguration verhindern.

Ein weiterer Sicherheits-Tipp ist, das Root-Login abzuschalten ("PermitRootLogin no" in "/etc/ssh/sshd_config"). Das ist natürlich nicht möglich, wenn man etwa für Backups auf dem Remote-Rechner Root-Rechte braucht (und etwa dort passwortloses sudo einzurichten, hilft hinsichtlich Sicherheit auch nicht weiter).

Empfehlenswert ist es auch, unsichere Algorithmen per Konfiguration abzuschalten ("Ciphers" in "/etc/ssh/sshd_config") – unter Umständen wieder auf Kosten der Kompatibilität.

Schließlich ist es, je nach Anwendungsfall, auch möglich, den Aktionsradius eines SSH-Users einzuschränken. Dies können Sie per Default schon mit der Konfigurationsdatei "authorized_keys" machen, um nur einen bestimmten Befehl zu erlauben (Stichwort: Backup). Das ist aber auch nicht unbedingt narrensicher, wenn es sich um ein Script oder ein fehlerhaftes Programm handelt. Alternativen dazu sind eventuell ein Chroot oder Jailkit.
 
In Version 5.9 von OpenSSH wurde auch ein Sandbox-Mechanismus eingeführt, der aber in der Praxis wohl kaum einmal zum Einsatz gekommen ist.

3. Public Keys auf Server kopieren

Wer wie unter 1. beschrieben sein Schlüsselpaar erzeugt hat, muss den Public Key erst einmal auf den Server kopieren, um sich dort einzuloggen. Das lässt sich einfach mit dem scp-Befehl bewerkstelligen, aber dann müssen Sie sich darum kümmern, dass auf dem Server der Key in die richtige Datei wandert ("~/.ssh/authorized_keys") und die Rechte stimmen. Einfacher geht es mit dem Tool "ssh-copy-id", das diese Schritte übernimmt.

4. SSH-Agent verwenden

Um bei einem passwortgesicherten Schlüsselpaar nicht immer wieder das Passwort eingeben zu müssen, können Sie den SSH-Agent verwenden. Er speichert den entschlüsselten Key im Speicher und verwendet ihn für alle weiteren Login-Prozesse. Auch der GnuPG-Agent beherrscht das SSH-Protokoll und kann diese Aufgabe übernehmen (wenn Sie ihn sowieso schon verwenden). Diverse Distributionen haben das Agent-Passwort-Management in den Desktop integriert. Dabei startet beispielsweise der SSH-Agent den Session Manager und vererbt den Zugriff über die Systemvariablen auf alle anderen ausgeführten Prozesse. Auch mit Systemd lässt sich ein SSH-Agent für einen User starten.
    
Die Verbindung zum SSH-Agent lässt sich auf auf einen anderen Rechner forwarden ("ssh -A"), sodass die lokalen Schlüssel auch auf dem Remote-Rechner zur Verfügung stehen. Allerdings bringt dies Sicherheitsrisiken mit sich, da Angreifer, die Kontrolle über den Remote-Rechner bekommen, auch Zugriff auf die geforwardeten (dort aber nicht gespeicherten) Schlüssel erlangen können.

5. Datenaustausch mit scp und sshfs

SSH eignet sich nicht nur dazu, sich remote auf einem Rechner einzuloggen, sondern auch dazu, Dateien über einen sicheren Kanal zu kopieren. Dazu bietet das Paket das Secure-Copy-Programm scp. Ähnlich wie mit NFS lassen sich auch ganze Verzeichnisse lokal mounten, wenn man sshfs verwendet, das auf das FUSE-Modul von Linux zurückgreifte (Filesystem in Userspace). Auch für den Mac und Windows gibt es sshfs-Implementierungen.

6. Host-Einträge

In der Datei "~/.ssh/config" können Sie für jeden Host eine eigene Konfiguration eintragen und somit beispielsweise Tipparbeit sparen. So legt der folgende Eintrag fest, dass der Alias "www" zu "www.admin-magazin.de" expandiert wird.

Host www
    hostname www.admin-magazin.de
    user webmaster
    port 22

Außerdem verwendet ssh den Usernamen "webmaster" statt wie sonst per Default den lokalen Usernamen. Sie können dort auch bestimmte Algorithmen und Schlüsseltypen festlegen, wenn etwa der Remote-Rechner alte Software verwendet und nicht alle modernen Implementationen unterstützt:

Host altekiste.insecure.org
    KexAlgorithms +diffie-hellman-group1-sha1
    PubkeyAcceptedKeyTypes=+ssh-dss

7. Mehr Sicherheit mit Zwei-Faktor-Authentifizierung (F2A)

Noch besser sichern Sie die SSH-Logins ab, wenn Sie zusätzlich zum Schlüssel einen zweiten "Faktor" verwenden. Dies kann beispielsweise ein TOTP-Token sein, das Sie mit dem Smartphone erzeugen. Hier hat sich der Google Authenticator bewährt, dessen Einsatz im Zusammenspiel mit SSH wir hier näher beschreiben. Wer Google nicht traut, kann stattdessen auf FreeOTP zurückgreifen, das die gleiche Funktionalität bietet. Alternativ können Sie auch ein Hardware Security Module verwenden wie etwa den Yubikey.

8. Schneller einloggen mit Multiplexing

Relativ viel Zeit wird bei jedem Einloggen für Handshake und Schlüsselaustausch aufgewendet. Diesen Overhead können Sie reduzieren, indem Sie SSH im Multiplexing-Mode verwenden. Mehr dazu finden Sie in unserem ADMIN-Tipp "Mit SSH Multiplexing schneller einloggen". Die Multiplexing-Funktion erlaubt es außerdem, SSH-Aufruf in Scripts zu verwenden und dabei die Kontrolle über die Prozesse zu behalten.

9. SSH-Tunneling

SSH kann nicht nur dazu verwendet werden, sich mit einem einzelnen anderen Rechner zu verbinden, sondern es kann auch TCP-Verbindungen weiterleiten. Zum einen lassen sich lokale Ports auf einen Remote-Rechner forwarden (remote port forwarding), zum Beispiel um einen Rechner hinter einer Firewall "von außen" zugänglich zu machen (offensichtlich ist das ein Sicherheitsrisiko und sollte also immer mit Vernunft gemacht werden):

ssh -N -R 2222:localhost:22 remote.server.de

Damit steht der lokale SSH-Login-Port auf dem Rechner remote.server.de unter Port 2222 zur Verfügung. Per Default ist er dabei nur an die Localhost-Adresse gebunden, was zumindest etwas mehr Sicherheit verschafft (auch dies lässt sich aber per Konfiguration ändern).

Local Port Forwarding holt umgekehrt einen Port von einem anderen Rechner auf den den lokalen Rechner. So lässt sich beispielsweise MySQL-Replikation über SSH einrichten, auch wenn der entfernte MySQL-Server seinen Port nicht nach außen zugänglich macht. Der entsprechende Aufruf lautet so:

ssh -L 33061:localhost:3306 remote.server.de

Nun erreichen Sie den entfernten MySQL-Server auf dem lokalen Port 33061.

Weitere Möglichkeiten, über mehrere Hosts Verbindungen herzustellen, sind dynamisches Port-Forwarding mit SOCKS und das Überbrücken von Hosts mit Jump Hosts (ab OpenSSH 7.3 per Konfigurationsanweisung ProxyJump).

10. Verbindungen mit AutoSSH stabiler gestalten

Damit SSH-Verbindungen auch bei Untätigkeit aufrecht erhalten werden, können Sie mit einigen Parameter experimentieren, die das Programm bietet, etwa dem ServerAliveInterval oder ServerAliveCountMax. Zuverlässiger funktioniert aber das Hilfsprogramm AutoSSH, das sie genauso verwenden wie SSH (jedenfalls mit den Basis-Optionen für normale Logins oder Tunnel) und das die Verbindung bei Bedarf neu aufbaut. Wie das im Detail funktioniert, verrät unser Artikel "Billig-VPN mit AutoSSH".

comments powered by Disqus

Artikel der Woche

Rechneranalyse mit Microsoft-Sysinternals-Tools

Der Rechner verhält sich eigenartig oder Sie haben eine unbekannte Applikation im Task Manager entdeckt und möchten erfahren, worum es sich dabei genau handelt und ob sie möglicherweise gefährlich ist? In so einem Fall helfen die Sysinternals-Tools von Microsoft. Dieser Beitrag stellt die drei Werkzeuge Autoruns, Process Explorer und TCPView vor. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2018