Secure Shell (SSH) – Halte deine Verbindungen sicher

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiNetzwerk ‹ Secure Shell (SSH) – Halte deine Verbindungen sicher


SSH.

Es war einmal eine Zeit, als die Fernsteuerung von Computern übers das Netz mit Hilfe des Protokolls Telnet realisiert wurde. Telnet bot jedoch keine Verschlüsselung und das Mitschneiden von Passwörtern war eine triviale Angelegenheit. Um dies zu ändern, entwickelte der Finne Tatu Ylönen in den frühen 90er-Jahre des vorigen Jahrhunderts eine Programmsuite – bestehend aus Server und Client sowie mehreren Hilfsprogrammen – die er SSH (Secure Shell) nannte. Das SSH-Protokoll, bot eine komplett verschlüsselte Alternative zu Telnet und wurde ein voller Erfolg.

Als Tatu Ylönen später die Firma ssh.com gründete und die Version 2 von SSH nur noch unter einer kommerziellen Lizenz erhältlich war, nahmen sich die Entwickler des Betriebssystems OpenBSD des Quellcodes von Version 1 an, forkten daraus das Projekt OpenSSH und entwickeln es bis Heute weiter. Die OpenSSH-Suite wurde quasi fester Bestandteil aller Distributionen.

Auch wenn inzwischen Erweiterungen für Telnet existieren, die SSL-Verschlüsselung oder Kerberos-Authentifizierung bieten, wurde der Telnet-Server fast komplett von OpenSSH verdrängt und ist nicht mehr verbreitet.

Installation

Grundvoraussetzung für die Benutzung von SSH besteht darin, dass lokal ein SSH-Client-Programm installiert sein muss und auf dem entfernten Host, auf den zugegriffen werden soll, ein SSH-Server – also der Daemon sshd – läuft.

Die Pakete Debianpackage.png openssh-server und Debianpackage.png openssh-client installieren wahlweise den Server bzw. das Client-Programm.

Server-Konfiguration härten

Ratsam ist es, so wenige Logins wie möglich zu erlauben. Als relativ sichere Konfiguration (Pfad: /etc/ssh/sshd_config) gilt:

  • Direkten root-Zugang verbieten, da sonst nur noch das Passwort erraten werden muss.
    PermitRootLogin no
    Wenn nun jemand root-Zugang will, braucht er zwei Logins.
  • Es ist auch möglich, nur Benutzern bestimmter Gruppen das Einloggen zu erlauben.
    AllowGroups ssh # Es darf sich nur die Gruppe ssh anmelden.
  • oder auch nur bestimmte Benutzer
    AllowUsers benutzername # Es darf sich nur der Benutzer benutzername anmelden.
  • Das Anmelden mit Schlüssel erzwingen (Anstelle mittels Passwort).
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    Das Anmelden mit Schlüssel zu erzwingen, schränkt aber auch ein. So ist ein Login nur noch von Clients möglich, wo der private Schlüssel-Teil vorhanden ist. Sollten Sie deshalb die Anmeldung mittels Passwort beibehalten wollen, so verbieten Sie leere Passwörter (Das ist in Debian das Standardverhalten).
    PermitEmptyPasswords no # Leere Passwörter? NEIN! NIEMALS!
  • Sinnvoll kann es auch sein, den Standardport für SSH (22 TCP) zu verlegen, unter anderem um absichtliche Verbindungen zu erkennen. Ein Nachteil hierbei ist jedoch, dass der eigene Port evtl. von Firewalls geblockt wird, die außerhalb des eigenen Einflussbereichs liegen.
    Port 2332

Darüber ist der SSH-Server mit der TCP-Wrapper Bibliothek kompiliert und wertet daher die Dateien hosts.allow und hosts.deny aus. Diese Dateien steuern, welche Clients mit dem Host überhaupt eine Verbindung aufbauen dürfen.

Wurde die Konfiguration geändert, muss diese neu eingelesen werden:

service ssh reload

Authentifizierung mit Schlüssel

