Secure Shell (SSH) für Benutzer
Secure Shell (SSH) für Benutzer
Ernst Bötsch
1998-09-09
$Id: ssh.sed.html,v 1.4 1998/09/09 07:21:53 Boetsch Exp $ /afs/lrz-muenchen.de/info/www/user-sources/services/security/RCS/ssh.sed.html,v $ Verschlüsselung
Einführung
Die Kommandos des SW-Paketes `Secure Shell' (SSH) ermöglichen einen
(nahezu) transparenten Ersatz der Kommunikations-Kommandos
telnet
und rsh
/ rlogin
/
rcp
(Berkeley Remote-Dienste bzw. r-Kommandos). Dabei werden
die gravierenden Sicherheits-Probleme dieser Kommandos beseitigt:
Alle Daten werden verschlüsselt (besonders wichtig bei
Paßwörtern!), und es findet eine strenge Authentifizierung
beider beteiligten Parteien statt (d.h. die Identität der beiden Parteien
wird auf sichere Art überprüft).
Dieses Dokument wendet sich v.a. an die UNIX-Benutzer(innen) der SSH-Kommandos, eine Erweiterung um die Microsoft-Welt ist geplant; ein ergänzendes Dokument für System-Administrator(inn)en ist ebenfalls in Vorbereitung.
Für erste Schritte mit der SSH reicht der Abschnitt `Kurzanleitung zur sofortigen Nutzung von SSH' aus.
Am LRZ ist SSH zur Zeit auf den Sun's, der T90 und der VPP installiert. Die restlichen Plattformen sollen demnächst folgen.
Motivation
Probleme bei den Berkeley Remote-Diensten
Bei der Benutzung von Remote-Rechnern (d.h. entfernten Rechnern) haben sich in der Vergangenheit folgende Kommandos weitgehend durchgesetzt:
telnet
,rlogin
:
Interaktive Dialog-Sitzungen auf einem Remote-Rechnerrsh
:
Ausführung von Kommandos auf einem Remote-Rechner (interaktiv oder im Batch-Betrieb)rcp
:
Kopieren von Dateien zwischen Rechnern
Diese Kommandos weisen jedoch gravierende Sicherheits-Mängel auf, die in Anbetracht des boomenden Internet keinesfalls mehr ignoriert werden dürfen:
- Beim Verbindungs-Aufbau erforderliche Paßwörter werden im
Klartext übertragen!
Damit sind diese Paßwörter natürlich eine leichte Beute für jeden Hacker, der den Netz-Verkehr abhört. Aber es kommt noch schlimmer: Gleichzeitig wird nämlich auch die dazugehörige Kennung übertragen (natürlich ebenfalls im Klartext).
Eine einfache Schutzmöglichkeit wäre die Verwendung von `Einmal-Paßwörtern'. Dies ist aber so aufwendig und/oder unbequem, daß derartige Systeme nur selten installiert werden. - Damit nicht genug: Während einer bestehenden Verbindung werden
alle Daten ebenfalls im Klartext übertragen!
Dies ist noch gefährlicher als der vorhergende Punkt, da während einer Sitzung oft Paßwörter und/oder (streng) vertrauliche Daten übertragen werden. Außerdem hilft gegen das Abhören einer bestehenden Verbindung auch kein Einmal-Paßwort. - Beim Verbindungs-Aufbau findet keine Authentifizierung
(d.h. Überprüfung der Identität) der beteiligten Rechner statt.
Beide Seiten können sich also nicht sicher sein, daß der Kommunikations-Partner nicht ein Angreifer ist, der eine falsche Identität vorgibt. - Mit geeigneter SW können Angreifer sich in bestehende Verbindungen
`einklinken' und dann den Daten-Strom verändern!
Hacker nutzen dies i.a. dazu, um sich Zugang zur Kennung auf dem Remote-Rechner zu verschaffen!
Eigenschaften der SSH
Zur Lösung der Sicherheits-Probleme bei telnet
und den
r-Kommandos entwickelte Tatu Ylonen das SW-Paket `Secure Shell' (SSH),
das diese Kommandos auf einfache Art ersetzen kann. Bei der Entwicklung
von SSH wurde besonderer Wert auf folgende Punkte gelegt:
- Die Bedienung ist sehr einfach, damit Benutzer(innen) nicht von der
Verwendung von SSH abgeschreckt werden.
Darüberhinaus besitzt SSH einige Funktionen, die die Nutzung im Vergleich zu den r-Kommandos sogar erleichtert (z.B. automatische X-Window-Authorisierung und automatisches Setzen der$DISPLAY
-Environment-Variablen). - Bei den wichtigsten UNIX-Varianten stehen die Optionen der
r-Kommandos auch bei den SSH-Kommandos zur Verfügung.
Die r-Kommandos können in diesen Fällen sogar einfach durch die entsprechenden SSH-Kommandos ausgetauscht werden. - SSH mißtraut prinzipiell dem potentiell unsicheren Netz, dem Domain-Name-Service (DNS) etc.
- SSH ermöglicht eine strenge Authentifizierung beider Kommunikations-Partner; i.a. wird dies vom System-Administrator auch so konfiguriert.
- SSH garantiert Vertraulichkeit durch eine strenge Verschlüsselung aller Daten (speziell der Paßwörter).
- Nicht nur Dialog-Sitzungen sondern auch beliebige TCP/IP-Ports (besonders X-Window) können durch einen sicheren SSH-Kanal geleitet werden.
- Falls auf dem Remote-Rechner kein SSH-Server läuft, wird
automatisch auf die r-Kommandos zurückgeriffen.
Man muß sich also nicht merken, auf welchen Remote-Rechnern ein SSH-Server läuft, und dann in Abhängigkeit davon entweder SSH- oder r-Kommandos verwenden; man kann sich somit auf die SSH-Kommandos beschränken. - Optional wird der Datenverkehr zusätzlich komprimiert, was
besonders bei schlechten Kommunikations-Verbindungen nützlich ist.
Bei einer Anbindung über Modem bringt dies jedoch nichts, da Modems i.a. selbst komprimieren. - In einer Umgebung wie dem LRZ ist die volle Unterstützung von Kerberos-IV, AFS und DCE besonders wichtig.
- Im Einzelfall kann der interessierte (normale) Benutzer sogar
selbst einen SSH-Server starten; man ist dadurch nicht auf die
Kooperation von Administratoren angewiesen.
In diesem Fall stehen einem jedoch nicht alle, aber die wichtigsten Funktionen von SSH zur Verfügung. - SSH kann sowohl bei der Übersetzung als auch zur Laufzeit in weitem Rahmen konfiguriert und damit an die lokalen Anforderungen angepaßt werden.
Kurzanleitung zur sofortigen Nutzung von SSH
Will man sich nicht näher in SSH einarbeiten, um alle Funktionen des
SW-Pakets voll ausnützen zu können, reicht als 1-malige
Vorbereitung die Anlage des Directories $HOME/.ssh
aus:
mkdir $HOME/.ssh
chmod go= $HOME/.ssh
In diesem Directory werden alle Benutzer-spezifischen Dateien von SSH
aufbewahrt; das Directory sollte deshalb nur für den Besitzer der Kennung
zugänglich sein (d.h. Mode `go=
' bzw. `0700
').
Bei Verwendeung von AFS darf man die entsprechenden AFS-Rechte
keinesfalls vergessen (system:anyuser
und
system:authuser
dürfen z.B. höchstens das
Lookup-Recht `l
' haben).
Danach können sofort SSH-Kommandos verwendet werden:
- Einloggen auf einem Remote-Rechner für eine interaktive
Dialog-Sitzung (Ersatz für
telnet
,rlogin
und einrsh
ohne Kommando-Argument):ssh [SSH_OPTIONS] HOST
rlogin
ist derssh
-Aliasslogin
vorhanden, der ebenfalls zum Einloggen verwendet werden kann:slogin [SSH_OPTIONS] HOST
- Ausführung von Kommandos auf einem Remote-Rechner (interaktiv oder
im Batch-Betrieb; Ersatz für
rsh
):ssh [SSH_OPTIONS] HOST COMMAND [COMMAND_ARGUMENTS]
- Kopieren von Dateien zwischen Rechnern (Ersatz für
rcp
):scp [SCP_OPTIONS] [[LOGIN@]HOST:]FILE [...] [[LOGIN@]HOST:]FILE
-
xterm
mit einer Shell auf einem Remote-Rechner:xterm [XTERM_OPTIONS] -e ssh [SSH_OPTIONS] HOST &
- Andere X-Window-Anwendungen:
- Falls kein Paßwort eingegeben werden muß:
ssh -n [SSH_OPTIONS] HOST X_WINDOW_APPLICATION [ARGUMENTS] &
- Falls ein Paßwort erforderlich ist:
ssh -f [SSH_OPTIONS] HOST X_WINDOW_APPLICATION [ARGUMENTS] &
ssh
-Option `-f
' anstelle von `-n
'.)
Wie diese Beispiele zeigen, regelt SSH automatisch die Verwendung von X-Window. Man muß also auf dem Remote-Rechner weder eine X-Window-Authorisierung (
xauth
-Kommando) noch die Environment-Variable$DISPLAY
setzen. - Falls kein Paßwort eingegeben werden muß:
Dabei umfaßt SSH_OPTIONS
bzw.
SCP_OPTIONS
i.a. auch die Optionen, die man von
den r-Kommandos her gewohnt ist (z.B. `-l LOGIN
'
bei ssh
, wenn man auf dem Remote-Rechner unter einer anderen
Kennung LOGIN
arbeitet).
Bereits durch diese einfache Nutzung der SSH werden alle Daten einer Verbindung komplett verschlüsselt. Damit sind schon in dieser einfachen Nutzungsart der SSH die Sicherheits-Probleme der r-Kommandos behoben, d.h. Paßwörter und Daten werden nicht mehr im Klartext übertragen und es findet eine strenge Authentifizierung statt.
Man sollte und kann immer die SSH-Kommandos verwenden, da SSH automatisch auf die r-Kommandos zurückgreift, falls auf dem Remote-Rechner kein SSH-Server läuft.
Alles weitere (siehe dazu den Rest dieses Dokuments oder entsprechende
man
-Pages) ist nur dann erforderlich, wenn man die komplette
Funktionalität der SSH ausschöpfen will. Diese zusätzlichen Funktionen
kann man jedoch mit den Stichwörtern `Spezialfälle' und `Bequemlichkeit'
beschreiben; man kann i.a. dadurch keine wesentliche zusätzliche
Sicherheit gewinnen.
SSH-Interna
Für das Verständnis diverser SSH-Funktionen ist ein kurzer Einblick in einige Aspekte des inneren Aufbaus von SSH hilfreich.
Interner Ablauf beim Verbindungsaufbau
Vor der Bearbeitung von Verbindungs-Wünschen durch SSH-Clients sind u.a. folgende Schritte erforderlich:
- Auf dem Server-Rechner wird vom Administrator einmalig bzw. in größeren Zeitabständen (mindestens mehrere Monate) ein Host-Key-Paar (RSA) generiert. Für diesen Verwendungszweck sind die Keys i.a. 1024 Bit lang.
- Der laufende Server-Prozeß erzeugt periodisch (i.a. jede Stunde) zusätzlich ein Server-Key-Paar (RSA), das nur im Memory gehalten und nach Ablauf der Zeitspanne gelöscht wird. Diese Keys sind i.a. 768 Bit lang.
Bei jeder neuen Verbindung laufen am Anfang folgende Teilschritte ab:
- Der SSH-Client
ssh
(scp
setzt intern ebenfalls aufssh
auf) wendet sich an den SSH-Server auf einem Remote-Rechner. - Der SSH-Server schickt sowohl seinen Host- als auch seinen Server-Public-Key (siehe oben) an den Client.
- Der SSH-Client kann nun überprüfen, ob er den Server kennt, indem
er in Tabellen von bekannten Public-Keys nach dem gerade erhaltenen
Host-Public-Key sucht.
Ist dieser Key noch nicht bekannt, teilt der Client dies dem Benutzer mit und fragt nach, ob die Verbindung trotz der Unsicherheit (die Identität des Servers kann ja nicht überprüft werden) aufgebaut werden soll.
Bei einer positiven Antwort trägt der Client den Server-Public-Key außerdem in eine individuelle Liste des Benutzers ein; bei der nächsten Verbindung ist dann der Remote-Rechner schon bekannt und der Client muß nicht mehr nachfragen.
Bei einer negativen Antwort des Benutzers hört der Client an dieser Stelle wie gewünscht auf. - Der Client schickt dem Server eine 256 Bit lange Zufallszahl, die sowohl mit dem Host- als auch mit dem Server-Public-Key des Remote-Rechners verschlüsselt wurde.
-
Ab sofort werden alle Daten der Verbindung
verschlüsselt.
Dabei dient die im vorherigen Schritt erzeugte Zufallszahl (bzw. je nach Algorithmus auch nur Teile von ihr) als Sitzungs-Key. Dieser Sitzungs-Key ist bei jeder Verbindung anders, da er jedesmal individuell und zufällig erzeugt wird.
Der Schutz der Verbindung ergibt sich durch folgende Punkte:- Selbst wenn der Remote-Rechner eine falsche Identität vorgespiegelt hat, kann dem Benutzer nichts passieren: Da die Zufallszahl mit dem Host-Public-Key des richtigen Rechners verschlüsselt wurde, kann auch nur der richtige Rechner diese Zahl wieder entschlüsseln. Ein falscher Rechner kann dies nicht und würde deshalb für den Rest der Verbindung nur Daten-Müll erhalten, der für den Angreifer vollkommen wertlos ist.
- Die zusätzliche Verschlüsselung der Zufallszahl mit dem Server-Public-Key hat folgende Funktion: Selbst wenn ein Hacker in den Remote-Rechner eindringt, hat er nur Zugriff auf Verbindungen, die mit dem aktuell gültigen Server-Public-Key gestartet wurden; deswegen wird der Server-Public-Key periodisch gewechselt (i.a. jede Stunde; siehe oben).
- Client und Server führen einen Dialog,
durch den der Server die Identität und Berechtigung des Clients
überprüfen kann.
Ist der Client unbekannt oder nicht berechtigt, wird die Verbindung an dieser Stelle abgebrochen. - In einem weiteren Dialog wird die neue Sitzung vorbereitet. Dabei
wird u.a. der Terminal-Typ (Environment-Variable
$TERM
) und die Art der Sitzung (interaktive Dialog-Sitzung oder Ausführung eines Kommandos) festgelegt. - Zum Schluß startet der Server eine Login-Shell bzw. führt das gewünschte Kommando aus.
Authentifizierungs-Varianten des Client
Bei der Authentifizierung des Clients werden der Reihe nach verschiedene Verfahren ausprobiert. Dabei wird der Client als berechtigt betrachtet, sobald das erste Verfahren folgender Liste erfolgreich war:
- Dem Client wird einfach geglaubt, wenn er behauptet, von einem
bestimmten Rechner zu kommen. Außerdem muß ein entsprechender Eintrag
in einer der folgenden Dateien vorhanden sein:
/etc/hosts.equiv
oder/etc/shosts.equiv
:
/etc/hosts.equiv
regelt u.a. System-weite Zugangsberechtigungen für die r-Kommandos; die andere Datei hat die gleiche Syntax, wird jedoch nur vom SSH-Server ausgewertet.
Beide Dateien werden in der aufgeführten Reihenfolge durchsucht.$HOME/.shosts
oder$HOME/.rhosts
:
$HOME/.rhosts
legt die Benutzer-spezifischen Zugangsberechtigungen für die r-Kommandos fest; die andere Datei hat die gleiche Syntax, wird jedoch nur vom SSH-Server ausgewertet.
Diese Dateien werden in der angegebenen Reihenfolge durchsucht.
Bei der spezifischen LRZ-Installation wird zusätzlich noch eine weitere Datei durchsucht.
Dieses Verfahren entspricht der Zugangs-Prüfung bei den r-Kommandos und ist deshalb genauso unsicher. Aus diesem Grunde sollte es vom Administrator des Remote-Rechners durch eine entsprechende Konfiguration des SSH-Servers unbedingt deaktiviert werden. In der Default-Konfiguration ist dies schon der Fall.
- Zur Prüfung der Berechtigung werden die Dateien im vorhergehenden Verfahren verwendet. Zusätzlich muß jedoch noch der Client-Rechner durch eine strenge RSA-Authentifikation seine Identität beweisen.
- Der Benutzer kann seine Identität durch eine individuelle
RSA-Authentifikation nachweisen. Dazu ist jedoch auf dem Remote-Rechner
ein entpsrechender Eintrag in
$HOME/.ssh/authorized_keys
erforderlich. - Der Benutzer kann ein gültiges Paßwort angeben.
Ist keines dieser Verfahren erfolgreich, wird der Verbindungs-Wunsch des Client abgewiesen.
Anmerkung: /etc/hosts.equiv
und
/etc/shosts.equiv
funktionieren aus Sicherheits-Gründen
nicht für die Kennung root
. Für root
muß
deshalb eine individuelle Berechtigung konfiguriert werden, falls man
nicht jedesmal ein Paßwort eingeben will.
Verwendete kryptographische Algorithmen
Bei SSH kommen kryptographische Verfahren an mehreren Stellen zum Einsatz.
Ein asymmetrisches Verfahren wird für die Authentifizierung der Kommunikations-Partner und für die sichere Übertragung eines zufällig erzeugten und nur einemal verwendeten Sitzungs-Key eingesetzt:
- RSA (Akronym der Erfinder Rivest, Shamir und Adleman).
Dabei werden Key-Längen zwischen 768 und 1024 Bit empfohlen; längere Keys bringen in der nächsten Zeit keine zusätzliche Sicherheit, kosten aber deutlich Rechenzeit.
Zur Verschlüsselung der Daten während der Verbindung wird wegen des höheren Durchsatzes ein symmetrisches Verfahren verwendet. Je nach Installation der SW hat der Benutzer i.a. die Auswahl zwischen verschiedenen Algorithmen (die Durchsatz-Angaben in folgender Liste beziehen sich auf einen Pentium-Prozessor):
- None: 100% Durchsatz.
Diese Variante ist nur für Debug-Zwecke geeignet, da keine Verschlüsselung durchgeführt wird. - DES (Data Encryption Standard): 56 Bit Key-Länge; 71%
Durchsatz.
Für sehr hohe Sicherheits-Anforderungen ist dieses Verfahren wegen seiner geringen Key-Länge inzwischen zu schwach. - 3DES (Tripple DES): 112 Bit Key-Länge; 45% Durchsatz.
Dieser Algorithmus kann empfohlen werden und ist als größter gemeinsamer Nenner bei allen SSH-Installationen immer vorhanden. Außerdem wird 3DES als Default verwendet und optionale individuelle RSA-Keys sind durch 3DES geschützt. - IDEA (International Data Encryption Algorithm): 128 Bit Key-Länge;
64% Durchsatz.
Auch dieses Verfahren kann empfohlen werden. - Blowfisch: 32 - 448 Bit Key-Länge möglich, SSH verwendet 128 Bit;
88% Durchsatz.
Dem Autor des Dokuments sind keine Aussagen über die Güte dieses Algorithmus bekannt. - Arcfour: Beliebige Key-Länge möglich, SSH verwendet 128 Bit; 91%
Durchsatz.
Dem Autor des Dokuments sind keine Aussagen über die Güte dieses Algorithmus bekannt.
Kommandos des SSH-Paketes
Das SW-Paket SSH besteht aus mehreren Kommandos und Konfigurations-Dateien, die im folgenden näher beschrieben werden.
Übersicht über die Kommandos
Vor der detaillierten Beschreibung der einzelnen Kommandos von SSH sollen diese zur besseren Übersicht kurz vorgestellt werden:
ssh
:
Einloggen bzw. Ausführen von Kommandos (Ersatz fürtelnet
,rlogin
undrsh
)slogin
:
Alias für einssh
ohne Kommando-Argumentscp
:
Kopieren von Dateien (modifiziertesrcp
, dasssh
für den Daten-Transfer verwendet)ssh-keygen
:
Erzeugen eines Key-Paares (dient zur strengen Authentifizierung)ssh-agent
:
Optionaler Authentifizierungs-Agent zur leichteren Handhabung von individuellen Secret-Keysssh-add
:
Steuerung desssh-agent
make-ssh-known-hosts
:
Tool zum einfachen Sammeln von Public-Keys (primär für Systemverwalter(innen))sshd
:
Server-Dämon auf dem Remote-Rechner
Primäre Kommandos
Für den Benutzer sind vor allem die Kommandos ssh
und
scp
von Bedeutung. Diese Kommandos ersetzen die unsicheren
r-Kommandos bzw. telnet
und reichen für eine normale Nutzung
von SSH aus.
Vor der ersten Nutzung von SSH muß man jedoch das Directory
$HOME/.ssh
erzeugen:
mkdir $HOME/.ssh
chmod go= $HOME/.ssh
In diesem Directory werden alle Benutzer-spezifischen Dateien von SSH
aufbewahrt; das Directory sollte deshalb nur für den Besitzer der Kennung
zugänglich sein (d.h. Mode `go=
' bzw. `0700
').
Bei Verwendeung von AFS darf man die entsprechenden AFS-Rechte
keinesfalls vergessen (system:anyuser
und
system:authuser
dürfen z.B. höchstens das
Lookup-Recht `l
' haben).
Verwendung von ssh
Das Kommando ssh
ersetzt telnet
,
rlogin
und rsh
und besitzt zwei
Aufruf-Varianten:
- Der Aufruf
ssh [SSH_OPTIONS] HOST
rlogin
(bzw. vonrsh
ohne Kommando-Argument) odertelnet
, d.h. man kann sich damit auf einem Remote-Rechner für eine interaktive Dialog-Sitzung einloggen.
Als Äquivalent zum r-Kommandorlogin
ist derssh
-Aliasslogin
vorhanden, der ebenfalls zum Einloggen verwendet werden kann:slogin [SSH_OPTIONS] HOST
- Mit dem Aufruf
ssh [SSH_OPTIONS] HOST COMMAND [COMMAND_ARGUMENTS]
rsh
ersetzen.
Das nähere Verhalten von ssh
wird bestimmt durch
- Aufruf-Optionen,
- eine individuelle Konfigurations-Datei und
- eine System-weite Konfigurations-Datei
(in dieser Reihenfolge).
Folgende Optionen werden bei ssh
häufiger benötigt:
-l LOGIN_NAME
(`Login'):
Man arbeitet auf dem Remote-Rechner unter der anderen KennungLOGIN_NAME
.
Diese Option ist immer dann erforderlich, wenn die Kennungen auf den beteiligten Rechnern unterschiedliche Namen haben. Ohne diese Option nimmtssh
an, daß auf beiden Rechnern der Name gleich ist.-n
bzw.-f
:
Die Eingabe vonssh
(d.h. `stdin') wird nach/dev/null
umgelenkt. Dies ist i.a. dann erforderlich, wennssh
im Hintergrund laufen soll.
Bei `-n
' wird die Eingabe sofort umgelenkt; bei `-f
' erfolgt die Umlenkung erst nach dem Verbindungsaufbau und einer dabei evtl. erforderlichen Paßwort-Eingabe (bei `-n
' kann kein Paßwort eingegeben werden).-C
(`Compress'):
Die Daten sollen während der Übertragung komprimiert werden.-v
(`Verbose Mode'):
Durch Diagnose-Meldungen wird jeweils mitgeteilt, wasssh
im Augenblick gerade tut. Dies ist sehr hilfreich für den Debug von Problemen beim Verbindungsaufbau, bei der Authentifikation und bei der Konfiguration.-c ALGORITHM
(`Code'):
Mit dieser Option kann man den symmetrischen Algorithmus für die Verschlüsselung der Daten spezifizieren. Dabei kannALGORITHM
folgende Werte haben:idea
,des
,3des
,blowfish
,arcfour
undnone
.
Das Argument `none
' (d.h. `keine Verschlüsselung') sollte man nur beim Debug vonssh
-Problemen verwenden.
Außerdem sollte man daran denken, daß je nach Konfiguration von SSH-Client bzw. -Server nicht immer alle dieser Algorithmen zur Verfügung stehen. Als größter gemeinsamer Nenner ist jedoch immer `3des
' möglich.
Verwendung von scp
Das Kommando scp
ersetzt rcp
und besitzt
auch dessen Aufruf-Syntax:
scp [SCP_OPTIONS] [[LOGIN@]HOST:]FILENAME [...] [[LOGIN@]HOST:]FILENAME
Dabei bezeichnet LOGIN
eine andere Kennung auf
dem Remote-Rechner HOST
.
Im Gegensatz zu rcp
fragt jedoch scp
bei
Bedarf nach einem Paßwort (rcp
würde an dieser Stelle
einfach mit einem Fehler abbrechen).
Außerdem dürfen die bei einem scp
angegebenen Dateien
alle auf Remote-Rechnern liegen; die Datenübertragung erfolgt
dann direkt zwischen den Remote-Rechnern und nicht auf einem
Umweg über den lokalen Rechner. Dies kann jedoch in Firewall-Umgebungen
manchmal zu Problemen führen.
Folgende Optionen werden bei scp
häufiger benötigt:
-r
(`Recursively'):
Directories sollen komplett mit dem gesamten Inhalt rekursiv kopiert werden.-p
(`Preserve'):
Beim Kopieren sollen die Datei-Rechte und die Zeitstempel der Dateien beibehalten werden.-C
(`Compress'):
Die Daten sollen während der Übertragung komprimiert werden.-v
(`Verbose Mode'):
Durch Diagnose-Meldungen wird jeweils mitgeteilt, wasscp
im Augenblick gerade tut. Dies ist sehr hilfreich für den Debug von Problemen beim Verbindungsaufbau, bei der Authentifikation und bei der Konfiguration.-c ALGORITHM
(`Code'):
Mit dieser Option kann man den symmetrischen Algorithmus für die Verschlüsselung der Daten spezifizieren. Dabei kannALGORITHM
folgende Werte haben:idea
,des
,3des
,blowfish
,arcfour
undnone
.
Das Argument `none
' (d.h. `keine Verschlüsselung') sollte man nur beim Debug vonscp
-Problemen verwenden.
Außerdem sollte man daran denken, daß je nach Konfiguration von SSH-Client bzw. -Server nicht immer alle dieser Algorithmen zur Verfügung stehen. Als größter gemeinsamer Nenner ist jedoch immer `3des
' möglich.
Schutz von X-Window-Verbindungen
Mit SSH kann man beliebige TCP/IP-Verbindungen durch einen sicheren Kanal leiten. Im Falle von X-Window wird dies jedoch besonders einfach gemacht:
- Der gesamte X-Window-Verkehr wird durch Umleitung über einen Proxy-X-Window-Server automatisch verschlüsselt.
- Die
$DISPLAY
-Environment-Variable wird auf dem Remote-Rechner automatisch gesetzt. - Eine
xauth
-Authentifizierung der X-Window-Clients wird automatisch gehandhabt. - Beim Verbindungsaufbau generiert SSH jedesmal ein
X-Window-Magic-Cookie neu und zufällig; dieses Remote-Cookie
wird erst auf dem lokalen Rechner automatisch in das originale Cookie
des X-Window-Servers umgewandelt.
Dadurch verläßt das originale Cookie nie den lokalen Rechner und kann deshalb auch nicht auf einem Remote-Rechner von einem Hacker gestohlen werden.
Wie man sieht, kann man X-Window mit SSH sehr viel
sicherer und zusätzlich auch noch einfacher handhaben
als ohne SSH (man muß $DISPLAY
nicht setzen und
sich nicht um die xauth
-Authentifizierung kümmern).
Will man nun ein xterm
mit einer Shell haben, die auf
einem Remote-Rechner läuft, ist folgender Aufruf zu empfehlen:
xterm [XTERM_OPTIONS] -e ssh [SSH_OPTIONS] HOST &
Wegen der höheren Netz- und CPU-Belastung sollte man nicht die Variante
ssh [SSH_OPTIONS] HOST xterm [XTERM_OPTIONS] -ls &
wählen. In diesem Fall wird nämlich der gesamte X-Window-Verkehr des
xterm
durch den SSH-Kanal geleitet und nicht nur die Daten
der Shell-Sitzung wie im ersten Fall (und diese Daten haben ein
deutlich geringeres Volumen als die Daten des
X-Window-Verkehrs).
Für den Start von anderen X-Window-Anwendungen (d.h. nicht
xterm
) auf einem Remote-Rechner sind folgende Varianten zu
empfehlen:
- Falls kein Paßwort eingegeben werden muß:
ssh -n [SSH_OPTIONS] HOST X_WINDOW_APPLICATION [ARGUMENTS] &
- Falls ein Paßwort erforderlich ist:
ssh -f [SSH_OPTIONS] HOST X_WINDOW_APPLICATION [ARGUMENTS] &
Maintenierung von RSA-Key-Paaren
Die Authentifizierung des Client kann u.a.
durch eine Benutzer-spezifische RSA-Authentifikation erfolgen.
Dazu benötigt der Benutzer jedoch ein individuelles RSA-Key-Paar, das im
Directory $HOME/.ssh
abgelegt und mit dem Kommando
ssh-keygen
verwaltet wird:
-
ssh-keygen [-f KEY_FILE] [-C COMMENT] [-b KEY_LENGTH]
:
Mit dieser Aufruf-Variante erzeugt man ein neues neues Key-Paar, wobei folgende Informationen interaktiv abgefragt werden:- Datei-Name für die Speicherung des Key-Paares, wobei
$HOME/.ssh/identity
die Voreinstellung ist.
In der abgefragten DateiFILE
wird nur der Secret-Key des Paares in einem binären Intern-Format abgelegt; der dazugehörige Public-Key wird als ASCII-Text inFILE.pub
gespeichert.
Diese Abfrage entfällt, falls schon ein Name über die Option `-f KEY_FILE
' angegeben wurde.
Existiert die Datei schon, wird nachgefragt, ob sie überschrieben werden darf. - Paßwort, mit dem der Secret-Key verschlüsselt wird.
Der Secret-Key wird i.a. zur Sicherheit in der Datei verschlüsselt abgelegt, damit ein in das System eingedrungener Hacker nichts mit der Datei anfangen kann. Dafür muß man jedoch die leichte Unbequemlichkeit in Kauf nehmen, bei jeder Verwendung des individuellen Secret-Keys das Paßwort erneut einzugeben bzw. den Authentifizierungs-Agenten zu verwenden.
Gibt man beissh-keygen
ein leeres Paßwort an, wird der Secret-Key nicht verschlüsselt! Man sollte sich jedoch genau überlegen, ob die lokale Umgebung dafür ausreichend sicher ist.
Fällt einem Hacker der Secret-Key in die Hände (entweder weil er nicht verschlüsselt ist oder weil das Paßwort erraten werden konnte), kann sich der Hacker für den Benutzer ausgeben!
Anmerkungen:
- Damit das neue Key-Paar wirksam wird, muß man noch jeweils auf
allen Remote-Rechnern 1-mal den neuen Public-Key
in
$HOME/.ssh/authorized_keys
eintragen.
Der Secret-Key sollte jedoch niemals den lokalen Rechner verlassen! - Die Erzeugung des Key-Paares erfolgt automatisch und kann
nicht reproduziert werden.
Man muß deshalb ein neues Key-Paar generieren, falls man die Secret-Key-Datei verliert oder das dazugehörige Paßwort vergißt. Zum Glück kann außer Unbequemlichkeit (nämlich der dann erforderliche Austausch des Public-Keys auf allen Remote-Rechnern) nicht viel passieren, wenn man die Secret-Key-Datei durch ein gutes Paßwort geschützt hat; ohne dieses Paßwort kann nämlich niemand etwas mit der Secret-Key-Datei anfangen (auch der berechtigte Benutzer oder ein Hacker nicht). - Aus Sicherheitsgründen sollte man das Paßwort für den
Secret-Key niemals als Option von
ssh-keygen
angeben!
Andere Benutzer können sich nämlich mit demps
-Kommando die aktuell ablaufenden Programme einschließlich der verwendeten Optionen anzeigen lassen! - Mit der Option `
-b KEY_LENGTH
' kann man die Länge der Key's festlegen. Dafür wird im Augenblick ein Wert zwischen 768 und 1024 Bit als ausreichend betrachtet (`1024' ist die Voreinstellung). - Mit der Option `
-C COMMENT
' kann man zur besseren Übersicht einen Kommentar bzw. einen Namen für das Key-Paar vergeben. Dieser Kommentar wird jedoch von SSH vollkommen ignoriert.
- Datei-Name für die Speicherung des Key-Paares, wobei
ssh-keygen -p [-f KEY_FILE]
(`Password'):
Ändern des Paßworts für die Aktivierung des Secret-Key-
ssh-keygen -c [-f KEY_FILE] [-C COMMENT]
(`Comment'):
Ändern des Kommentars ssh-keygen -u [-f KEY_FILE]
(`Update'):
Zur Verschlüsselung des Secret-Keys wird der aktuell gültige Default-Algorithmus verwendet (im Augenblick `3DES').
Nutzung des Authentifizierungs-Agenten
Stützt man sich bei der Authentifizierung des Client auf eine Benutzer-spezifische RSA-Authentifikation, sollte man aus Sicherheitsgründen den/die Secret-Key(s) aussschließlich verschlüsselt in Dateien ablegen. Dies hat jedoch die Unbequemlichkeit zur Folge, daß man zur Aktivierung eines Secret-Key jedesmal das dazugehörige Paßwort eingeben muß.
Um das Handling von Secret-Keys zu vereinfachen, wurde der Authentifizierungs-Agent entwickelt, der Secret-Keys im Memory aufbewahrt. Die Kommunikation mit dem Agenten erfolgt über eine spezielle Datei, die nur für den Benutzer les- und schreibbar ist. Diese Methode kann damit jedoch vom Superuser und jedem Prozeß desselben Benutzer umgangen werden. Bei höheren Sicherheitsanforderungen bzw. bei geringem Vertrauen zur lokalen Umgebung sollte deshalb der Agent nicht verwendet werden.
Man kann den Authentifizierungs-Agenten auf verschiedene Arten starten:
-
ssh-agent COMMAND [COMMAND_ARGUMENTS]
:
Das KommandoCOMMAND
und alle seine Kinder können den Agenten nutzen.
ssh-agent
beendet sich selbständig nach dem Ende vonCOMMAND
. Dieses Verhalten ermöglicht ein einfaches Zusammenspiel mit X-Window (siehe die Beispiele). eval `ssh-agent [-s | -c]`
:
Der Agent wird als unabhängiger Dämon gestartet; der Agent erzeugt dann entsprechende Shell-Kommandos als Ausgabe, durch die die Shell (und deren Kinder) den Agenten nutzen können.
Bei dieser Variante muß der Agent am Ende der Sitzung explizit beendet werden (siehe nächste Aufruf-Variante).
Ohne diese Optionen versuchtssh-agent
, selbständig herauszufinden, unter welcher Shell er aufgerufen wurde (davon hängt nämlich die Syntax der Ausgabe vonssh-agent
ab). Mit der Option `-s
' kann jedoch bei der Ausgabe die Syntax vonsh
/ksh
/bash
/ ... erzwungen werden, bei `-c
' die Syntax voncsh
/tcsh
/ ...eval `ssh-agent -k [-s | -c]`
:
Ein unabhängiger Agent-Dämon wird beendet.
Beim Start gelangt der Authentifizierungs-Agent aber noch nicht in den
Besitz von Secret-Keys; diese müssen erst danach geladen werden. Für das
Management von Secret-Keys im Agenten steht das Kommando
ssh-add
zur Verfügung:
ssh-add [KEY_FILE [...]]
:
Laden von einem oder mehreren Secret-Keys; für jeden Secret-Key muß natürlich bei Bedarf das dazugehörige Paßwort angegeben werden.ssh-add -d [KEY_FILE [...]]
:
Entfernen von einem oder mehreren Secret-Keysssh-add -D
:
Entfernen aller geladenen Secret-Keysssh-add -l
:
Auflisten aller geladenen Secret-Keys
Beispiele für die Nutzung des Authentifizierungs-Agenten:
ssh-agent $SHELL
:
Nachträglicher Start einer Sitzung unter Nutzung des Agentenssh-agent startx &
:
Start des X-Window-Systems unter Nutzung des Agenten- Nutzung des Agenten bei X-Window mit
xdm
durch das Shell-Script$HOME/.xsession
:#!/bin/sh if [ -d $HOME/.ssh ] then EXEC='exec ssh-agent' else EXEC=exec fi if [ -x $HOME/.xinitrc ] then $EXEC $HOME/.xinitrc else $EXEC xterm -geometry 80x24+0-60 -ls fi
Syntax und Semantik der Konfigurations-Dateien
Bevor auf einzelne Konfigurations-Dateien näher eingegangen wird, werden sie in einer Übersicht kurz vorgestellt.
Dateien für die SSH-Clients
Die SSH-Clients ssh
und scp
werten einige
Konfigurations-Dateien aus, die nur für den Owner schreibbar sein dürfen.
Für diese Dateien wird jeweils ein Vorschlag für die Datei-Rechte gemacht
(Oktal-Notation):
$HOME/.ssh
:
Directory für die individuellen SSH-Dateien; Rechte: 0700 bzw. 0755- Konfigurations-Dateien:
/etc/ssh_config
:
System-weite Konfigurationen; Rechte: 0644; hinsichtlich Syntax und Inhalt siehe dieman
-Page vonsshd
.$HOME/.ssh/config
:
Benutzer-spezifische Konfigurationen; Rechte: 0600; hinsichtlich Syntax und Inhalt siehe dieman
-Page vonssh
.
$HOME/.ssh/identity
:
Benutzer-spezifischer Secret-Key; Rechte: 0600; die Datei ist nur auf dem lokalen Ausgangs-Rechner erforderlich und darf nur für den Owner lesbar sein! Sie wird mitssh-keygen
erzeugt.$HOME/.ssh/identity.pub
:
Benutzer-spezifischer Public-Key; Rechte: 0644; der Key in dieser Datei sollte auf allen Remote-Rechnern in$HOME/.ssh/authorized_keys
eingetragen werden. Die Datei wird mitssh-keygen
erzeugt.$HOME/.ssh/random_seed
:
Hilfs-Datei; Rechte: 0600; die Datei darf nur für den Owner lesbar sein! Sie wird automatisch erzeugt.
Bei der spezifischen LRZ-Installation gelten teilweise andere Pfade.
Dateien für den SSH-Server
Folgende Dateien werden vom SSH-Server sshd
ausgewertet
und dürfen nur für den Owner schreibbar sein (Notation wie im vorherigen
Abschnitt):
/etc
:
Directory mit allen Dateien für den SSH-Server; Rechte: 0755/etc/ssh_host_key.pub
:
Host-Public-Key; Rechte: 0644/etc/nologin
:
Alle Nicht-root
-Verbindungen werden abgelehnt, falls diese Datei vorhanden ist; Rechte: 0644- Listen von berechtigten Rechnern und/oder Kennungen:
/etc/hosts.equiv
,/etc/shosts.equiv
:
System-weite Listen; Rechte: 0644$HOME/.shosts
,$HOME/.rhosts
:
Benutzer-spezifische Listen; Rechte: 0600 bzw. 0644
- Listen bekannter Host-Public-Keys von Remote-Rechnern:
/etc/ssh_known_hosts
:
System-weite Liste; Rechte: 0644$HOME/.ssh/known_hosts
:
Benutzer-spezifische Liste; Rechte: 0600 bzw. 0644
$HOME/.ssh/authorized_keys
:
Benutzer-spezifische Liste bekannter individueller Benutzer-Public-Keys; Rechte: 0600 bzw. 0644- Definition von Environment-Variablen für jede neue Verbindung:
/etc/environment
:
System-weite Definitionen; Rechte: 0644$HOME/.ssh/environment
:
Benutzer-spezifische Definitionen; Rechte: 0600 bzw. 0644
- Kommando, das am Anfang jeder neuen Verbindung ausgeführt wird:
/etc/sshrc
:
System-weites Kommando; Rechte: 0755$HOME/.ssh/rc
:
Benutzer-spezifisches Kommando; Rechte: 0700 bzw. 0755
Bei der spezifischen LRZ-Installation gelten teilweise andere Pfade.
Syntax von
$HOME/.shosts
und $HOME/.rhosts
Die Benutzer-spezifische Datei $HOME/.rhosts
legt bei den
r-Kommandos auf einem Remote-Rechner fest, von welchem Rechner/Login aus
man sich auf den Remote-Rechner ohne Paßwort einloggen kann.
Diese Datei wird auch von SSH berücksichtigt.
$HOME/.shosts
hat die gleiche Funktion und Syntax, wird
jedoch nur von SSH ausgewertet.
Beide Dateien bestehen aus Zeilen folgender Form
HOST LOGIN
mit folgender Bedeutung: Wenn man auf dem lokalen Rechner
HOST
unter der Kennung
LOGIN
arbeitet, kann man sich auf dem
Remote-Rechner unter der entsprechenden Kennung ohne Paßwort
einloggen.
Leider sind bei diesen Dateien keine Leer-, Kommentar- und Fortsetzungs-Zeilen erlaubt.
Außerdem muß man bei HOST
genau denjenigen
Namen angeben, unter dem der lokale Rechner beim Remote-Rechner bekannt
ist. Dabei kann HOST
manchmal auch eine
IP-Adresse sein.
Wie findet man aber nun den richtigen Wert für
HOST
heraus? Am einfachsten ist folgendes
Vorgehen: Man loggt sich einmal mit SSH auf dem Remote-Rechner ein und
gibt dann das Kommando who
. In den meisten Fällen steht in
der Ausgabe, von welchem Rechner aus man sich eingeloggt hat; bei einigen
UNIX-Varianten muß man dafür zusätzlich bei who
noch eine
Option angeben, die Plattform-spezifisch ist. Eine ähnliche Information
erhält man oft mit dem Kommando finger
.
Angenommen der lokale Rechner heißt `foo
', befindet sich in
der Internet-Domain `bar.com
' und hat die IP-Adresse
`130.233.195.3
'. Dann gibt es bei der Ausgabe von
who
folgende Fälle:
foo
:
Der lokale Rechner ist unter seinem Kurznamen auf dem Remote-Rechner bekannt.
==> Man muß `foo
' fürHOST
angeben.foo.bar.com
bzw.foo.bar.c
:
Der lokale Rechner ist unter seinem vollen Domain-Namen auf dem Remote-Rechner bekannt; im 2. Fall gibtwho
nur nicht den ganzen Namen aus.
==> Man muß `foo.bar.com
' angeben.130.233.195.3
:
Der lokale Rechner ist unter keinem Namen auf dem Remote-Rechner bekannt und taucht deshalb nur mit seiner IP-Adresse auf.
==> Man muß `130.233.195.3
' angeben.baz
:
Der lokale Rechner ist unter einem anderen Kurznamen auf dem Remote-Rechner bekannt.
==> Man muß `baz
' angeben.baz.bar.com
bzw.baz.bar.c
:
Der lokale Rechner ist unter einem anderen Namen bekannt, der um die Domain ergänzt wird; im 2. Fall gibtwho
nur nicht den ganzen Namen aus. ==> Man muß `baz.bar.com
' angeben.
Eine weitere Schwierigkeit ergibt sich dadurch, daß auf dem Remote-Rechner die Namens-Auflösung meistens mit Hilfe des Domain-Name-Service (DNS) erfolgt. Immer wenn der DNS nicht funktioniert, taucht auf dem Remote-Rechner der lokale Rechner nicht mehr mit seinem Namen sondern plötzlich mit seiner IP-Adresse auf.
Am einfachsten ist es i.a., wenn man in $HOME/.rhosts
bzw. $HOME/.shosts
für den Rechner foo
(siehe
oben) gleich mehrere Zeilen einträgt:
foo LOGIN foo.bar.com LOGIN 130.233.195.3 LOGIN
Zur Sicherheit sollte man auf allen Remote-Rechnern die Dateien
$HOME/.rhosts
bzw. $HOME/.shosts
regelmäßig
(d.h. alle 2 - 6 Monate; am besten jeweils bei der regelmäßigen Änderung
des Paßworts) überprüfen, ob sie noch aktuell sind. Dabei sollten
besonders die inzwischen überflüssigen Einträge gelöscht werden.
Syntax von
$HOME/.ssh/known_hosts
Diese Datei enthält eine Liste der bekannten Host-Public-Keys von
Remote-Rechnern und wird i.a. automatisch von ssh
ergänzt.
In dieser Datei werden leere Zeilen und Zeilen, die mit
`#
' beginnen, als Kommentar betrachtet und deshalb
ignoriert.
Die einzelnen Einträge bestehen aus ASCII-Feldern, die durch eine
Blank-Folge getrennt sind. Da eines dieser Felder aus einem Public-Key
besteht, werden die Zeilen sehr lang; Fortsetzungs-Zeilen sind leider
nicht möglich. Manche Editoren verkraften nicht derartig lange Zeilen;
man muß dann für diesen Ausnahmefall auf einen anderen Editor ausweichen
(z.B. emacs
).
Das erste Feld besteht aus einer Namensliste (Namen durch Komma getrennt), die festlegt, für welchen Rechner der Eintrag gilt. Dabei ist es üblich, den Kurz-Namen des Rechners, seinen vollen Domain-Namen und seine IP-Adresse anzugeben:
foo,foo.bar.com,130.233.195.3
Achtung: Zwischen den einzelnen Namen darf kein Blank vorkommen.
Hinsichtlich der genauen Syntax siehe die man
-Page von
sshd
.
Syntax von
$HOME/.ssh/authorized_keys
Diese Datei enthält eine Liste der bekannten Benutzer-Public-Keys.
Dabei werden leere Zeilen und Zeilen, die mit `#
' beginnen,
als Kommentar betrachtet und deshalb ignoriert.
Eine einfache Form dieser Datei erhält man, indem man einfach einen Benutzer-Public-Key hinten anhängt:
cat identity.pub >> authorized_keys
Zusätzlich ist aber bei jedem Eintrag noch ein optionales Options-Feld
möglich, dessen genaue Syntax in der man
-Page von
sshd
beschrieben wird.
Häufiger auftretende Probleme
Im folgenden werden Probleme (und deren Lösung) beschrieben, die bei der Benutzung von SSH häufiger auftreten. Wird ein konkretes Problem hier nicht behandelt, hilft möglicherweise die SSH-FAQ (Frequently Asked Questions) weiter.
Meldung `Host
key not found
...'
ssh
/ slogin
/ scp
melden sich
mit folgender Frage:
Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)?
Diese Frage wird dann gestellt, wenn der Remote-Rechner keinen Eintrag in der System-weiten oder Benutzer-spezifischen Tabelle der bekannten Host-Public-Keys besitzt. Mögliche Ursachen:
- Man besucht den Rechner zum ersten mal und weder die/der Systemverwalter(in) noch die/der Benutzer(in) haben den Host-Public-Key eingetragen.
- Man hat den Host-Public-Key aus Versehen oder mit Absicht aus den Tabellen entfernt.
- Die Auflösung des Rechner-Namens hat sich geändert bzw. funktioniert im Augenblick nicht und der Remote-Rechner erscheint deshalb lokal plötzlich unter einem anderen Namen.
Im Normalfall kann man einfach mit `yes
' antworten.
ssh
macht dann weiter und trägt außerdem den Host-Key in die
Benutzer-spezifische Liste $HOME/.ssh/known_hosts
ein; beim
nächsten Mal ist dann dadurch der Remote-Rechner bekannt und die Frage
unterbleibt.
ssh
verlangt immer ein Paßwort
Manchmal verlangt ssh
bzw. scp
ein Paßwort,
obwohl der lokale Rechner am Remote-Rechner in $HOME/.shosts
bzw. $HOME/.rhosts
eingetragen ist. Dies kann mehrere
Ursachen haben:
- Die Dateien
$HOME/.shosts
und/oder$HOME/.rhosts
bzw. die Directories, in denen sich diese Dateien befinden, haben zu großzügige UNIX-Rechte. In diesem Fall werden diese Dateien aus Sicherheitsgürnden vonssh
ignoriert.
Zur Behebung müssen die Rechte restriktiver gesetzt werden:chmod go-w $HOME $HOME/.rhosts $HOME/.shosts
- Der entsprechende Eintrag in
$HOME/.shosts
bzw.$HOME/.rhosts
ist falsch und wird deshalb nicht als zutreffend erkannt. Der gleiche Effekt tritt auf, wenn sich auf dem Remote-Rechner die Auflösung des Rechner-Namens geändert hat bzw. im Augenblick nicht funktioniert und dadurch der lokale Rechner auf dem Remote-Rechner plötzlich unter einem anderen Namen erscheint.
Zur Behebung siehe den Abschnitt über die Syntax dieser Dateien. - Der SSH-Server des Remote-Rechners ist so konfiguriert, daß er
diese Dateien ignoriert.
Zur Behebung muß man sich an die/den Remote-Systemverwalter(in) wenden. - Man (bzw.
scp
intern) verwendet am lokalen Rechner einssh
-Programm, das keine Set-UID-root
-Berechtigung hat. Dadurch kann sich der lokale Rechner nicht ausreichend ausweisen und die Dateien sind auf dem Remote-Rechner wertlos.
Zur Behebung muß man einssh
-Programm mit Set-UID-root
-Berechtigung verwenden. Am LRZ z.B. gibt es einssh
-Programm in/client/bin
und in/usr/local/bin
; aber nur/usr/local/bin/ssh
ist Set-UID-root
. In diesem Fall reicht eine entsprechende Umstellung des Such-Pfades$PATH
aus.
Findet man lokal keine Set-UID-root
-ssh
, muß man sich an die/den lokale(n) Systemverwalter(in) wenden. - Auf dem Remote-Rechner liegt
$HOME
unter AFS mit sehr restriktiven AFS-Rechten und auf dem lokalen Rechner gibt es kein AFS oder man hat kein AFS-Token oder das lokalessh
-Programm unterstützt kein AFS. In diesem Fall kann der Remote-SSH-Server die Dateien nicht lesen (der SSH-Server hat nicht die entsprechenden AFS-Rechte).
Zur Behebung hat man nur die Möglichkeit, die Dateien weltweit lesbar zu machen. Es empfiehlt sich dabei folgendes Vorgehen, durch das man nur die erforderliche Datei lesbar macht, die restlichen Dateien von$HOME
aber geschützt bleiben:cd $HOME mkdir pub fs setacl . system:anyuser l fs setacl pub system:anyuser read mv .rhosts pub ln -s pub/.rhosts
$HOME/.shosts
muß man analog verfahren.
Achtung: Bei AFS erben neu angelegte Sub-Directories die Rechte vom Eltern-Directory. Wenn man also z.B. in$HOME
ein Directory neu erzeugt, sollte man sich überlegen, ob dieses Directory auch das Recht `system:anyuser l
' erhalten soll und bei Bedarf die Access-Control-List (ACL) mit dem Kommando `fs setacl ...
' anpassen.
Will man nicht, daß andere Benutzer diese Dateien lesen und$HOME
aulisten können, muß man weiterhin die Unbequemlichkeit einer Paßwort-Eingabe in Kauf nehmen.
Bei der Suche nach der konkreten Ursache ist die
ssh
-Option `-v
' sehr hilfreich;
ssh
sagt dann genau, was und warum es etwas tut.
Meldung `HOST IDENTIFICATION HAS CHANGED
...'
Beim Verbindungsaufbau geben ssh
/ slogin
/
scp
folgende Warnung aus:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the host key has just been changed. Please contact your system administrator. Add correct host key in KNWON_HOSTS to get rid of this message. Agent forwarding is disabled to avoid attacks by corrupted servers. X11 forwarding is disabled to avoid attacks by corrupted servers. Are you sure you want to continue connecting (yes/no)?
Dafür kann es mehrere Gründe geben:
- Man wird gerade von einem Hacker angegriffen.
- Auf dem Remote-Rechner wurde der Host-Key geändert (ein neuer Key generiert oder auf einen alten Key zurückgesetzt).
- Auf dem lokalen Rechner wurde der Eintrag für den Remote-Rechner in den Tabellen der bekannten Host-Public-Keys geändert.
Erfahrungsgemäß handelt es sich in den meisten Fällen glücklicherweise
nicht um den Angriff eines Hackers. Da man aber nicht
feststellen kann, um welchen der Fälle es sich handelt, wendet man sich
am besten an die/den Systemverwalter(in) (wie es in der Warnung geraten
wird).
Beim LRZ werden z.B. Änderungen von Host-Keys über Kurzmitteilungen
angekündigt.
Abweichungen der spezifischen LRZ-Installation vom Default
Bei der spezifischen LRZ-Installation der SSH wurde aus organisatorischen Gründen von den Voreinstellungen abgewichen:
- Durch einen Patch kann der SSH-Client zusätzlich evtl. vorhandene Zugriffsausweise von AFS und Kerberos V4 zum Server übertragen.
- Die Konfigurations- und Hilfs-Dateien für den SSH-Server befinden
sich normalerweise in
/etc
.
Beim LRZ werden diese Dateien im Directory/usr/local/etc/ssh
(SSH_DIR
) abgelegt. Dadurch können auch die Rechte für dieses dedizierte Directory auf 0711 reduziert werden. - Folgende für den Benutzer relevanten Pfade weichen vom Default ab:
Default LRZ-Installation /etc/shosts.equiv
SSH_DIR/shosts.equiv
/etc/ssh_config
SSH_DIR/config
/etc/ssh_host_key.pub
SSH_DIR/host_key.pub
/etc/ssh_known_hosts
SSH_DIR/known_hosts
/etc/sshrc
SSH_DIR/sshrc
- Folgende Dateien werden in der angegebenen Reihenfolge als
Benutzer-spezifische Listen von berechtigten Rechnern ausgewertet:
$HOME/.ssh/shosts
(LRZ-Erweiterung)$HOME/.shosts
$HOME/.rhosts
Weitere Informationen zu SSH
Weitere Informationen zu SSH kann man bei folgenden Stellen finden:
- Home-Page
- Quellen (Mirror des DFN-CERT)
- Unterstützung für AFS und Kerberos V4 (Patch zu SSH)
- Kurzeinführung in Englisch: Getting started
- SSH-FAQ (Frequently Asked Questions)
- News-Group
comp.security.ssh