SSH

Definition von SSH aus der englischsprachigen Wikipedia (sinngemäße Übersetzung):

Im Computerwesen ist SSH bzw. "Secure Shell" ein Netzwerkprotokoll mit dazugehürigen Standards, welches die sichere Verbindung zwischen einen lokalen und einem entfernten (remote) Computer ermöglicht. Dabei wird Kryptographie mit einem öffentlichen Schlüssel (public key) angewendet, um den entfernten Computer zu authentifizieren bzw. um optional dem entfernten Computer zu gestatten, den Nutzer zu authentifizieren. SSH gewährleistet Vertraulichkeit und Integrität der zwischen den beiden Rechnern ausgetauschten Daten, indem Verschlüsselung und MACs (message authentication codes) zur Verwendung kommen. Typisches Anwendungsfeld für SSH ist die Anmeldung an einen entfernten (remote) Rechner und die Ausführung von Befehlen auf diesem, unterstützt wird aber auch das Tunneln und Weiterleiten beliebiger TCP-Ports und von X11-Verbindungen. Es können auch Dateien mit den assozierten Protokollen SFTP oder SCP übertragen werden. In der Grundeinstellung lauscht der SSH-Server auf TCP-Port 22.

Eine deutschsprachige Erstinformation über SSH findet man auf den Seiten der deutschsprachigen Wikipedia.

Verwendung guter Sicherheitsprotokolle mit SSH

Es ist nicht sicher Root-Anmeldung via SSH zu erlauben. Es gilt, Anmeldungen als Root nicht zum Standard zu machen, denn Debian sollte sicher sein, nicht unsicher. Ebenso sollen User nicht die Möglichkeit haben, über zehn Minuten einen wortlistenbasierten Passwort Angriff (brute force attack) auf den SSH-Login durchzuführen. Deshalb ist es sinnvoll, das Zeitfenster der Anmeldung sowie die Anzahl möglicher Versuche einzuschränken.

Um dein SSH sicherer zu machen, verwende deinen bevorzugten Texteditor, um folgende Datei zu editieren:

/etc/ssh/sshd_config

Wir suchen und änder bedenkliche Einstellungen.

Folgende Einstellungen müssen geändert werden:

Port <gewünschter Port>: Dieser Eintrag muss auf den Port verweisen, der auf dem Router zur Weiterleitung freigeschaltet ist. Wenn du nicht weißt, was das heißt, solltest Du den Einsatz von SSH zur Remote Steuerung noch einmal überdenken. Debian setzt den Port 22 als Standard. Es ist jedoch ratsam, einen Port ausserhalb des Standardscanbereichs zu verwenden, deswegen verwenden wir z.B. Port 5874:

Port 5874

ListenAddress <IP des Rechners oder der Netzwerkschnittstelle>: Da der Port vom Router weitergeleitet wird, muss der Rechner eine statische IP-Adresse benutzen, sofern Du keinen lokalen DNS Server verwendest. Aber wenn Du etwas so Kompliziertes wie SSH unter Benutzung eines lokalen DNS Servers aufsetzen willst und diese Anweisungen benötigst, machst Du möglicherweise einen großen Fehler. Wir verwenden eine statische IP für das Beispiel:

ListenAddress 192.168.2.134

Protokoll 2 ist bereits Grundeinstellung bei Debian, aber man sollte sicher sein und daher nochmals überprüfen.

LoginGraceTime <Zeitrahmen des Anmeldevorgangs>: Die erlaubte Zeitspanne beträgt als Standard absurde 600 Sekunden. Da man für gewöhnlich keine zehn Minuten benötigt, um Benutzernamen und Passwort einzugeben, stellen wir eine etwas vernünftigere Zeitspanne ein:

LoginGraceTime 45

Nun hat man 45 Sekunden Zeit zum Anmelden, und Cracker haben keine zehn Minuten bei jedem Versuch, das Passwort zu cracken.

PermitRootLogin <yes>: Warum Debian hier Erlaubnis zur Anmeldung als Root erteilt, ist nicht nachvollziehbar. Wir korrigieren zu 'no':

PermitRootLogin no
StrictModes yes

MaxAuthTries <Anzahl der erlaubten Anmeldungsversuche>: Mehr als 3 oder 4 Versuche solltest Du nicht ermöglichen:

MaxAuthTries 2

Folgende Einstellungen müssen hinzugefügt werden, so sie nicht vorhanden sind:

AllowUsers: Benutzernamen, welchen der Zugriff via SSH erlaubt ist, getrennt durch Leerzeichen

AllowUsers <xxx>: Nur eingetragene Benutzer können den Zugang verwenden, und dies nur mit Benutzerrechten. Mit adduser sollte man einen User hinzufügen, der speziell zur Nutzung von SSH verwendet wird:

AllowUsers werauchimmer

PermitEmptyPasswords <xxx>: gib deinem Benutzer ein schönes langes Passwort, das man in einer Millionen Jahren nicht erraten kann. Der Benutzer sollte der einzige mit SSH Zugriff sein. Ist er einmal angemeldet, kann er mit su Root werden.:

PermitEmptyPasswords no

PasswordAuthentication <xxx>: natürlich muss hier 'yes' gesetzt werden. Es sei denn, man verwendet einen KeyLogin.

PasswordAuthentication yes [wenn man keine keys verwendet]

Schlussendlich:

/etc/init.d/ssh restart

Nun hast Du eine etwas sichere SSH-Konfiguration. Nicht vollkommen sicher, nur besser, vor allem wenn Du einen Benutzer hinzugefügt hast, der speziell zur Verwendung mit SSH dient.

