putty-ssh4

SSH-Zugriff mit PuTTY – sicher ohne Passwort

Veröffentlicht von

Wer seine linuxbasierten Hosts und (Root-)Server über das Internet per SSH administriert, sollte sich neben der generellen Härtung eines Hosts unbedingt um die Absicherung seines SSH-Zugangs kümmern. Offene Ports stehen im wahrsten Sinne des Wortes unter Dauerfeuer. Ein schwaches oder gestohlenes Passwort kann die Kompromittierung des gesamten Hosts zur Folge haben.

SSH-Login mit Passwort

Ein Blick in die Datei /var/log/auth.log zeigt nahezu minütlich fehlgeschlagene Loginversuche per SSH, wenn der Port direkt über das Internet erreichbar ist. Ähnlich verhält es sich auch mit den Ports anderer Dienste wie FTP oder SMTP, sofern diese aktiv sind.

putty-ssh1
Loginversuche in /var/log/auth.log

Es ist also offensichtlich eine gute Idee, den SSH-Login per Passwort sehr gut abzusichern. Doch wie ist dies am besten zu bewerkstelligen?

SSH – sicherer mit Schlüsselpaar

In der Standardkonfiguration von Debian ist eine SSH-Authentifizierung von root per Passwort mittlerweile oft deaktiviert und müsste manuell in der Datei /etc/ssh/sshd_config wieder aktiviert werden. Alle anderen Benutzer könnten sich aber noch mittels Passwort legitimieren.

Komfortabler und vor allem sicherer ist eine Anmeldung mittels Schlüsselpaar. Der SSH-Server verfügt dabei über öffentliche Schlüssel der entsprechenden Schlüsselpaare, während der sich verbindende Benutzer bzw. Client den zugehörigen privaten Schlüssel zur Authentifizierung nutzt. Diese Schlüssel verbleiben auf den beteiligten Systemen und ermöglichen damit die Anmeldung eines Benutzers ohne die Eingabe des Passworts.

Schlüsselpaar generieren

Im folgenden gehe ich von einem Debian 8 Jessie-Host mit SSH-Server aus. Ein Windows-Client baut die Verbindung mit PuTTY über SSH auf.

Die Schlüssel (standardmäßig RSA mit 2048 Bit) werden auf dem Debian-Host wie folgt erzeugt, hier für den root-User. Im klassischen Benutzerkontext erfolgt dies analog, wobei die benutzten Verzeichnisse im home-Verzeichnis des Benutzers liegen.

  1. SSH-Keygen mit Schlüsseltyp rsa und 4096 Bit-Verschlüsselung ausführen:
    ssh-keygen -t rsa -b 4096
  2. Speicherort der Schlüssel definieren und/oder bestätigen
    Enter file in which to save the key (/root/.ssh/id_rsa):
  3. Wenn möglich, Passphrase für den privaten Schlüssel definieren. Diese wird vor dem Verbindungsaufbau zusätzlich abgefragt.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
putty-ssh2
Erzeugung eines SSH-Schlüsselpaars

Öffentlicher Schlüssel auf SSH-Server

Der erzeugte öffentliche Schlüssel id_rsa.pub wird auf dem SSH-Server in die Datei authorized_keys eingetragen, damit der zugehörige Benutzer sich zukünftig mit dem passenden privaten Schlüssel authentifizieren kann.

Außerdem müssen die Berechtigungen für das Verzeichnis .ssh und für die Datei authorized_keys korrekt sein.

cat .ssh/id_rsa.pub > .ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Das Verzeichnis .ssh muss dem Benutzer gehören, der sich am SSH-Server mit dem privaten Schlüssel anmelden möchte.

chown -R root:root ~/.ssh

Privater Schlüssel in Sicherheit

Mit dem privaten Schlüssel ist man nun in der Lage sich am SSH-Server anzumelden. Bei nicht vergebener Passphrase sogar vollständig ohne weiteres Passwort. Daher sollte dieser Schlüssel absolut sicher verwahrt und vom SSH-Server gelöscht werden. Prinzipiell reicht es aus, den Inhalt der Schlüsseldatei id_rsa zu kopieren und in eine entsprechende Textdatei auf dem Windows-Client wieder einzufügen.

SSH-Verbindung mit PuTTY

Zum Herstellen der Verbindung mit dem SSH-Server kommt auf dem Windows-Client die freie Software PuTTY zum Einsatz. Jedoch kann der zuvor erzeugte private Schlüssel nicht ohne weiteres genutzt werden, weil der OpenSSH-Schlüssel zunächst in einen PuTTY Private Key (.ppk) konvertiert werden muss. Passiert dies nicht und der Schlüssel wird trotzdem in PuTTY hinterlegt, lehnt der Server die Verbindung mit einem Server refused our key ab.

Schlüsselkonvertierung

Für die Konvertierung des Schlüssels in ein PuTTY-konformes Format stellen die PuTTY-Entwickler ebenfalls ein kostenloses Tool zur Verfügung. Mit zwei simplen Mausklicks kann der private Schlüssel in das .ppk-Format umgewandelt und auf dem Windows-Client gespeichert werden.

putty-ssh3
Konvertierung des OpenSSH-Schlüssels in das .ppk-Format

Schlüsselverwaltung

Wenn die Schlüssel an einem sicheren Ort auf dem Client liegen, muss PuTTY noch mitgeteilt werden, wo sich die Schlüssel für eine bestimmte SSH-Verbindung befinden. Dies kann auf zwei verschiedene Weisen erfolgen.

Möglichkeit 1 – SSH-Schlüssel im Verbindungsprofil hinterlegen: Die Parameter einer SSH-Verbindung können in PuTTY mit einem Namen versehen und gespeichert werden.

putty-ssh5
Speichern einer SSH-Verbindung in PuTTY

In der Kategorie „Auth“ wird der private Schlüssel für einen Benutzer, der diese Verbindung verwendet, angegeben. Für jeden anderen Benutzer, der sich an diesem SSH-Server anmeldet, muss dann ein weiteres Profil in PuTTY angelegt werden.

putty-ssh6
Privater SSH-Schlüssel im PuTTY-Verbindungsprofil

Möglichkeit 2 – SSH-Schlüsselverwaltung mit PuTTY Pageant: Als Alternative zum Hinterlegen des SSH-Schlüssels im jeweiligen Verbindungsprofil bietet sich die PuTTY-Erweiterung pageant.exe an. Man startet das Tool einfach parallel zu PuTTY, fügt alle vorhandenen privaten Schlüssel am Client hinzu. Wurde bei Erstellung des Schlüsselpaares eine Passphrase angegeben, wird sie an dieser Stelle abgefragt.

putty-ssh7
SSH-Schlüsselverwaltung mit PuTTY pageant

Bei Verbindungsaufbau und Authentifizierung des Benutzers wird der zum Benutzer und SSH-Server passende Schlüssel automatisch verwendet.

putty-ssh8
SSH-Authentifizierung für root

SSH-Passwortauthentifizierung

Da nun die Authentifizierung mittels RSA-Schlüssel aktiviert und konfiguriert ist, kann und sollte, wie eingangs beschrieben, die Anmeldung mit Passwort komplett deaktiviert werden. Dazu muss die Konfiguration des SSH-Servers in der Datei /etc/ssh/sshd_config geändert werden. Der Wert PasswordAuthentication wird von yes auf no geändert.

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
service ssh restart

Anschließend ist eine Anmeldung am SSH-Server nur noch mit privatem RSA-Schlüssel möglich. Nach wie vor kann man sich lokal am Host trotzdem per User und Passwort authentifizieren, sollte der private Schlüssel verloren gehen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.