SSH

Aus revampedia

Allgemeines

Die folgende Kurzbeschreibung hat Tibor nur zur Vollständigkeit erstellt, eigentlich ging es ihm um die Notiz wegen der Host-Key-Verifizierung. Hier könnte eine Einführung für Anfänger stehen.

SSH dient zum Aufbau einer verschlüsselten Verbindung zum Austausch von Terminal-Daten, d. h. zum Einloggen und Arbeiten an einem anderen Computer über das Netzwerk. Um eine solche Verbindung zu starten, reicht die Eingabe von ssh user@hostname, z.B. ssh webmaster@login.ee.ethz.ch. (Verlassen mit exit, logout oder Control-D.)

Neben der eigentlichen Terminal-Eingabe/-Ausgabe können beliebige Netzwerk-Ports weitergeleitet werden, z.B. für X11 (ssh -X user@host) oder VNC (ssh -L 5901:localhost:5901 user@host), womit auf einem anderen Rechner auch grafische Programme in eigenen Fenstern gestartet bzw. ein ganzer Desktop "fernbedient" werden können.

Verifikation von Host-Keys

Um sicherzustellen, dass der angesteuerte Computer nicht der eines Angreifers (man in the middle) ist, kontrolliert ssh den vom Zielcomputer gesendeten öffentlichen Schlüssel (genannt host key). Wurde bereits früher eine SSH-Verbindung zum gleichen Computer aufgebaut, ist dieser Schlüssel in der Datei ~/.ssh/known_hosts, und ssh kann ihn mit dem neu gesendeten Schlüssel vergleichen. Bei einem Unterschied bricht ssh mit einer auffälligen Warnung die Verbindung ab.

Wird ein Zielrechner aber zum ersten Mal angesprochen, zeigt ssh den Fingerprint des Schlüssels an und fragt, ob diesem vertraut werden soll:

The authenticity of host 'compi-b03 (139.144.4.35)' can't be established.
RSA key fingerprint is SHA256:Nx55R6+xJxXqkw0WfuUOeRaX5RCBqM2a7G555pkAmxw.
RSA key fingerprint is MD5:3e:9a:ff:34:ba:1a:34:2c:e0:dc:b5:44:cd:34:8f:d5.
Are you sure you want to continue connecting (yes/no)?

Darin liegt jedes Mal ein gewisses Sicherheitsrisiko. Je nach Situation gibt es aber Strategien, dieses zu reduzieren.

Bekannter Host im gleichen Netzwerk

Beispiel: Ich habe den Host-Key von compi-a02.ee.ethz.ch bereits in meiner Vertrauensliste. Nun möchte ich eine Verbindung zu compi-b03.ee.ethz.ch aufbauen, der im gleichen Computerraum steht. Ich kenne seinen Host-Key aber noch nicht und möchte nicht (ein zweites Mal) einem übers Internet geschickten Host-Key vertrauen.

Die Lösung besteht darin, dass ich mich auf compi-a02.ee.ethz.ch einlogge und in diesem eine "verschachtelte" SSH-Verbindung zu compi-b03.ee.ethz.ch aufbaue, d. h. ich tippe ssh webmaster@compi-b03.ee.ethz.ch ein, ohne mich von compi-a02.ee.ethz.ch abzumelden. Dadurch werden die Terminal-Daten von meinem Computer durch compi-a02.ee.ethz.ch "hindurchgereicht", bevor sie compi-b03.ee.ethz.ch erreichen. (Dies ist eine gewisse Ressourcenverschwendung und sollte nicht dauerhaft so betrieben werden.)

Da ich nun aber eine gesicherte Verbindung in den Computerraum habe, kann ich über diese mein eigentliches Ziel compi-d22.ee.ethz.ch nach dem Host-Key fragen. Dabei können zwei Fälle auftreten:

  1. Ich habe compi-b03.ee.ethz.ch noch nie von compi-a02.ee.ethz.ch aus angesprochen. ssh wird mir den Host-Key von compi-b03.ee.ethz.ch anzeigen und fragen, ob ich ihn akzeptiere. Somit kann ich ihn mit dem vergleichen, den ich bei einer direkten Verbindung angezeigt bekomme.
  2. compi-b03.ee.ethz.ch ist bereits in meiner Hosts-Liste enthalten, ssh baut kommentarlos die Verbindung auf. Dieser Fall ist schwieriger, da ich nicht ohne weiteres an den Host-Key herankomme.