X-Windows Programme über SSH-verschlüsselte lokale Netzwerkverbindungen verwenden

Ein Programm läuft auf einem Remote Computer, die Graphische Benutzeroberfläche (GUI) wird auf dem lokalen PC angezeigt.

Annahmen:
* sidux
* IP des lokalen PCs: 192.168.1.10/24 (nur X11-Bildausgabe des Programmes)
* IP des Remote PCs: 192.168.1.2/24 (hier läft das X11 Programm)

Konfiguration:

Auf dem remote PC wird die /etc/hosts.allow um folgende Zeile erweitert:

ssh sshd : 192.168.1.0/24 : ALLOW 
# e.g. erlaubt (allow) allen Adressen im lokalen Netzwerk 
#(local area network, LAN) den Zugriff über den ssh server

Öffne eine Konsole und benutze folgenden Befehl. Dies baut eine SSH Verbindung und X-Forwarding auf:

ssh -X 192.168.1.2
(das eigene SSH Passwort eingeben, wenn danach gefragt wird,
oder das Passwort zum SSH Key, wenn der eigene Public-Key zum
Remote Rechner geschickt und dort den User authorized_keys Dateien
hinzugefügt wurde)

Aufrufen des X-Programmes in der Shell, z.B. 'iceweasel':

ssh -X 192.168.1.2
(das eigene SSH Passwort eingeben, wenn danach gefragt wird,
oder das Passwort zum SSH Key, wenn der eigene Public-Key zum
Remote Rechner geschickt und dort den User authorized_keys Dateien
hinzugefügt wurde)
iceweasel

Remote Zugriff von einem Windows-PC unter Nutzung von SSH und X-Forwarding:

* Herunterladen und Brennen von Cygwin XLiveCD
* Die CD ins Laufwerk einlegen und auf den automatischen Start (autorun) warten
* Weiter (continue) klicken bis sich ein Shell Fenster öffnet.
* Folgenden Befehl eingeben:

ssh -X username@xxx.xxx.xxx.xxx

Beachte: xxx.xxx.xxx.xxx ist die IP des Linux Remote PCs oder seine URL (z.B. eines dyndns.org Accounts), und der Username ist natürlich der eines User Accounts der auf dem Remote Rechner existiert. Nach erfolgreichem Login kann man zum Beispiel 'kmail' starten und seine Mails abrufen.

Wichtig: hosts.allow muss einen Eintrag beinhalten, der auch Rechnern aus anderen Netzwerken den Zugriff erlaubt. Wenn man einen Router oder eine NAT-Firewall verwendet, muss Port 22 zum Linuxrechner weitergeleitet (portforwarding) sein.

SSH mit Konqueror

Konqueror hat ein Protokoll für grafische SSH Verbindungen, das fish:// Protokoll.

Wie's gemacht wird:
1) Ein Konqueror Fenster öffnen
2) In das Adressfeld: fish://username@ssh-server.com eingeben.

Beispiel 1: Ein Popup öffnet sich und fragt nach dem SSH Passwort, nun das Passwort eingeben und OK klicken:

fish://sidux1@my-home-server.dyndns.org

Beispiel 2: So wird nicht nach einem Passwort gefragt, man wird direkt verbunden.

fish://username:password@ssh-server.com

Die SSH Verbindung ist nun hergestellt. In diesem Konqueror Fenster kann man mit den Dateien auf dem SSH Server arbeiten, als wären es lokale Dateien.

SSHFS - auf einem entfernten Computer mounten

SSHFS ist eine einfache, schnelle und sichere Methode unter Verwendung von FUSE, um ein entferntes Dateisystem zu mounten. Auf Serverseite benötigt man ausschließlich einen laufenden ssh-daemon.

Auf Seite des Clients muss sshfs vermutlich erst installiert werden::

apt-get update && apt-get install sshfs

Das Mounten eines entfernten Dateisystems ist sehr einfach:

sshfs username@remote_hostname:directory local_mount_point

Wobei username den Nutzernamen am entfernten Host meint.

Wenn kein bestimmtes Verzeichnis angegeben wird, wird das Home-Verzeichnis des entfernten Nutzers eingebunden. Bitte beachten: Der Doppelpunkt : ist unbedingt gefordert, auch wenn kein Verzeichnis angegeben wird!

Nach dem Mounten verhält sich das entfernte Verzeichnis wie jedes andere lokale Dateisystem. Man kann nach Dateien suchen, diese lesen und ändern sowie Skripte ausführen wie auf einem lokalen Dateisystem.

Die Einbindung des entfernten Hosts wird mit folgendem Befehl gelöst:

fusermount -u local_mount_point

Bei regelmäßiger Nutzung von sshfs empfiehlt sich ein Eintrag in /etc/fstab:

sshfs#username@remote_hostname:directory local_mount_point fuse user,noauto 0 0

Dies ermöglicht jedem Nutzer der Gruppe fuse, das Dateisystem mit dem bekannten Befehl einzubinden:

mount /pfad/zum/mount/punkt

Mit dieser Zeile in /etc/fstab kann die Einbindung natürlich auch gelöst werden:

umount /pfad/zum/mount/punkt

Mit diesem Befehl prüft man, ob man Mitglied der Gruppe fuse ist:

cat /etc/group | grep fuse

Die Antwort sollte in etwa so aussehen:

fuse:x:117: <nutzername>

Falls der Nutzername (username) nicht gelistet ist, verwendet man als root den Befehl adduser:

adduser <nutzername> fuse

Jetzt sollte der gewünschte Nutzername gelistet und folgender Befehl ausführbar sein:

mount local_mount_point

und

umount local_mount_point
Page last revised 21/01/2007 1700 UTC