SSH Konfiguration: Unterschied zwischen den Versionen
(→Troubleshooting) |
Robi (Diskussion | Beiträge) K (Kategorie) |
||
Zeile 254: | Zeile 254: | ||
::: [http://www.lrz-muenchen.de/services/security/ssh/ssh-4.html Ernst Bötsch: Secure Shell (SSH) für Benutzer] | ::: [http://www.lrz-muenchen.de/services/security/ssh/ssh-4.html Ernst Bötsch: Secure Shell (SSH) für Benutzer] | ||
::: [http://www.jfranken.de/homepages/johannes/vortraege/ssh1_inhalt.de.html Johannes Franken: OpenSSH Grundlagen] | ::: [http://www.jfranken.de/homepages/johannes/vortraege/ssh1_inhalt.de.html Johannes Franken: OpenSSH Grundlagen] | ||
+ | |||
+ | |||
+ | ----- | ||
+ | [[Kategorie:Systemverwaltung]] | ||
+ | [[Category:Security]] |
Version vom 30. Oktober 2008, 21:07 Uhr
Inhaltsverzeichnis
SSH KONFIGURATION
Wie funktioniert SSH?
1...................
- Auf dem Server-Rechner (remote) wird ein Host-Key-Paar (RSA) generiert.
- - ein Verschlüsselungscode (public_key)
- - ein Entschlüsselungscode (private_key)
- Der 'public_key' (öffentlich pubizierter Schlüssel) dient als Erkennung
- für die Klients.
- Zusätzlich erzeugt der laufende Server-Prozeß ein Server-Key-Paar, daß nur im
- Memory des Remote-Rechners gehalten und periodisch erneuert wird. Es dient der
- Verschlüsselung.
2...................
- Der lokale SSH-Client wendet sich an den SSH-Server auf dem Remote-Rechner,
- um eine Verbindung aufzunehmen.
- Der Server schickt dem Client daraufhin sowohl seinen 'public_key' als auch den
- periodisch erzeugten öffentlichen Serverschlüssel.
3...................
- Der Klient überprüft nun den erhaltenen 'public key' mit der Liste in 'known_hosts'.
- Normalerweise wird er sofort nach seinem Passwort gefragt.
4...................
- Existiert aber in 'known_hosts' noch kein zugehöriger Eintrag, so wird dieser hinzu-
- gefügt. Dies erfordert eine ausdrücklicher Bestätigung durch den Benutzer.
- Also wird der 'public_key' nur bei der ersten Kontaktaufname übermittelt, danach ist
- er dem Klient bekannt.
- Ändert er sich, wird der Klient die Kontaktaufname verweigern und wieder neu nachfragen.
5...................
- Ab dann erzeugt der Client eine Zufallszahl und verschlüsselt diese unter Zuhilfename
- der beiden übergebenen öffentlichen Schlüssel (Hostkey und Serverkey).
- Diese Zufallszahl dient im weiteren Verlauf als der aktuelle Sitzungsschlüssel.
- Da sich bei jeder Änderung des bereits verschlüsselt übermittelten Serverkeys auch der
- aktuelle Sitzungsschlüsse ändert, entsteht eine Art 'doppelte Verschlüsselung'.
6...................
- Nun erst übergibt der Client Userid und Passwort und der Server startet eine Login-Shell
- bzw. führt das gewünschte Kommando aus.
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:
1...................
- Autentifikation entsprechend den r-Kommandos;
- Unsicher und per Default deaktiviert.
2...................
- Wie Punkt1; zusätzliche RSA-Authentifikation.
3...................
- RSA-Authentifikation; dazu ist auf dem Remote-Rechner ein Eintrag in
- ~/.ssh/authorized_keys erforderlich.
4...................
- Durch Paßwort-Abfrage.
Dateien Serverseitig
- /etc/ssh/sshd_config
- Der SSHD wird über diese Datei konfiguriert.
- Meist sind fast alle Zeilen auskommentiert,
- dies sollte die praktischen Bedürfnisse auch abdecken.
- Konfiguration
- /etc/hosts.allow & deny
- In aktuellen Implementierungen des Ssh-Daemons ist die Auswertung der Dateien
- /etc/hosts.allow und /etc/hosts.deny zumeist fest verdrahtet:
tux> strings /usr/sbin/sshd | egrep 'hosts.allow|hosts.deny' hosts_allow_table hosts_deny_table /etc/hosts.allow /etc/hosts.deny
# Zugang zur Secure Shell (hosts.allow) sshd: LOCAL
# oder genauer: sshd: 192...(Klient-DNS)/255.255.255.0 *.Domäne: ALLOW
# Alles pauschal verbieten (hosts.deny) ALL: ALL
- /etc/nologin
- Wenn sie existiert, verweigert sshd jeden Einlogvorgang außer dem von root
- (sofern root-Eingänge in der Konfigurationsdatei erlaubt waren).
- Der Inhalt der Datei wird dem Client übermittelt.
Dateien Clientseitig
- /etc/ssh/ssh_known_hosts & ~/.ssh/known_hosts
- enthalten die Public-Keys aller bekannten Rechner.
- Die globale Datei wird vom Systemverwalter administriert,
- die userbezogene wird automatisch angelegt und erweitert.
- enthält die folgenden Felder:
- Hostnamen Bits Exponent Modulus Kommentar
- Hostnamen ist eine durch Kommas getrennte Liste von Namen
- (* und ? dürfen benutzt werden).
- Wird mit dem vollständigen Hostnamen des Rechners verglichen, der sich anmelden will.
- Bits, Exponent und Modulus werden direkt den Host-Schlüsseln entnommen,
- die in den Dateien /etc/ssh/ssh_host_*_key.pub gespeichert sind.
- Das optionale Kommentarfeld wird nicht ausgewertet.
- /etc/ssh/ssh.config
- Client-Einstellungen.
Schlüssel - passwortfreie Anmeldung
Der Befehl 'ssh-keygen' erzeugt und verwaltet die Schlüssel für SSH-Verbindungen.
Normaluser können sich damit einen Schlüssel erzeugen, der Systemverwalter kann auch den
Host-Schlüssel damit anlegen. Diese Schlüssel sind nicht zwingend für den Gebrauch von SSH erforderlich, bestimmte Server verlangen ihn aber.
Es stehen zwei Schlüsseltypen ('RSA' und 'DSA') zur Verfügung, erforderlich ist aber nur
einer von beiden.
Man wird bei der Erstellung nach einem Passwort gefragt, muß aber keines angeben.
Es ist also möglich, über diese Schlüsselpaare eine Authentifizierung ohne Passwort zu steuern.
> ssh-keygen -t rsa Password: ... Generating public/private rsa key pair. ... in ~/.ssh/id_dra.pub
> ssh-keygen -t dsa Password: ... Generating public/private dsa key pair. ... in ~/.ssh/id_dsa.pub
Der Inhalt mindestens einer der beiden Dateien 'id_rsa.pub' und 'id_dsa.pub' müssen auf dem
Remote-Rechner in die Datei $HOME/.ssh/authorized_keys eingetragen werden. Verzeichnis als
auch die Datei dürfen nur für den User lesbar und schreibbar sein.
Die geht manuell oder mit:
> ssh-copy-id -i /home/tux/.ssh/id_rsa.pub 192...(Server-DNS) password: ...
In der Serverkonfiguration kann die Passwort-Authentifikation ausgeschaltet werden:
/etc/ssh/sshd_config:
# Change to no to disable tunnelled clear text passwords PasswordAuthentication no
Und gegebenenfalls:
/etc/ssh/sshd_config:
- PermitRootLogin yes/no
Der Server muß neu gestartet werden:
> /etc/init.d/ssh restart
Ein Login erfolgt dann mit:
> ssh -l user ServerDNS bzw: > ssh user@ServerDNS
Die Datei /etc/ssh/sshd_config:
- BatchMode yes/no
- Die Abfrage nach dem Passwort oder der Passphrase wird unterbunden,
- somit lassen sich z.B. Kommandos in Shellscripts ausführen.
- Compression yes/no
- Schaltet die Komprimierung der zu übertragenden Daten ein oder aus.
- FallBackToRsh yes/no
- Scheitert der Verbindungsaufbau zum Server (zB. weil dieser nicht aktiv ist),
- kann eine Verbindung über rsh versucht werden. Default: 'no'
- HostKey Dateiname
- Spezifiziert die Datei, in der der Host-Schlüssel des Servers abgelegt ist.
- Normalerweise ist das die Datei /etc/ssh/ssh_host_key.
- Diese Datei darf nicht für alle Welt lesbar sein,
- ansonsten verweigert sich sshd die Datei zu verwenden!
- IgnoreRhosts yes/no
- Sollen die Dateien ~/.rhosts und ~/.shosts ignoriert werden?
- KeyRegenerationInterval Zeit
- Die Anzahl der Sekunden, nach denen der Server-Schlüssel neu erstellt werden soll.
- Standardmäßig sollte hier 3600 (eine Stunde) stehen.
- Steht hier eine 0, so wird der Schlüssel niemals neu erstellt.
- PermitRootLogin yes/no
- Erlaubt, daß sich der Systemverwalter über ssh einloggen kann.
- PasswordAuthentication yes/no
- Soll eine Abfrage des Passwortes durchgeführt werden?
- Steht der Wert auf »no«, ist ein Anmelden auf einem entfernten Rechner nur möglich,
- wenn der eigene öffentliche Schlüssel dort bekannt ist.
- Port n
- Die Angabe auf welchem Port sshd laufen soll. Normalerweise ist es Port 22.
- RhostsAuthentication yes/no
- Ob bei der Authentifizierung die Dateien rhosts und /etc/hosts.equiv ausreichen,
- soll auf »no« bleiben.
- RhostsRSAAuthentication yes/no
- Erlaubt die Benutzung von rhosts und /etc/hosts.equiv,
- allerdings nur wenn die RSA-HOST-Authentifizierung erfolgreich war.
- Default »yes«.
- RSAAuthentication yes/no
- Authentifizierung mittels RSA-Verschlüsselung.
- Steht der Wert auf »yes«, sollte die Datei »~/.ssh/identity«
- oder ein Authentifizierungsagent existieren.
- StrictHostKeyChecking yes/no
- Ein »yes« verschärft die Sicherheit, indem das Anmelden nur auf Rechnern gestattet wird,
- die in den Datenbanken »/etc/known_hosts« bzw. »~/.ssh/known_hosts« enthalten sind.
- Steht hier »no« werden neu besuchte Rechner automatisch der privaten Datei hinzugefügt.
Troubleshooting
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- Schonmal auf den Server (mit gleicher IP) zugegriffen ?
- (Schlüssel hat sich geändert)
> ssh-keygen -R hostname /home/tux/.ssh/known_hosts updated. Original contents retained as /home/tux/.ssh/known_hosts.old
Falls es nicht geht:
- Inhalt von ~/.ssh/known_hosts komplett löschen oder entsprechend editieren!
Wenn weiter unten die Zeile kommt:
'DSA host key for 141.44.198.20 has changed and you have requested strict checking.'
- versuche es mit Änderung in:
/etc/ssh/sshd_config
StrictHostKeyChecking: yes/no/ask (def: ask)
Immer noch Probleme?
Ist der ssh-Zugriff überhaupt möglich?
- Ein beliebtes Problem ist '... key_exchange ... connection closed by foreign host'.
- Das liegt dann meist daran, daß die Reverse-Auflösung der eigenen IP-Adresse nicht
- mit dem Namen für den eigenen Host übereinstimmt.
- Auf der anderen Seite in /etc/hosts.deny die ALL: PARANOID Zeile auskommentieren.
- Oder DNS in Ordnung bringen!
Passwort wird verlangt.
- Meistens ein Problem der Permissions auf der eigenen und/oder der anderen Seite:
- Das Verzeichnis .ssh/ und die die Datei .ssh/authorized_keys darf nur für den Eigentümer,
- der auch der "angepeilte" Nutzer sein muß, schreibbar sein!
- ssh -v ... hilft, diese Art von Problemen zu diagnostizieren.
Die SSH2 verlangt die Keys in ~/.ssh/authorized_keys2.
- Die SSH2 auf Debian/GNU-Linux ist mögl. gepatcht und sucht die wie gehabt in:
- ~/.ssh/authorized_keys, U.u. muß aber trotzdem auf SuSE-Systemen eben diese 2 angehängt werden.