Letzte Änderung: 08. Juli 2021
Openssh Logo


OpenSSH ist die Implementierung des SSH-Protokolls.
OpenSSH wird für die Fernanmeldung, die Durchführung von Backups, die Fernübertragung von Dateien über scp oder sftp und vieles mehr empfohlen.
SSH ist perfekt geeignet, um die Vertraulichkeit und Integrität von Daten zu wahren, die zwischen zwei Netzwerken und Systemen ausgetauscht werden.
Der Hauptvorteil ist jedoch die Server-Authentifizierung durch den Einsatz von Public-Key-Kryptografie.
Diese Seite zeigt, wie Sie Ihren OpenSSH-Server, der auf einem Linux- oder Unix-ähnlichen System läuft, absichern können, um die SSH-Sicherheit zu verbessern.


SSH Keys erstellen


DSA- und RSA-Schlüssel mit 1024 Bit oder weniger gelten als schwach. Bitte nicht mehr verwenden!
DSA Schlüssel werden nicht mehr empfohlen, da diese auf eine Schlüssellänge von 1024 bit begrenzt ist. Bitte nicht mehr verwenden!

RSA-Schlüssel werden vorgezogen, wenn Abwärtskompatibilität mit SSH-Clients ein Thema ist. Ich nehme hier im Tutorial 8192 Bit starke Schlüssel um mehr Sicherheit zu haben.

Wenn Abwärtskompatibilität kein Thema ist, sind ED25519 Schlüssel die erste Wahl.

Wir entscheiden uns also zwischen RSA ≥4096 Bit oder ED25519 Schlüssel.

ED25519 Schlüssel erstellen: $ ssh-keygen -o -a 100 -t ed25519 RSA 8192 Bit Schlüssel erstellen: $ ssh-keygen -t rsa -b 8192

Brauche ich ein Passwort für meinen Private-Key? Für mich ein klares JA. Eine weitere Barriere, um an meinen privaten Schlüssel zu kommen, ist immer gut.

Das öffentliche und das private Schlüsselpaar werden nun erzeugt und in /root/.ssh/ gespeichert.

id_ed25519 ist der private Schlüssel, der von Client-Anwendungen zur Verbindung mit dem SSH-Server verwendet wird. Wenn die Datei jemals gestohlen oder kompromittiert wird, sollte ein neues Schlüsselpaar erzeugt und dem Server und auf dem Client ersetzt werden.

id_ed25519.pub ist der öffentliche Schlüssel, den der SSH-Server zur Authentifizierung der Client-Schlüssel verwendet.


Public-Key auf den Clientcomputer kopieren


Das passiert vom SSH Server zum Clientcomputer

$ ssh-copy-id benutzername@deinedomain.ch

Wenn der Clientcomputer ein Windows Rechner ist und wir Putty oder Kitty nutzen müssen wir den Key in Putty/Kitty importieren.

Auf dem Server: $ cd /root/.ssh/ $ cat id_ed25519 -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW QyNTUxOQAAACDD3ZuZSoppPaV+gSf2g20s2+ctf9gUpuJbd2rXxTmMuAAAAJDECqXExAql xAAAAAtzc2gtZWQyNTUxOQAAACDD3ZuZSoppPaV+gSf2g20s2+ctf9gUpuJbd2rXxTmMuA AAAEDeSzrgLFkenCnS0ny8Az2ZrHLUTvvCc3dQ77NV7hgrSMPdm5lKimk9pX6BJ/aDbSzb 5y1/2BSm4lt3atfFOYy4AAAADXJvb3RAaG9zdG5hbWU= -----END OPENSSH PRIVATE KEY----- Puttygen Load Puttygen Save private key

Wir kopieren den kompletten Key incl. BEGIN OPENSSH PRIVATE KEY und END OPENSSH PRIVATE KEY in einen Texteditor und speichern das ganze als File ab.
Dann starten wir puttygen.exe und klicken im oberen Menü auf "File -> Load private key" und wählen unser Textfile aus.
Nun kommt die Meldung das der Key "Successfully imported foreign key" erfolgreich importiert wurde.
Jetzt noch auf "Save private key" klicken und wir haben den Schlüssel für Putty/Kitty ins richtige Format gebracht.

In Putty/Kitty kann man nun den Key einfügen: Connection ➔ SSH ➔ Auth ➔ Private key file for authentication.


SSH absichern


Normalerweise sollte die Konfigdatei unter /etc/ssh/sshd_config zu finden sein.

Mit sshd -t testen wir die Konfiguration auf Fehler. Dann können wir nach jeder Änderung an der sshd_config den SSH Dienst reloaden.

root login verbieten

$ vim sshd_config PermitRootLogin no

SSH von Port 22 weglegen (bringt keine Sicherheit, aber die Logfiles werden weniger von den Scriptkiddies vollgemüllt!)

$ vim sshd_config Port 2222

Passwortlogin verbieten (Login nur noch über Schlüssel möglich). Sehr zu empfehlen!!! Bitte natürlich vorher Schlüssel einrichten und testen ob das ganze funktioniert, sonst sperrt Ihr euch aus!

$ vim sshd_config PasswordAuthentication no AuthenticationMethods publickey PubkeyAuthentication yes

Nur einem oder ein paar Usern den Zugang erlauben

$ vim sshd_config AllowUsers bolek lolek

Leere Passwörter verbieten

$ vim sshd_config PermitEmptyPasswords no

Brute Force Attacken abwehren

Dazu nutzen wir zusätzliche Software wie z.B.: Fail2ban oder SSHGuard. Ich habe diese beiden Dienste ausgesucht, weil beide mit den Protokollen IPv4 und IPv6 können. Meine Wahl fiel auf SSHGuard, wegen der einfacheren Einrichtung.

Login Timeout einrichten

$ vim sshd_config LoginGraceTime 60

Connection Timeout einrichten

$ vim sshd_config ClientAliveInterval 300 ClientAliveCountMax 0

Rhosts login verbieten

$ vim sshd_config IgnoreRhosts yes RhostsAuthentication no RhostsRSAAuthentication no

Host basierende Authentification verbieten

$ vim sshd_config HostbasedAuthentication no

Weiterleitungen verbieten

$ vim sshd_config X11Forwarding no AllowTcpForwarding no

Loginversuche limitieren

$ vim sshd_config MaxAuthTries 5

Maximale gleichzeitige Logins

$ vim sshd_config MaxStartups 3

Banner setzen

$ vim sshd_config Banner /etc/issue.net $ vim /etc/issue.net Warning! Authorized use only. This server is the property of MyCompanyName.com

Selbstverständlich kann man noch mehr machen wie z.B. mit einer Firewall nur bestimmte IPs durchlassen oder SSH nur mit Port Knocking öffnen oder Chroot der User etc. aber das würde den Rahmen des Tutorials sprengen.

Und wenn man SSH gar nicht braucht, z.B. auf einem Workstation Laptop, kann man SSH auch einfach deinstallieren und damit ganz abschalten :-)

nach oben