Anzeige des Host-Key-Fingerprints eines bereits "bekannten" Rechners

Wenn ich (über den Zwischenrechner compi-a02 auf compi-b03 angemeldet bin, kann ich ihn mit dem folgenden Befehl nach seinem Host-Key fragen:[1]

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

Die ausgegebenen Hex-Ziffern kann ich nun verwenden, um den Host-Key bei der direkten Verbindung nach compi-b03 zu verifizieren.

Randomart statt Hex-Fingerprints

Das Vergleichen von Fingerprints als Hex-Folgen ist etwas aufwendig. Kryptographen haben daher eine alternative Art erfunden, sie anzuzeigen – nämlich als zweidimensionale "Bilder" aus ASCII-Zeichen. (Diese sind so konstruiert, dass ein einziges gekipptes Bit grosse Änderungen im erzeugten Bild bewirkt.) Um diese Funktion einzuschalten, ist ssh mit folgender Option aufzurufen:

ssh -o VisualHostKey=yes user@hostname

Als Bonus aktiviert diese Option gleich auch, dass die Bilder auf jeden Fall angezeigt werden und nicht nur bei der Verbindung mit einem unbekannten Rechner. Somit wird die obige Aufgabe stark vereinfacht: (Ausser man verwendet PuTTY unter Windows, welches keine Randomart-Schlüsselanzeige hat(?))

ich@zuhause:~> ssh webmaster@compi-a02.ee.ethz.ch
webmaster@compi-a02:~> ssh -o VisualHostKey=yes webmaster@compi-b03.ee.ethz.ch
vertrauenswürdiges Randomart-Bild
  # Ctrl-C  (Einloggen abbrechen) bzw. Ctrl-D  (aus compi-b03 ausloggen)
webmaster@compi-a02:~> logout
ich@zuhause:~> ssh -o VisualHostKey=yes webmaster@compi-b03.ee.ethz.ch
eventuell gefälschtes Randomart-Bild
  # Vergleichen und bestätigen bzw. abbrechen.

Hier noch ein typisches Randomart-Bild:

 tibor@deskpro:~> ssh -o VisualHostKey=yes tstolz@slab3.ethz.ch
 Host key fingerprint is f2:a0:76:45:b6:22:28:72:29:98:bc:61:6a:fd:31:5b
 +---[RSA 2048]----+
 |                 |
 |                 |
 |        o        |
 |o. o   o .       |
 |*++ . + S        |
 |+++  o *         |
 |.o .oo.E.        |
 |.  ...=          |
 |     o           |
 +-----------------+
 
 tstolz@slab3.ethz.ch's password: _

Weblinks

  • Announce: OpenSSH 5.1 released
    Introduce experimental SSH Fingerprint ASCII Visualisation to ssh(1) and ssh-keygen(1). Visual fingerprinnt display is controlled by a new ssh_config(5) option "VisualHostKey". The intent is to render SSH host keys in a visual form that is amenable to easy recall and rejection of changed host keys. This technique inspired by the graphical hash visualisation schemes known as "random art[*]", and by Dan Kaminsky's musings at 23C3 in Berlin.
    Fingerprint visualisation in is currently disabled by default, as the algorithm used to generate the random art is still subject to change.
  • random-art.org - Galerie und Online-Generator für farbige Randomart-Bilder

Weblinks (allgemein)

  • Secure Shell - ArchWiki
  • SSH keys - ArchWiki
  • 16 ultimate SSH hacks - ITworld.com
    • (#16-#14: Detecting MITM attacks)
    • #16: Retrieve the fingerprint and randomart image of an SSH key
    • #15: View all fingerprints and randomart images in known_hosts
    • #14: Verify server keys
    • #13: Attach to a remote GNU screen session
    • #12: Launch a remote screen session
    • #11: SSHFS is better than NFS
    • #10: Log in and run a command in one step
    • #9: Putting long commands in text files
    • #8: Copy public keys the easy way
    • #7: Give SSH keys unique names
    • #6: Give SSH keys informative comments
    • #5: Read public key comments
    • #4: Logging in with server-specific keys
    • #3: Fast easy known_hosts key management
    • #2: SSH tunnel for road warriors
    • #1 Favorite SSH tip: Evading silly web restrictions

Referenzen