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