| Home Profil Fun |
#31 Linux 03.06.2007
SSH-Login mit Public-Key-Authentifizierung ersetzenDie SSH Public-Key-Authentifizierung ist sicherer und bequemer als das normale Verfahren mit Benutzername und Passwort. Dieser Artikel erklärt wie man Public-Key-Authentifizierung einrichtet und das Einloggen mit Zugangsdaten abschaltet. Prinzipiell wird ein Schlüsselpaar bestehend aus einem öffentlichen Schlüssel auf dem Server und einem geschützten privaten Schlüssel auf dem Client verwendet. Statt sich über Zugangsdaten zu authentifizieren erfolgt die Authentifizierung über den privaten Schlüssel. Im ersten Schritt wird das Schlüsselpaar erzeugt. Dafür ist ein Passwort für den privaten Schlüssel anzugeben, um fremden Zugriff auf den privaten Schlüssel zu verhindern. Das folgende Kommando erzeugt ein Schlüsselpaar (wwwkey_rsa, wwwkey_rsa.pub) in .ssh im Homeverzeichnis des Benutzers. ssh-keygen -t rsa -f ~/.ssh/wwwkey_rsa Der Public-Key muss nun auf sichere Art und Weise auf den Server kopiert werden, z.B. mit scp. scp wwwkey_rsa.pub user1@servername:/home/user1 Als nächstes ist ein wenig Konfiguration auf dem Server notwendig. Zuerst kopieren wir den Inhalt des Public-Keys in die Datei /home/user1/.ssh/authorized_keys. Falls .ssh/ oder authorized_keys noch nicht existiert erstellen wir es einfach. cd /home/user1 mkdir .ssh touch .ssh/authorized_keys cat ./wwwkey_rsa.pub > .ssh/authorized_keys rm ./wwwkey_rsa.pub SSH muss nun so konfiguriert werden, dass es die Public-Key-Authentifizierung akzeptiert und Logins mit Zugangsdaten ablehnt. vi /etc/ssh/sshd_configDie folgenden Zeilen sollten in der Datei vorhanden sein: PermitRootLogin no RSAAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no PermitEmptyPasswords no UsePAM no Als nächstes starten wir den SSH Daemon neu um die Einstellungen zu aktivieren. /etc/init.d/sshd restart Um sicherzustellen, dass alles wie erwartet funktioniert, testen wir zuerst den normalen Login. Dieser sollte abgewiesen werden. ssh user1@servername Permission denied (publickey,keyboard-interactive). Ok, also einloggen mit Benutzernamem und Passwort ist nicht mehr möglich. Jetzt schauen wir ob denn das gewünschte Verfahren funktioniert. Mit der Option -i wird die Datei angegeben, die den privaten Schlüssel enthält. ssh -i .ssh/wwwkey_rsa user1@servernameDas Kennwort des privaten Schlüssels wird abgefragt. Sobald man es eingegeben hat findet man sich in einer SSH session auf dem Server wieder. Man kann sich das ganze etwas bequemer einrichten, um nicht jedesmal das Kennwort des privaten Schlüssels eingeben zu müssen. Dies geschieht mit Hilfe des Programms ssh-agent. eval `ssh-agent`Der ssh-agent muss mit eval gestartet werden. Hintergrund ist, dass ssh-agent allein die notwendigen Umgebungsvariablen und Werte nur ausgibt aber nicht setzt. Mit eval werden sie exportiert und stehen zur Verfügung. Sodann muss der private Schlüssel dem ssh-agent hinzugefügt werden. Das Passwort wird hier ein letztes Mal gebraucht. ssh-add .ssh/wwwkey_rsa Ab diesem Moment kann man sich auf den Server einloggen ohne weitere Daten eingeben zu müssen. ssh user1@servername Der private Schlüssel wird nur für die aktuelle Konsolensitzung auf dem Client gespeichert. Öffnet man eine zweite Konsole muss der ssh-agent wieder gestartet werden und der private Schlüssel wieder hinzugefügt werden. Man kann jedoch den ssh-agent automatisch mit jeder Sitzung starten lassen. Hierzu fügt man die folgende Zeile einfach in die Datei ~/.bash_profile ein. eval `ssh-agent` |