ssh und scp
Willemers Informatik-Ecke
Es gibt boshafte Menschen, die Leitungen abhören. Dabei fällt ihnen bei telnet, ftp und anderen Protokollen das eine oder andere Passwort in die Hände. Und anstatt sich einen eigenen Linux-Rechner zu kaufen, brechen sie in Ihre Systeme ein, nur um endlich einmal mit Linux arbeiten zu dürfen. Damit diese Menschen zur Ehrlichkeit gezwungen werden, wurde mit SSH (Secure Shell) die Möglichkeit geschaffen, den Datenverkehr über das Netz zu verschlüsseln.

Der Client ssh bietet die Möglichkeit, eine Sitzung auf einer fernen Maschine auszuführen. Der Client scp kann Dateien von einem Rechner zum anderen kopieren.

Login per ssh

Das Kommando ssh erwartet als Parameter den Namen oder die IP-Adresse des Zielrechners. Des weiteren können Sie mit einem @-Zeichen getrennt, den gewünschten Benutzer auf dem Zielrechner angeben. Geben Sie keinen Benutzernamen vor dem @ ein, wird der gleiche Benutzer verwendet wie auf dem Client.

$ ssh arnold@192.168.109.199
arnold@192.168.109.199's password:
Nun geben Sie das Passwort ein. Sie könen es nicht sehen (auch keine Sterne oder Punkte für jeden Buchstaben), sondern erst nach Eingabe von Return sehen, ob der Zielrechner mit dem Passwort zufrieden ist.

Anschließend erhalten Sie eine normale Shell, vorausgesetzt, der SSH-Server wurde auf der Zielmaschine installiert.

Sicherheit bei ssh

Der Client ssh ist auf jeder Linux-Maschine installiert. Sie können damit eine Sitzung auf einem fremden Rechner eröffnen.

Konfiguration

Die Clients werden in der Datei ssh_config konfiguriert, die sich im Verzeichnis /etc oder in /etc/ssh befindet.

Windows

Für MS Windows gibt es das freie Programm PUTTY, das einen ssh-Client und einen scp beinhaltet. Sie finden es unter:

http://www.chiark.greenend.org.uk/~sgtatham/putty

scp: Sicheres Kopieren über das Netz

Das Kopieren erfolgt mit dem Befehl scp. Die Argumente lehnen sich an den Standardbefehl cp für das lokale Kopieren an. Erst wird die Quelle dann das Ziel genannt. Neu ist, dass ein anderer Rechner angegeben werden kann. Dieser wird mit einem Doppelpunkt abgeschlossen. Zusätzlich kann mit ein Benutzer angegeben werden, der mit @ abgeschlossen wird.

scp [Benutzer@[Hostname:]]Quelldateien [Hostname:]Ziel

Um die Datei /etc/passwd auf dem eigenen Rechner in das Heimatverzeichnis des Rechners idefix zu kopieren, verwendet man den folgenden Befehl:

