Secure Shell (SSH) Public Key Authentication (PKA)

Der direkte Zugriff aus dem Internet per SSH ist nur mehr in Ausnahmefällen auf Antrag mit Zustimmung der OE-Leitung möglich (dann sollte aber unbedingt eine 2FA-Lösung verwendet werden), für den Zugriff aus dem VPN-Netz reicht ein Freischaltungsantrag durch die EDV-Beauftragten.

Wir raten dringend dazu nur per VPN und mit SSH-PKA zu arbeiten:

  • VPN verhindert, dass der SSH-Server aus dem Internet direkt angegriffen werden kann,
  • die VPN-Lösung ist gegen Phishing mit einem 2. Faktor abgesichert und
  • Public Key Authentication (PKA) verringert die Gefahr, dass der Server aus dem Netz der TU Graz angegriffen werden kann, da eine Anmeldung nur mit dem (passwortgeschützten) public Key möglich ist.

Public Key Authentication (PKA)

Die PKA (oft auch nur SSH-Key genannt) erfordert, dass ein Schlüsselpaar erstellt wird. Der (mit einem Passwort geschützte) private Schlüssel (private key) verbleibt dabei auf den Geräten des Users (SSH-Client), der öffentliche Schlüssel (public key) wird am SSH-Server abgelegt.
Um sich am Server anmelden zu können, braucht man dann den privaten Schlüssel und das zugehörige Kennwort (die Passphrase), mit dem er verschlüsselt wurde.

SSH-Client

  1. Öffnen Sie auf Ihrem SSH-Client (dem Rechner, mit dem Sie sich am SSH-Server anmelden wollen) ein Terminal-Fenster (Windows z. B. Powershell).
  2. Geben Sie folgenden Befehl ein, um einen RSA-Krypto-Schlüssel der Länge 4096 Bit zu erstellen:
    ssh-keygen -t rsa -b 4096
    Sollte das unter Linux nicht funktionieren, müssen Sie erst OpenSSH installieren.
  3. Geben Sie - wenn Sie wollen - einen Dateinamen ein, sonst wird der Defaultname im Directory .ssh im Homeverzeichnis verwendet.
  4. Geben Sie eine „Passphrase“ ein (das Kennwort, mit dem Ihr privater Schlüssel geschützt wird).
    Sie können hier auch nichts eingeben (z. B. für Machine-to-Machine-Kommunikation), das sollten Sie aber nur machen, wenn Sie wissen, was Sie tun. Geben Sie zur Bestätigung die Passphrase ein 2. Mal ein.
  5. Sie haben nun im Directory .ssh in Ihrem Homeverzeichnis (ausser Sie haben oben optional ein anderes Directory angegeben) 2 Files:
    • id_rsa = Ihr privater Schlüssel
    • id_rsa.pub = Ihr öffentlicher Schlüssel
  6. Sie müssen nun den öffentlichen Schlüssel vom SSH-Client zum SSH-Server übertragen, dazu gibt es mehrere Möglichkeiten:
    1. Händische Übertragung:
      Melden Sie sich am SSH-Server server.tugraz.at mit Benutzername und Kennwort an:
      ssh username@server.tugraz.at
      Wechseln Sie am Server ins Directory .ssh und tragen Sie den Inhalt Ihres öffentlichen Schlüssels z. B. mit Copy&Paste in die Datei authorized_keys ein.
    2. Durch Aufruf von
      ssh-copy-id username@server.tugraz.at
      bzw.
      ssh-copy-id -i /pfad/name.pub username@server.tugraz.at
      (falls Sie oben einen anderen Pfad verwendet haben) wird der öffentliche Schlüssel ebenfalls in die Datei authorized_keys am SSH-Server eingetragen.
  7. Testen Sie nun in einem weiteren Fenster, ob die Anmeldung mit dem Schlüssel funktioniert:
    ssh username@server.tugraz.at
    bzw.
    ssh -i /pfad/name.pub username@server.tugraz.at
    Sie sollten nicht mehr nach dem Kennwort am Server gefragt werden, sondern nach der Passphrase, die Sie verwendet haben, um Ihren privaten Schlüssel zu schützen.
    Sollte es Probleme geben, überprüfen Sie die Zugriffsrechte: Sowohl am SSH-Server als auch am SSH-Client sollte das Directory .ssh (bzw. /pfad/) die Rechte 700 (rwx------) haben und die Files die Rechte 600 (rw-------).
Wenn Sie den privaten Schlüssel auf andere Rechner übertragen, dann können Sie sich dann auch von diesen SSH-Clients aus anmelden, ohne das Ganze wieder durchführen zu müssen.

SSH-Server

Der SSH-Server sollte so konfiguriert sein, dass er nur noch die Anmeldung mit PKA akzeptiert:
  1. Wenn Sie die entsprechenden Rechte haben, wechseln Sie ins Directory /etc/ssh/.
  2. Öffnen Sie dort die Datei sshd_config.
  3. Suchen Sie nach den folgenden Zeilen:
    PasswordAuthentication
    ChallengeResponseAuthentication
    usePAM
  4. Falls diese auskommentiert sind (#), entfernen Sie die Kommentar-Zeichen #.
    Falls es keine solche Zeilen gibt, fügen Sie sie ein.
  5. Setzen Sie die Werte auf no.
    Die Zeilen sollte nun folgendermaßen aussehen:
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    usePAM no
  6. Starten Sie den SSH-Daemon neu, in vielen Distributionen z. B. durch systemctl restart ssh