Die Secure Shell (SSH) ist eine bewährte Möglichkeit, auf entfernte Computer zuzugreifen. Man kann konfigurieren, ob der Zugriff mit name/passwort, und/oder mit einem public/private Schlüsselpaar erfolgen darf.

Server Konfiguration

Auf Linux-Computern ist der SSH Server häufig bereits installiert (Überprüfen mit sudo systemctl status ssh) Wenn nicht, kann man ihn mit sudo apt install openssh-server installieren.

Die Konfiguration findet sich in /etc/ssh/sshd_config und allfälligen zusätzlichen Dateien in /etc/ssh/sshd_config.d/

Jede Zeile dort ist eine Einstellung. Zeilen, die mit # anfangen, sind inaktiv, respektive auf den Standardwert gesetzt, der hinter dem # steht.

Von den vielen Einstellungen dort, sind in der Praxis nur wenige relevant:

    port 22

Wenn Ihr Computer direkt übers Internet erreichbar ist (was normalerweise aber eh nicht der Fall sein sollte), empfiehlt es sich, da eine andere Nummer einzutragen, zum Beispiel 36542 (Sie können jede Zahl zwischen 1025 und 65534 nehmen, aber einige sind schon für bestimmte Sienste reserviert). Der Grund ist, dass sehr viele automatisierte Attacken auf Port 22 erfolgen, und wenn der Robot merkt, dass an Port 22 tatsächlich Anfragen entgegengenommen werden, wird er seine Bemühungen verstärken, dort durchzukommen. Wenn Sie den SSH server gut konfiguriert haben, wird ihm das zwar nicht gelingen, aber die Abwehr der Angriffe wird Ihren Computer Rechenzeit und Ihren Internet-Anschluss Bandbreite kosten.

    PermitRootLogin no

Es empfiehlt sich, keinen Fernzugriff als Systemadministrator zu erlauben. Wenn Sie soch etwas administrieren müssen, können Sie sich als ein User mit sudo-Rechten einloggen und dann via sudo Admin-Rechte erlangen. Das ist eine zusätzliche Hürde.

    PasswordAuthentication yes

Wir benötigen das, um den Zugriff per Schlüsselpaar einzurichten. Danach sollteman es auf “no” setzen, um nur noch die Identifikation über Schlüssel zuzulassen

Alles Andere können Sie auf standard lassen. Schauen Sie aber noch ins Verzeichnis /etc/ssh/sshd_config.d/ und prüfen Sie auch die Dateien dort, wenn vorhanden. Die können nämlich die Einstellungen in der Hauptkonfiguration überschreiben.

Falls Sie etwas geändert haben, geben Sie anschliessend ein: sudo systemctl restart ssh, um die neuen Einstellungen zu laden.

Client Konfiguration

Der client braucht normalerweise für einfache Verbindungen keine Konfiguration. Das Programm ssh ist auf Linux und Mac computern bereits installiert, auf Windows 11 ebenfalls. Bei älteren Windows-Versionen können Sie sich mit putty.exe behelfen.

Die Verbindung stellen Sie einfach mit ssh servernameher. Der SSH Client wird dann versuchen, Sie auf dem Server mit demselben Benutzernamen einzuloggen, denn Sie auf dem clienht-Computer haben. Wenn das nicht der Fall ist, können Sie mit ssh user@servernamefestlegen, als welcher Benutzer Sie sich einloggen wollen.

Nach eingabe des Passworts sind Sie auf einem Terminal des entfernten Computers eingeloggt, als wären Sie direkt vcor dem Bildschirm. Allerdings ohne grafische Oberfläche.

Schlüssel erstellen

Wenn die Verbindung auf diese Weise gekungen ist, sollten Sie als nächstes ein Schlüsselpaar erstellen. Dadurch wird die Verbindung sicherer und komfortabler.

    ssh-keygen -o -a 100 -t ed25519