scp /etc/passwd idefix:
Will man die Datei /etc/passwd auf dem Rechner idefix in das Verzeichnis Dokumente auf dem lokalen Rechner zu kopieren, verwendet man den folgenden Befehl:
scp idefix:/etc/passwd Dokumente
Sollen alle Dokumente des Benutzers maria auf dem Rechner idefix in dessen Heimatverzeichnis Dokumente in dem eigenen Verzeichnis Dokumente/maria abgelegt werden, würde man folgenden Befehl verwenden:
scp idefix:Dokumente/* Dokumente/maria

Das Programm zeigt beim Kopiervorgang einen Verlaufsbalken an. Dieses unterhaltsame Feature können Sie allerdings auch mit der Option -q abschalten.

gaston> scp silver:/etc/passwd .
passwd   100% |*****************************|  2071    00:00
gaston>

Der SSH-Server

Ein Linux-Rechner hat zwar von Haus aus immer einen SSH-Client (ssh und scp), allerdings ist der SSH-Server nicht standardmäßig installiert. Dazu muss das Paket openssh-server unter Administratorrechten installiert werden. Unter Debian, Ubuntu, Linux Mint und einigen anderen Distributionen lautet der Befehl:

# apt-get install openssh-server

Ubuntu-User müssen eventuell den Befehl sudo davor stellen.

Nach der Installation des Servers können alle Benutzer des Systems von außen angesprochen werden, sofern die Benutzer laut /etc/passwd einen Login besitzen. In der Konfigurationsdatei können durch AllowUsers und DenyUsers explizit einzelne Benutzer erlaubt oder ausgeschlossen werden.

Konfiguration

Der Serverprozess heißt sshd, seine Konfigurationsdatei sshd_config und befindet sich im Verzeichnis /etc/ssh. Darin befinden sich mehrere Variablen. Die wichtigsten sind:

Authentifizierung per Schlüssel

Die Authentifizierung per Passwort hat vor allem den Nachteil, dass das Passwort jedes Mal eingetippt werden muss. Ein Skript hat damit seine Probleme. Die Alternative besteht darin, einen Schlüssel zu verwenden. SSH verwendet dazu RSA.

RSA ist ein asymmetrisches Kryptoverfahren, auf dem die Schlüsselverwaltung von SSH beruht. Es ist nach den Entwicklern Rivest, Shamir und Adleman benannt (Rivest, Shamir, Adleman: A Method for Optaining Digital Signatures and Public Key Cryptosystems. Communication of the ACM, Feb. 1978.)

Auf dem Zielrechner, der ohne Passwort erreicht werden soll, muss der öffentliche Schlüssel des Benutzers auf der Clientmaschine im Verzeichnis seiner authorisierten Schlüssel eingetragen werden.

Vorbereitung: Anlegen eines Schlüsselpaares

Das Programm ssh-keygen erzeugt ein Schlüsselpaar für den angemeldeten Benutzer auf der Maschine, auf der der Befehl aufgerufen wird.

Im Beispiel soll der Rechner gaston per ssh oder scp auf den Rechner silver zugreifen können. Mit dem Kommando ssh-keygen wird auf gaston ein Schlüssel erzeugt:

gaston> ssh-keygen
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/arnold/.ssh/id_rsa)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/arnold/.ssh/id_rsa
Your public key has been saved in /home/arnold/.ssh/id_rsa.pub
The key fingerprint is:
3b:a2:62:ed:02:ef:30:79:a1:4b:0b:b6:35:21:d8:f1 arnold@gaston
The key fingerprint is:
SHA256:ei9nEpQRwRC2ptEmRMfHyAYSyxpajJQNjSoi5dvnndQ arnold@gaston
The key's randomart image is:
+---[RSA 2048]----+
| oOo++=*oo       |
|.*.* +=.=        |
|+o= o.=. o       |
|*+.  *  o        |
|*  o.  .S.       |
|  . . ..o E      |
|     o.o.o       |
|      ..=.o      |
|         =.      |
+----[SHA256]-----+
gaston>

Es entstehen im Verzeichnis .ssh zwei Dateien. Der eine ist der private Schlüssel und heißt id_rsa. Die andere Datei heißt id_rsa.pub ist öffentlich.

Der öffentliche Schlüssel wird auf dem Server hinterlegt. Der private Schlüssel dient als Kontrolle und liegt bereits an der richtigen Stelle.

Öffentlichen Schlüssel kopieren

Wie aus den Meldungen zu entnehmen ist, befinden sich die Dateien mit den Informationen im Unterverzeichnis .ssh des Benutzerverzeichnisses. Die Datei id_rsa.pub enthält eine Zeile mit dem öffentlichen Schlüssel. In dieser Datei befindet sich nur die eine Zeile, die auf arnold@gaston endet. Diese Zeile wird auf dem Zielrechner an die Datei .ssh/authorized_keys angehängt.

Die nächsten Arbeiten loggen wir uns auf silver ein, beispielsweise mit ssh von gaston aus.

gaston> ssh silver
arnold@debian's password: 

silver> cd
silver> scp gaston:.ssh/id_rsa.pub gaston.pub
silver> cat gaston.pub >> .ssh/authorized_keys
silver> rm gaston.pub

Wenn die Konfigurationsdateien der ssh-Komponenten nicht verändert wurden, kann sich nun der Benutzer arnold von gaston aus auf dem Rechner silver anmelden, ohne ein Passwort einzugeben:

gaston> ssh silver
Last login: Mon Feb 25 00:04:06 2002 from mail.willemer.edu
Have a lot of fun...
silver>

Mit diesen Werten ist das Einloggen ohne Passwort nur erlaubt, wenn eine Schlüsselübergabe stattgefunden hat. Alle rhosts-Varianten der Authentifizierung sind ausgeschlossen. Ein direktes Einloggen mit der Eingabe eines Passworts ist aber erlaubt. Sobald die RSA-Keys eingerichtet sind, können Sie die PasswordAuthentication wieder auf no schalten, um ein direktes Einloggen zu vermeiden.

Schlüsselverteilung mit ssh-copy-id

Wenn auf dem Computer nur ein Schlüssel eingerichtet ist, können Sie sich das Kopieren und Anhängen an die existierenden bekannten Schlüssel vereinfachen, indem Sie das Skript ssh-copy-id, das standardmäßig unter Linux vorinstalliert ist, aufrufen.

client $ ssh-copy-id user@server

Wenn es mehr als einen Schlüssel gibt, kann der gewünschte mit der Option -i explizit benannt werden.

client $ ssh-copy-id -i ~/.ssh/meinkey user@server

Tunnelbau: Andere Protokolle sichern

Mit ssh können Sie Netzverbindungen anderer TCP/IP-Dienste sichern. Die Basis ist eine gewöhnliche Sitzung mit ssh, der man allerdings die Ports zuordnet. Dazu gibt es die Option -L. Als weiterer Parameter wird ein Tripel aus eigener Portnummer, dem Benutzer auf dem Zielrechner und dem Zielport angefügt. Als Beispiel wird eine Sitzung aufgesetzt, die vom Rechner silver zu gaston führt. Der Zielport ist 110, der für POP3 verwendet wird:

silver>  ssh gaston  -L 2002:gaston:110
Last login: Sun Jul  7 11:32:27 2002 from silver.willemer.edu
Have a lot of fun...
gaston>

Sobald diese Sitzung angemeldet ist, kann auf dem Rechner silver ein Mailclient aufgerufen werden. In der Konfiguration des Mailprogramms wird als Server localhost, also silver, angegeben. Der Port wird von 110 auf 2002 umgestellt. Sobald Sie nun Ihre Mail abrufen, wird der Mailclient lokal auf silver den Port 2002 anfragen. Der ist aber durch die ssh-Sitzung über eine gesicherte Verbindung mit dem Port 110 von gaston verbunden. Dieser Tunnel bleibt so lange bestehen, wie die ssh-Sitzung besteht. Nach dem Ausloggen kann auch auf den Tunnel nicht mehr zugegriffen werden.

Durch Firewall und Proxy

Da die Verbindung durch SSH getunnelt wird, kann sie überall da aufgebaut werden, wo eine solche Verbindung erlaubt ist. Damit hat die Freigabe von SSH zur Folge, dass die Berechtigten auch beinahe jede andere Verbindung zwischen den Rechnern aufbauen können, für die SSH gestattet ist. Eine Firewall wie auch ein Proxy können die Verbindung zwar als SSH identifizieren, sie können aber nicht erkennen, welcher Protokolltyp darin getunnelt wird.