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 installieren. Dabei werden neben den Programmen
ssh, scp
etc. mehrere Files in/etc
installiert, die im folgenden besprochen werden. - Nameserver-Konfiguration überprüfen. Alle mit ssh anzusprechenden
Rechner sollten auch ohne explizite Domain ansprechbar sein, das spart
einiges an Tipparbeit. Im File
/etc/resolv.conf
sollte folgende Zeile stehen:search hadiko.de rz.uni-karlsruhe.de ira.uka.de
Ausprobieren z.B. mitping rzstud1
, etc.
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 noDamit 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 uknfDamit 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 Befehlssh-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.