HOWTO zur schlÃŒsselbasierten SSH-Anmeldung per Putty unter Windows

(C) 2012-2019 T.Birnthaler/H.Gottschalk <howtos(at)ostc.de>
              OSTC Open Source Training and Consulting GmbH
              www.ostc.de

$Id: putty-anmeldung-ohne-passwort-HOWTO.txt,v 1.13 2019/11/26 19:37:07 tsbirn Exp $

Dieses Dokument beschreibt die Einrichtung einer schlÃŒsselbasierten sicheren
Verbindung zwischen Putty-Client auf einem Windows-Rechner und SSH-Dienst auf
eine UNIX/Linux-Rechner.

Inhaltsverzeichnis

0) Installation
1) SchlÃŒsselpaar fÃŒr Authentifizierung erzeugen
2) Öffentlichen SchlÃŒsselteil auf Ziel-Rechner eintragen
3) Verbindung zum Ziel-Rechner aufnehmen
4) Probleme bei der Verbindungsaufnahme lösen
5) Passwortbasierte Authentifizierung abschalten
6) Weitere Informationen

0) Installation   (Toc)

Das Installationspaket "putty-0.XX-installer.exe" von der ORIGINAL-Webseite

  www.chiark.greenend.org.uk/~sgtatham/putty

holen und installieren (NICHT von einer anderen Webseite!)

1) SchlÃŒsselpaar fÃŒr Authentifizierung erzeugen   (Toc)

Das Programm "PuttyGen" aus Start --> Programme --> Putty aufrufen und ein
SchlÃŒsselpaar erzeugen: Dazu Button "Generate" drÃŒcken und die Maus solange
beliebig bewegen, bis genÃŒgend Zufall zur SchlÃŒsselgenerierung erzeugt ist.
Der grÃŒne Balken signalisiert den Fortschritt bei der SchlÃŒsselgenerierung
(lÀuft 2x durch).

2) Öffentlichen SchlÃŒsselteil auf Ziel-Rechner eintragen   (Toc)

Den im Textfeld oben von "PuttyGen" angezeigten (langen) öffentlichen SchlÌssel
(public key) "ssh-rsa AAAA... == rsa-key-20140409" kopieren (ACHTUNG: wirklich
ALLE Zeichen, z.B. per "Rechte Maustaste --> Alles auswÀhlen" + "Rechte
Maustaste --> Kopieren") und auf dem Ziel-Rechner bei einem Benutzer (z.B.
"kurs") in die Datei "~/.ssh/authorized_keys" eintragen (EINE Zeile!).

  /home/kurs/.ssh/authorized_keys    # Benutzer "kurs"

ACHTUNG: Ein mit "PuttyGen" gespeicherter öffentliche SchlÌssel (Button "Save
Public Key") ist leider nicht unter UNIX/Linux verwendbar (hat falsches Format).

Falls auf dem Ziel-Rechner im Heimatverz. "/home/kurs" von Benutzer "kurs" das
Verz. ".ssh" oder die Datei ".ssh/authorized_keys" nicht existiert, diese
anlegen + verrechten:

  mkdir ~/.ssh                       # Verstecktes Verz. (wg. fÃŒhrendem Punkt)
  touch ~/.ssh/authorized_keys       # Tippfehler vermeiden
  chown -R kurs.kurs ~/.ssh          # Besitzer(Gruppe) (-R=Rekursiv)
  chmod 755 ~/.ssh                   # Zugriffsrechte (--> rwxr-xr-x)
  chmod 644 ~/.ssh/authorized_keys   # Zugriffsrechte (--> rw-r--r--)

ACHTUNG: Den Namen der Datei "authorized_keys" ohne Tippfehler schreiben und
die Verrechtung des Verz. "~/.ssh" und der Datei "authorized_keys"
kontrollieren, d.h.:

  ls -ld ~/.ssh ~/.ssh/authorized_keys   # -l=long, -d=directory only

MUSS folgende Ausgabe liefern:

  rwxr-xr-x kurs kurs ... /home/kurs/.ssh
  rwxr--r-- kurs kurs ... /home/kurs/.ssh/authorized_keys

ACHTUNG: Beim Kopieren des öffentlichen SchlÌssels aus dem Fenster von
"PuttyGen" kein Zeichen vorne oder hinten vergessen, der SchlÃŒssel funktioniert
sonst nicht. Das korrekte Format sieht so aus:

      Je ein Leerzeichen
         +----------+
         |          |
         v          v
  ssh-rsa AAAA....== rsa-key-20140409   # Zeile in "authorized_keys"
     ^         ^          ^
     |         |          |
  KEYTYP    SCHLUESSEL    KOMMENTAR (endet auf YYYYMMDD)
            (beginnt mit "AAAA" und endet mit "==")


ACHTUNG: Wird der "vi" zum Editieren der Datei "authorized_keys" benutzt, VOR
dem EinfÃŒgen des SchlÃŒssels per Maus in den INSERT-Modus schalten (z.B. per "i"
oder "I" oder "o")! Sonst wird das 1. Zeichen "s" des kopierten SchlÃŒsseltextes
als "substitute"-Befehl des vi interpretiert und beim folgenden EinfÃŒgen des
SchlÃŒssels im kopierten Text unterschlagen!

ACHTUNG: Die letzte Zeile in "authorized_keys" MUSS mit einem Zeilenvorschub
abgeschlossen werden (sonst Meldung "missing EOL at last line").

   ssh-rsa AAAA...== rsa-key-20140409   # OK (Typ + Key + Kommentar)
   sh-rsa AAAA...== rsa-key-20140409    # Falsch (Typ sh-rsa am Anfang falsch)
   AAAA...== rsa-key-20140409           # Falsch (Typ ssh-rsa am Anfang fehlt)
   ssh-rsa AAAA...                      # Falsch (...== am Keyende fehlt)

ACHTUNG: Das Kopieren per Maus ist NICHT SICHER, da es ÃŒber Netzwerk erfolgt!
Besser wÀre ein Transport Ìber einen 2. Weg (z.B. als Datei per USB-Stick).
Zumindest sollte dann der Fingerprint des OriginalschlÃŒssels (vorlesen lassen)
mit dem Fingerprint der Kopie auf IdentitÀt ÌberprÌft werden.

Den privaten Teil des erzeugten SchlÃŒssels (private key) auf dem
Windows-Rechner per Button "Save private key" abspeichern.

Die Passphrase kann leer gelassen werden, allerdings ist der private SchlÃŒssel
dann im Klartext auf der Windows-Maschine abgelegt und kann von anderen evtl.
gelesen werden, die Zugriff auf diesen Rechner haben.

Besser ist es daher, eine Passphrase fÃŒr den privaten SchlÃŒssel zu vergeben.
Diese ist dann bei jeder Verbindungsaufnahme per Putty zum Entsperren des
privaten SchlÃŒssels einzutippen oder kann mit dem Programm "Pageant"
(Putty-Agent) automatisch zur VerfÃŒgung gestellt werden.

3) Verbindung zum Ziel-Rechner aufnehmen   (Toc)

