SSH Login mit RSA Keys ohne Passwort Eingabe
Mit RSA Keys ist es möglich, sich ohne die Eingabe eines Passworts an einem SSH Server anzumelden. Dies erleichtert nicht nur den Login an den Server, sondern auch die Verwaltung, da das merken von Passwörten entfällt.
Die Verwendung von RSA-Keys in Verbindung mit einem Verbot für direkte Root-Logins sowie Logins via Passwort führt zu einer imensen Steigerung der Sicherheit. Da zum Beispiel Bruteforce Angriffe auf einen SSH Server sehr erschwert werden.
Beispiel eines Logins
Hier mal ein Beispiel Aufruf einer SSH Verbindung mit RSA Keys.
| 1 | ssh -p <port_nummer> sim4000@xxx.xxx.xxx.xxx -i .ssh/rsa_key_server |
Es handelt es sich eigentlich um einen ganz normalen SSH Aufruf. Der einzige Unterschied, ist die Option "-i", welche die Key File angibt.
Die Optionen im Überblick
| Option | Erklärung |
|---|---|
| -p | Gibt die Portnummer an, auf die der Server lauscht |
| benutzer@xxx.xxx.xxx.xxx | Eine Kombination aus User und IP/Host |
| -i | Gibt die Key File an |
SSH Server Konfiguration
Damit der SSH Server überhaupt Keys annimmt, müssen einige Einstellungen in der Config File vorgenommen werden. Auf meinem Server befindet sich diese File unter /etc/ssh/sshd_config. Dies kann sich aber von Distri zu Distri unterscheiden.
Die folgende Config richtet den Server so ein, das nur Logins als "normaler" Benutzer (nicht root) und ohne Passwort angenommen werden. Also nur mit Key File.
| 1 2 3 4 5 | Port <nummer> # Legt die Portnummer fest PermitRootLogin no # Verhindert Login mit root RSAAuthentication yes # Erlaubt RSA Authentication PubkeyAuthentication yes # Erlaubt PublicKey Authentication PasswordAuthentication no # Verhindert Login mit Password |
Im oberen Code Block sind die Einstellungen zu sehen, die ich verändert habe. Es können/müssen durchaus noch mehr Optionen in der Config vorhanden sein.
Portnummer ändern
Um einem Angreifer den Login ein wenig zu erschweren, kann man den Standard Port 22 auf einen anderen ändern. Dabei sollte beachtet werden nur Ports zwischen 49152 und 65535 zu nutzen, da die übrigen Ports für andere Dienste reserviert sind.
Das ändern des Ports ist kein Ersatz für RSA Keys oder sichere Passwörter! Der Port lässt dich immer noch leicht durch Scanner wie nmap herausfinden.
Root Login verbieten
Pflicht ist es, den Root Login zu verbieten. Wenn man dies tut, muss ein Angreifer nicht nur das Passwort herraus bekommen, sondern auch den Benutzernamen. Das erschwert ein Einbrechen wieder etwas mehr.
Key Authentication erlauben
Mit den nächsten beiden Optionen erlaubt man das Authentifizieren mit einer Key File. Das sind also die Haupt-Optionen für diese Anleitung.
Login mit Passwort verbieten
Nun muss man mit der letzten Option noch den Login via Passwort verbieten. Dies ist Optional, wenn man wirklich alles mit Key Files machen möchte. Ist allerdings auch ein Sicherheitsaspekt, den man gut Überlegen sollte.
Nach dem ändern der Config File nicht vergessen den SSH Server neu zu starten.
Tipp: Am besten immer ein root Terminal offen lassen, bis der Login mit RSA Funktioniert. Sonst sperrt man sich eventuell aus, was vor allem bei root Servern ärgerlich sein kann.
RSA Keys erstellen
Nun muss noch ein Key Paar erstellt werden. Nach dem ausführen des Befehls, bekommt man zwei Files. Eine mit der Endung ".pub", welche auf den Server geladen werden muss. Die ohne diese Endung bleibt auf dem Client System mit welchem man sich am Server anmelden möchte.
Das Schlüsselpaar muss mit dem Benutzer erstellt werden, mit dem man sich hinterher auch Anmelden möchte.
| 1 | ssh-keygen -t rsa |
Das erstellen des Schlüsselpaares geschiet mit dem Programm ssh-keygen, welches den Typ des Schlüsselpaares mit der Option "-t" übergeben bekommt. In unserem Fall RSA. Beim erstellen des Schlüsselpaares wird man zum einen nach einem Dateinamen gefragt, dort kann man einfach Enter drücken, und dann zuletzt noch nach einer Passphrase. Das ist ein Passwort, was man immer Beim nutzen des Keys eingeben muss. Damit kann man die Sicherheit noch einmal Steigern.
Nun muss man noch die *.pub-File auf den Server bekommen, bzw die File ohne das *.pub auf den Client Rechner. Falls es sich bei dem Client um einen Linux Rechner handelt, kann man dies einfach über scp erledigen. Bei Windows Maschinen halt über FTP oder ähnliches.
Key in authorized_keys File kopieren
| 1 | cat id_rsa.pub >> ~/.ssh/authorized_keys |
Damit der Key nun auch auf dem Server bekannt ist, muss er in die Datei ~/.ssh/authorized_keys kopiert werden. Die File muss sich dabei im .ssh Ordner des Benutzers befinden, mit dem man sich Anmelden will. Danach kann man die *.pub File mit "rm" löschen.
Verbindung herstellen
| 1 2 | <sim4000> (~) ssh -p <port_nummer> <username>@<ip> -i .ssh/<key_file> Last login: Sat Dec 13 06:56:19 2008 from <hostname> |
Nun sollte ein Login mit der Key File möglich sein. Versuche Dich mal wie oben beschrieben an dem SSH Server anzumelden. Falls es nicht möglich ist, und eine Meldung wie "Permission denied (publickey)" erscheint, ist entweder beim Erstellen des Keys oder beim Kopieren in die authorized_keys-File schief gelaufen.
Weitere mögliche Fehler
- SSH Server nach verändern der Einstellungen nicht neu gestartet?
- Wurde der Key mit dem Benutzer erstellt, in dessen Homeverzeichnis der Key jetzt auch liegt?
- Ist der Schlüssel auf dem Server auch wirklich in der authorizes_keys File unter $HOME/.ssh/ ?
- Public Key und Private Key vielleicht vertauscht? (*.pub-File) muss auf dem Server in die authorizes_keys File)
Schlusswort
RSA Keys sind eine schöne Möglichkeit, um einen SSH Server abzusichern, ohne sich Kilometer lange Passwörter merken zu müssen. Nur darf man unter keinen Umständen die Key Files versehendlich löschen oder gar verlieren.
Wenn die Keys in falsche Hände geraten, kann man auch gleich root Login ohne Passwort erlauben. Falls man die Key Files versehendlich löschen sollte, hat man sich ausgesperrt. Was vor allem bei Root Servern äußerst ärgerlich sein kann.