Empfohlen wird das Anmelden mittels Schlüssel, was hier erklärt wird.

Für die Authentifizierung mittels Schlüssel muss dieser natürlich erst mal erstellt werden. Das Programm ssh-keygen erzeugt einen Schlüssel. Dieser befindet sich dann im Verzeichnis $HOME/.ssh.

  • privater Schüssel-Teil: $HOME/.ssh/id_{rsa,dsa}
  • öffentlicher Schlüssel-Teil: $HOME/.ssh/id_{rsa,dsa}.pub

Der öffentliche Schlüssel-Teil muss auf jedem entfernten Host hinterlegt werden, auf den man darüber Zugriff haben will:

ssh-keygen
ssh-copy-id {Hostname|IP-Adresse}

Dies erstellt den Schlüssel und kopiert den öffentlichen Schlüssel-Teil ins entfernte Benutzer-Verzeichnis (Dieser wird dort zu $HOME/.ssh/authorized_keys hinzugefügt). Nun verlangt SSH nicht mehr das entfernte Linux Benutzer-Passwort, sondern die Passphrase des Schlüssel. Gibt man bei Erzeugung des Schlüssel eine leere Passphrase an, kann man sich auch ohne anmelden.

Mit Debianpackage.png seahorse gibt es auch eine GUI, mit der Sie dies alles erledigen können.

Hinweis.png Hinweis: Sollte ssh-copy-id auf ihrem System nicht vorhanden sein, geht alternativ auch folgender Befehl:
cat ~/.ssh/*.pub | ssh [-p Port] [Benutzername@]{Hostname|IP-Adresse} 'cat>>.ssh/authorized_keys'


Verbindung aufbauen

SSH-Verbindungen werden mit dem Befehl ssh aufgebaut. Die Syntax dazu ist folgende:

ssh [-p Port] [Benutzername@]{Hostname|IP-Adresse}

Aus Bequemlichkeit kann man sich für Verbindungen Lesezeichen, sog. Alias anlegen. Dazu passt man die $HOME/.ssh/config auf dem lokalen System an und hinterlegt dort die IP-Adresse bzw. Domain und Port des Server sowie den entfernten Benutzernamen, sollte dieser vom lokalen abweichen. Nutzt man für mehrere entfernte Hosts unterschiedliche Schlüssel, passt man hier auch den Pfad zur Schlüssel-Datei an.

Beispiel:

Host alias
 	HostName host.example.org
 	Port 2332 # Nur nötig falls der Port geändert wurde.
 
	User wilfried # Nur nötig falls Ihr Benutzername abweicht.

	# Pfad zum Schlüssel anpassen.
	IdentityFile ~/.ssh/id_rsa.wilfried@host.example.org

	# Dynamische IP nicht prüfen.
	CheckHostIP no 

Nun können Sie sich mittels ssh alias verbinden. (Es kann mehrere solcher Host-Abschnitte, mit unterschiedlichem Aliasnamen in der Konfiguration geben.)

Hinweis.png Hinweis: Um bei Authentifizierung mittels Schlüssel die erneute Eingabe der Passphrase bei Verbindungsproblemen zu umgehen, ist es möglich, dies vom ssh-agent erledigen zu lassen.


Weitere Details finden Sie in den Handbuchseiten zu ssh, ssh_config, und ssh-agent.

Eine graphische Anwendung kann auch über SSH auf einem anderen Rechner übertragen werden. Dies wird im Wiki X-Anwendungen_mit_SSH_forwarden behandelt.

SFTP

Viele Dateimanager wie bspw. Gnome's Nautilus unterstützt das SSH-Protokoll (SFTP). Für einen Datentransfer über SSH an einem entfernten Rechner, benutzt man eine Pfadangabe (Adresse bzw. URI) der Form:

sftp://[User@]{Hostname|IP}[:Port]/

Alternativ können statt des Authority-Teil auch die Aliasnamen aus der Datei ~/.ssh/config verwendet werden.

Siehe auch