Putty starten, eine Session zum Ziel-Rechner (hier "192.168.0.201") fÃŒr den
obigen Benutzer (hier "kurs") neu anlegen oder per "Load" einlesen:

   kurs@192.168.0.201

Im Konfigurationsteil "Connection --> SSH --> Auth" der Sitzung den Pfad zur
Datei mit dem gerade gespeicherten privaten SchlÃŒssel eintragen

  "Private key file for authentication:" [...]    "Browse..."

Die Sitzung ordentlich BENENNEN + SPEICHERN nicht vergessen (dazu wieder im
Konfigurationsteil auf "Session" positionieren und "Save" drÃŒcken")

Nun sollte eine schlÃŒsselbasierte Verbindung mit dem Ziel-Rechner (ohne
Passwort) möglich sein (aber evtl. mit Eingabe der Passphrase).

ACHTUNG: Bei der 1. Verbindungsaufnahme zum Ziel-Rechner erscheint eine Meldung,
dass dieser Rechner noch nie besucht wurde und ein Fingerprint wird angezeigt.
Dieser Fingerprint ist mit dem des Zielrechners manuell zu vergleichen und
die Meldung ist zu bestÀtigen.

4) Probleme bei der Verbindungsaufnahme lösen   (Toc)

Bei Problemen mit der Verbindungsaufnahme auf dem Ziel-Rechner die Meldungen
dess SSH-DÀmons "sshd" wÀhrenddessen in der Log-Datei beobachten:

  sudo tail -f /var/log/auth.log

Typische Probleme sind:
* Falsche Verrechtung des Verz./der Datei "~/.ssh/authorized_keys"
  (z.B. Schreibrecht gesetzt fÃŒr alle oder fehlendes x-Recht fÃŒr alle)
* Fehler beim Kopieren des SchlÃŒssels nach "~/.ssh/authorized_keys"
  (z.B. Windows-Format, SchlÌssel nicht vollstÀndig kopiert, "==" am Ende fehlt)
* Falscher Name von Verz./Datei (z.B. "~/.ssh/autorized-key")

Um mehr Log-Informationen zu erhalten, den Log-Level in "/etc/ssh/sshd_config"
erhöhen (nicht vergessen, den SSH-Server danach neu zu starten):

  LogLevel  DEBUG            # statt INFO

ACHTUNG: Nach der Fehlersuche den Log-Level wieder auf "INFO" zurÃŒcksetzen (und
den SSH-Server neu starten), damit die Menge an Logdaten nicht zu stark wÀchst.

5) Passwortbasierte Authentifizierung abschalten   (Toc)

Sobald die schlÃŒsselbasierte Anmeldung funktioniert, kann die passwortbasierte
Anmeldung abgeschalten werden (erhöhte Sicherheit). Dazu auf dem Zielrechner in
der Konfigurations-Datei "/etc/ssh/sshd_config" des SSH-Daemons den Eintrag

  PasswordAuthentication  yes

gegen

  PasswordAuthentication  no

austauschen und den SSH-Daemon neu starten:

  sudo /etc/init.d/ssh restart   # SysV
  sudo initctl ssh restart       # Upstart

6) Weitere Informationen   (Toc)

Die öffentlichen SchlÌssel der Hosts, mit denen man sich verbindet, landen in
der Windows-Registry. Ebenso die Putty-Konfigurations- und Sitzungsdaten:

  [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\*]
  [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys]

Bei WinSCP landen Sie an folgender Stelle in der Windows-Registry:

  [HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\Configuration\*]
  [HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\Session\*]
  [HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\SshHostKeys]

Weitere Hinweise zur Konfiguration von Putty sind zu finden unter:

  --> putty-konfiguration-HOWTO.txt