ssh Schritt für Schritt

Dies ist eine Kurzanleitung für die Konfiguration von ssh unter Un*x. Dabei wird ssh so aufgesetzt, daß ein Login auf einem beliebigen Rechner unter jeweils der "richtigen" User-ID erfolgen kann. Das ist für Skripte, wie "runsocks-server" aus meinem SOCKS-Paket, erforderlich.

Für das Verständnis von ssh und wozu dies alles gut ist, bitte auch die längere allgemeine Anleitung zu ssh lesen. Diese Anleitung beschreibt nur den ssh-Client, nicht den sshd-Server.

Voraussetzungen

ssh-Konfigurationsdateien

Diese Files befinden sich entweder in /etc oder /etc/ssh. Sie müssen wie folgt angepaßt werden.

ssh_known_hosts

Diese Datei enthält die public keys aller Rechner, mit denen man sich verbinden will. Anhand dieser Schlüssel wird verifiziert, ob der Rechner auch derjenige ist, für den er sich ausgibt.

Diese Datei kann man einfach vom RZ kopieren. Sie findet sich auf allen RZ-Rechnern mit installierter ssh in /etc oder unter http://www.uni-karlsruhe.de/Uni/RZ/Software/Systemsoftware/ssh/ssh_known_hosts, ist allerdings ziemlich groß.

ssh_config

Hier werden allgemeine Parameter für den ssh-Client festgelegt. Die meisten davon lassen sich durch Kommandozeilenoptionen ersetzen, genauso lassen sich aber auch Kommandozeilenoptionen in dieser Datei angeben, die dann nicht immer getippt werden müssen.

Die Datei besteht aus einem Abschnitt, der für alle Rechner gilt, und beliebig vielen Abschnitten, die jeweils für einen bestimmten Rechner zutreffen. Ersterer muß am Ende der Datei stehen und beginnt mit der Zeile Host *. Dieser Abschnitt sollte folgende Einträge enthalten:

   RhostsAuthentication no
   RhostsRSAAuthentication no
   RSAAuthentication yes
   PasswordAuthentication yes
   FallBackToRsh no
   UseRsh no
   IdentityFile ~/.ssh/identity
   Cipher blowfish
   Compression no
   EscapeChar none
   Port 22
   KeepAlive no
Damit wird festgelegt, welche Authentikationsmethoden benutzt werden sollen (RSA-Schlüssel und Passwort), daß das potentiell gefährliche "rsh"-Protokoll nie benutzt wird, daß üblicherweise das userspezifische Identity-File benutzt wird (siehe unten), welche Verschlüsselung benutzt wird (Blowfish ist am schnellsten), keine Kompression (da diese mit älteren sshds Probleme macht), Verbindungen vollkommen datentransparent sind (wird z.B. für SOCKS benötigt), und die TCP-Verbindung auf Port 22 ohne Keepalive-Option geht.

Vor (!) diesem Allgemeinabschnitt kommen Einträge für einzelne Rechner oder Rechnergruppen. Die bereits beschriebenen Optionen können hier speziell für einzelne Rechner gesetzt werden, dazu kommt noch die Option "User" zur Angabe des Usernamens. Die Einträge beginnen jeweils mit der Zeile Host rechnername, wobei der Rechnername ohne Domain gesetzt werden sollte und die Zeichen ? und * als "wildcards" enthalten kann.

Beispiel:

Host rzstud*
   IdentityFile ~olaf/.ssh/identity
   User uknf
Host rz114*
   IdentityFile ~olaf/.ssh/identity
   User uknf
Damit wird bewirkt, daß für Zugriff auf die Rechner rzstud1, rz114s0, rz114s1... immer der Username "uknf" und der RSA-Schlüssel in meinem Homeverzeichnis benutzt wird. (Letzteres ist dann relevant, wenn man mehrere solcher RSA-Schlüssel hat, z.B. für verschiedene Rechner oder User-IDs.)

RSA-Key

Mit einem RSA-Key ist es möglich, ohne Eingabe von Paßwörtern auf Rechner zuzugreifen, die entsprechend konfiguriert sind. Ein RSA-Key besteht aus einem geheimen und einem öffentlichen Teil. Dabei hat der Inhaber des geheimen Schlüssels Zugriff auf jeden Account, auf dem der zugehörige öffentliche Schlüssel in der entsprechenden Datei liegt.

Erzeugen eines RSA-Keys

Dies geschieht (auf dem eigenen Rechner) mit dem Befehl ssh-keygen. Dieser erklärt dann alles weitere. Der Schlüssel wird in eine Datei gespeichert (üblicherweise .ssh/identity im Homeverzeichnis), die ihrerseits mit einer Passphrase gesichert werden kann, wenn dies notwendig erscheint (sonst einfach eine leere Passphrase eingeben). Dies ist der geheime Schlüssel. Der öffentliche Schlüssel liegt "daneben" in einer Datei mit gleichem Namen mit der Endung .pub, also üblicherweise identity.pub.

Account für RSA-Key freigeben

Den Account auf dem Zielrechner gibt man für die Benutzung eines RSA-Keys frei, indem man den zugehörigen öffentlichen Teil in die Datei $HOME/.ssh/authorized_keys kopiert. Dies geschieht am einfachsten mit einem Texteditor und cut-and-paste oder mit dem Befehl scp identity.pub zielrechner:.ssh/authorized_keys. Achtung: das Verzeichnis .ssh und alle Dateien darin dürfen nur für den Inhaber zugreifbar sein. Ein public key ist eine sehr lange Textzeile, diese darf nicht umgebrochen werden (was manche Editoren leider standardmäßig tun).

Gerät der geheime Schlüssel in fremde Hände oder besteht der Verdacht darauf, dann sollte man sofort sämtliche authorized_keys-Files auf allen eigenen Accounts löschen. Damit ist der Zugriff über diese Schlüssel hier nicht mehr möglich, die Erzeugung eines neuen Schlüsselpaars ist problemlos möglich.

Test einer Konfiguration

Testen der gerade erstellten Konfiguration ist sehr einfach: ssh rechnername eingeben, und man sollte sofort ohne weitere Parameter oder Eingaben auf dem betreffenden Rechner unter dem richtigen Account eingeloggt werden. (Es sei denn, man verwendet einen Passphrase-geschützten RSA-Schlüssel, dann muß man natürlich die Passphrase eingeben.)

Wenn das nicht funktioniert: ssh -v rechnername und die Meldungen (vor allem die letzten paar Zeilen) genau lesen.

Olaf Titz
1997-12-12