Geben Sie am besten einen eindeutigen Dateinamen ein. Ich wähle hier ~/.ssh/serverkey als Bsispiel. Die Passphrase kann die Sicherheit erhöhen, aber Sie müssen sie dann jedesmal eingeben, Sie können auch einfach die Eingabetaste drücken, dann wird der Schlüssel ohne passphrase erstellt.

Sie erhalten zwei Dateien, in meinem Beispiel serverkey und serverkey.pub, beide im (versteckten) Verzeichnis .ssh in Ihrem Benutzerverzeichnis.

Nun müssen wir dem Server bekannt geben, dass dies der richtige Schlüssel ist. Dazu geben wir ihmd en öffentlichen Schöüssel (Der private Schlüssel sollte den Computer niemals verlassen, auf dem er erstellt wurde).

Auch diese Bekanntgabe kann man automatisieren:

    ssh-copy-id -i ~/.ssh/serverkey.pub user@servername

Sie werden noch einmal nach Ihrem Passwort gefragt, und dann wird mit diesem Befehl der öffentliche Schlüssel in der Datei .ssh/authorized_keys des genanten users gespeichert.

Testen Sie, ob es geklappt hat:

    ssh -i ~/.ssh/serverkey servername

Das Login sollte jetzt ohne Passwortabfrage erfolgen (Ausser, wenn Sie eine Passphrase für den Schlüssel angegeben haben, dann müssen Sie diese eingeben).

Wenn alles geklappt hat, können Sie auf dem Server die Datei /etc/ssh/sshd_config nochmal öffnen und die Zeile PasswordAuthenticationauf “no” stellen. Danach die neue Einstellung mit systemctl restart ssh aktivieren.

Von nun an können Sie nur moch mit dem eben erstellten Schlüssel auf den Server zugreifen. Falls es sich um einen Server handelt, auf den Sie keinen physischem Zugriff haben, weil es zum Beispiel ein gemieteter virtueller Server ist, dann tun Sie gut daran, einen zweiten Benutzer mit Adminrechten zu erstellen, und auch diesem ein SSH-Schlüsselpaar zuzuteolen, damit Sie nicht ausgesperrt bleiben, wenn Sie als Hauptbenutzer etwas falsch machen.

Konfigurationsdatei

Der ssh-Befehl hat voele mögliche Optionen, die sie zum Beispiel mit man ssh oder auf der entsprechenden Website nachlesen können. Da es schwierig ist, sich das zu merken, falls Sie mehrere Optionen benötigen oder merhere Server eibgerichtet haben, können Sie Ihre Einstellungen in einer Konfigurationsdatei eintragen. Erstellen Sie dazu die Datei ~/.ssh/config.

Dort können Sie für jeden Server einen eigenen Eintrag erstellen. Beispiel:

Host mycloud
        HostName cloud.myfamily.somewhere
        User snoopy
        Port 28652
        # Solr
        LocalForward 48983 127.0.0.1:8983
        # Couchdb 
        LocalForward 45984 127.0.0.1:5984
        # Syncthing
        LocalForward 48384 127.0.0.1:8384
        # Minio
        LocalForward 49000 127.0.0.1:9000
        IdentityFile /home/icke/.ssh/cloudkey

Host homeserver
        HostName 192.168.0.63
        User icke
        IdentityFile /home/icke/.ssh/homeserver

Dann können Sie fortan die Verbindung mit einem simplen ssh mycloud herstellen. Und das gilt auch für andere Dienste, die ssh indirekt nutzen. Beispielsweise können Sie mit rsync -av --delete mycloud:/home/pi /srv/backup/ ein Verzeichnis Ihres Heimservers via SSH sichern. Denken Sie aber daran, dass Sie auf dem entfernten Server immer mit den Rechten des Users unterwegs sind, als der Sie sich eingeloggt haben.Sie werden also z.B. so nicht aufs /root Verzeichnis zugreifen können.