Fachbereich Mathematik und Informatik, IT-Dienst

Remote-Login per SSH (Secure Shell)

IT-Dienst::ServicesSSHAccess - Zusammenfassung

IT-Dienst::ServicesSSHAccess - SSH-Logins per Public-/Private-Key ermöglichen

SSH unterstützt neben der klassischen Authentifizierung mittels Benutzername und Kennwort auch andere Authentifizierungsverfahren. Wir beschreiben hier die Einrichtung und Verwendung der Authentifizierung, die auf einem Schlüsselpaar basiert (sog. "Public-Key-Verfahren") basiert. Um diesen passwortlosen Login per SSH (Authentisierung mittels Public-/Private-Key-Verfahren statt mit Passwort) nutzen zu können, sind vorab einmalig die folgenden Schritte erforderlich, die nachstehend im Detail beschrieben werden. (Wir gehen dabei davon aus, dass NutzerInnen vom SSH mit der Nutzung der Kommandozeile unter Unix/Linux einigermaßen vertraut sind. - Wer das nicht ist, wird wohl auch nicht SSH benutzen. wink

  1. Public-/Private-Schlüsselpaar erzeugen
  2. Public-Key im (Netzwerk-)HOME bzw. auf dem Server als "authorized key" hinterlegen

1. Public-/Private-Schlüsselpaar erzeugen

Zunächst muss ein Public-/Private-Schlüsselpaar für die Nutzung mit SSH erzeugt werden. Dies geschieht durch den Aufruf des Kommandos
ssh-keygen -b 4096

Mit diesem Aufruf wird ein 4096 Bit langes Schlüsselpaar (Public-Key und Private-Key) erzeugt. SSH-Schlüssel sollten (Stand 04/2017) nicht länger als 4096 Bit gewählt werden, da manche SSH-Server keine längeren Schlüssel unterstützen. Der Output des Aufrufes sieht dann etwas so aus (Username im Beispiel: 'camphaus'):
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mi/camphaus/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/mi/camphaus/.ssh/id_rsa.
Your public key has been saved in /home/mi/camphaus/.ssh/id_rsa.pub.
..

Im Verlauf der Erzeugung wird man zuerst gefragt, wo der Schlüssel gespeichert werden soll (durch Betätigen von RETURN übernimmt man den vorgeschlagenen Pfad). Anschließend muss man eine sog. passphrase festlegen und zur Kontrolle noch ein zweites Mal eingeben. Das ist ein (möglichst langes/kompliziertes/nicht zu erratendes) Passwort, mit dem der Private-Key verschlüsselt und so vor unbefugter Verwendung durch Dritte geschützt wird. Diesen "Pass-Satz" muss man eingeben, wenn man auf den SSH-Private-Key zugreifen will, um sich z.B. per SSH einzuloggen. (Es sei denn, man nutzt ssh-agent, siehe weiter unten.)

Der Public-Key landet in unserem Beispiel, wenn man den Pfad nicht individuell ändert, in der Datei ~/.ssh/id_rsa.pub, der Private-Key in der Datei ~/.ssh/id_rsa

ALERT! Wichtig: Aus Sicherheitsgründen sind Private-Keys grundsätzlich mit einer Passphrase (einem langen Passwort/einem Passwort-"Satz", engl. phrase) zu verschlüsseln! Dadurch liegt der private Schlüssel nicht im Klartext vor, sondern ist selbst verschlüsselt. Das hat folgenden Vorteil: Sollte die Datei mit dem privaten Schlüssel einem Angreifer in die Hände fallen, muss der Angreifer, um sich mit dem Schlüssel auf einem Rechner einloggen zu können, noch die Passphrase des Schlüssels herausfinden. Bei einem Private-Key, der im Klartext vorliegt, könnte ein Angreifer dagegen mit diesem gestohlenen Schlüssel direkt auf andere Rechner zugreifen.

ALERT! Fallstricke:
chmod go-w ~/.ssh/authorized_keys

chmod go-rwx ~/.ssh

2. Öffentlichen Schlüssel als "authorized key" im Netzwerk-HOME hinterlegen

Damit der SSH-Login mittels des Public-Key-Verfahrens (unter Benutzung des eigenen privaten Schlüssels) möglich ist, muss der zum Schlüsselpaar gehörende öffentlichen Schlüssel im eigenen Home-Verzeichnis im Unterordner ".ssh" in der Datei "authorized_keys" hinterlegt werden:

Beispiel für den User 'camphaus', wir benutzen als Zielmaschine/Server den Login-Server 'andorra', da der weiterhin für alle Statusgruppen des Fachbereichs gut per SSH erreichbar ist und von dort die Netzwerk-Homes aller Nutzerinnen und Nutzer erreichbar sind:
ssh-copy-id -i camphaus@andorra.imp.fu-berlin.de
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
camphaus@andorra.imp.fu-berlin.de's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'andorra.imp.fu-berlin.de'"
and check to make sure that only the key(s) you wanted were added.

cat ~/.ssh/*.pub | ssh camphaus@andorra.imp.fu-berlin.de 'umask 077; cat >> ~/.ssh/authorized_keys'

IT-Dienst::ServicesSSHAccess - SSH-Login per Public-/Private-Key ausführen

Beim Aufruf eines SSH-Logins will der Server, zu dem ich mich verbinden will, den Beweis, dass ich zu dem (oder einem der) dort in meiner "authorized_keys" hinterlegten Public-Key über den korrespondierenden Private-Key verfüge. Der lokale SSH-Client verlangt daher nach der Passphrase, um den lokal gespeicherten, mit der Passphrase verschlüsselten Private-Key benutzen zu können. "Passt" der Private-Key zum auf dem Server hinterlegten "authorized_key", gestattet der Server den Zugriff.

Beispiel-Aufruf: Login als Benutzer 'camphaus' von einem privaten Rechner aus auf dem Linux-Pool-Rechner 'peking':
ssh camphaus@peking.imp.fu-berlin.de
Enter passphrase for key '/home/mi/camphaus/.ssh/id_rsa': 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Apr  5 15:22:11 2017 from 160.45.113.58
camphaus@peking:~$ 

IT-Dienst::ServicesSSHAccess - Wo kann ich Client-Software für Secure Shell bzw. Secure Copy finden?

Linux

Die Kommandos ssh (Secure Shell) sowie scp (Secure Copy als Ersatz für ftp zum Übertragen von Daten) sind in der Regel in jeder Linux-Distribution enthalten

Windows

Mit Windows kommt keine SSH-Implementierung mit. Wir empfehlen als Secure-Shell die Freeware "Putty":
https://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

macOS

Die Kommandos ssh (Secure Shell) sowie scp (Secure Copy als Ersatz für ftp zum Übertragen von Daten) können Sie unter macOS durch das Dienstprogramm Terminal.app (/Programme/Dienstprogramme/Terminal.app) nutzen, das auf jedem Mac vorhanden ist.

Umgang mit dem Schlüsselpaar für Public-Key-Authentifizierung

Kompromittierter Private-Key

Ist ein privater Schlüssel kompromittiert, d.h. möglicherweise in unbefugte Hände gelangt, muss der zugehörige öffentliche Schlüssel umgehend aus der "authorized_keys"-Datei entfernt werden. Dazu die Datei entsprechend mit einem Editor Ihrer Wahl bearbeiten. (Oder Sie verständigen den IT-Dienst.)

Vergessene Passphrase

Eine vergessene Passphrase lässt sich nicht zurücksetzen/knacken/ändern. Der Zugriff auf einen Private-Key, der mit einer vergessenen Passphrase geschützt ist, ist nicht mehr möglich. Es muss dann ein neues SSH-Schlüsselpaar erzeugt und konfiguriert werden.

Ändern der Passphrase

Ist die Passphrase zu einem SSH-Private-Key bekannt und der entsprechende Key zugänglich, lässt sich die Passphrase mittels des folgenden Aufrufes ändern:

ssh-keygen -p

Der Aufruf fragt nach der Datei, in der der Private-Key gespeichert ist, nach der alten und der stattdessen neu zu setzenden Passphrase, und ändert die Passphrase des betreffenden Schlüssels entsprechend.

IT-Dienst::ServicesSSHAccess - Weiterführende Infos

Liste/Quelle für Hostkeys von im Fachbereichsnetz bekannten SSH-Servern

Die SSH-Hostkeys der zentral betreuten Linux-Rechner, die im Fachbereichsnetz per SSH erreichbar sind, können auf jedem der zentral betreuten Linux-Rechner im Fachbereich in der Datei /etc/ssh/ssh_known_hosts eingesehen werden.

ssh-agent

Damit man die Passphrase nicht bei jedem SSH-Login erneut eingeben muss, kann man einen ssh-agent starten. Dieser Agent fragt einmalig nach seinem Start die Passphrase ab und kann dann den privaten Schlüssel freigeben, wenn auf ihn für SSH-Logins zugegriffen werden soll. Einzelheiten siehe man ssh-agent und man ssh-add .