Linux – SSH Verbindung einfach unter einem Namen speichern
Du hast vielleicht auch schon einmal die Erfahrung gemacht, dass du von z.B. deinem Linux-Laptop auf deinen Raspberry Pi eine ssh-Verbindung herstellen wolltest, aber dir genau dann die IP-Adresse nicht mehr eingefallen ist. Hast du jetzt sogar mehrere Geräte, die du über eine ssh-Verbindung verwalten bzw. monitoren willst, wäre es doch viel praktischer, wenn du dir einfach nur einen Namen merken müsstest um dich z.B. per ssh raspberry mit deinem Raspberry verbinden zu können.
DarkWolfCave.de
SSH und die config Datei
Das ganze Geheimnis dahinter ist eine Konfigurationsdatei, die im Home Verzeichnis des jeweiligen Users unter ~/.ssh angelegt wird.
Diese nennt sich – Achtung Überraschung – “config” 😛
Folgende Befehle greifen darauf zu: ssh / scp / sftp / rsync
Hiermit kannst du dann eine ssh-Verbindung unter einem Namen speichern – also ein Alias anlegen – und musst dir nicht mehr die IP-Adresse merken.
Voraussetzungen
Du benötigst hierfür ein Linux System mit installiertem OpenSSH client.
Bei den meisten aktuellen Linux-Systemen, und auch bei einem Raspberry Pi OS, ist dies bereits installiert.
Wie schon erwähnt, wird die config im .ssh Verzeichnis erstellt. Dieses wiederum wird automatisch angelegt, sobald zum ersten Mal eine ssh-Verbindung von dem System ausgeführt wurde.
Sollte bei dir das Verzeichnis nicht vorhanden sein, kann es auch manuell erstellt werden. Bisher war das bei meinen Systemen allerdings noch nie notwendig.
Aber natürlich verrate ich dir auch wie du es selbst erstellen kannst.
Mit folgendem Befehl legst du das .ssh Verzeichnis unter deinem User an und vergibst die entsprechenden Rechte (chmod 700 – (rwx—— ) )mkdir -p ~/.ssh && chmod 700 ~/.ssh
Standardmäßig ist die ‘config‘ Datei nicht vorhanden und du kannst sie einfach mit vi / nano oder einfach mit touch erstellen. Hierbei werden dann auch die Berechtigungen direkt passend gesetzt:
touch ~/.ssh/config && chmod 600 ~/.ssh/config
Struktur der config Datei um deiner SSH-Verbindung einen Namen / Alias zu geben
Die config Datei muss nach folgender Struktur erstellt werden.
Host hostname(ErsterHost)
SSH_OPTION value
SSH_OPTION value
usw.
Host hostname(ZweiterHost)
SSH_OPTION value
SSH_OPTION value
usw.
Im Prinzip ein recht simpler Aufbau. Name des Ziels und diverse Optionen für die SSH Verbindung.
Weiterhin kann man Befehle einrücken, dies dient bei vielen Einträgen der besseren Lesbarkeit, ist aber nicht notwendig.
Du kannst hier richtige “Szenarien” aufbauen, was vielleicht manchmal Sinn ergibt, aber teilweise irgendwie verwirrend wirkt.
Daher beschränke ich mich hier auf die ganz simple Variante nach dem Schema:
Name, IP, User und evtl. noch die Angabe zum genutzten RSA-Key.
Für jede erforderliche IP / Host dann auch in einem eigenen Block.
Dennoch werde ich weiter unten ein Beispiel zeigen, wie man es “professioneller” aufbauen kann – falls es dich interessiert 😉
Ein Beispiel für das config File einer SSH Verbindung
Wie du sicher schon weißt, kannst du dich über das Terminal per ssh z.B. mit ssh tester@testing.dwc.de -p 1234
verbinden.
Hier wäre der user=tester, der host=testing.dwc.de und der Port=1234
Damit du dich einfach mit ssh test
verbinden kannst, müsstest du für dieses Beispiel folgendes in die config (~/.ssh/config) Datei schreiben:
Host test HostName testing.dwc.de User tester Port 1234
Und wenn du auch noch eine weitere SSH Verbindung nutzen möchtest, könntest du in derselben Datei z.B. folgendes ergänzen, damit es auch mit ssh ich-bin-drin funktionieren würde. Nur um das nochmal richtig zu stellen, es handelt sich hier lediglich um Beispiele. Du müsstest natürlich die richtigen Daten für dich eintragen. Also eine IP die es gibt und einen User der dort eingerichtet ist.
Host ich-bin-drin HostName 192.168.1.111 User tester Port 1234
Beispiel mit einem RSA Key für eine SSH Verbindung und einem Namen / Alias
Du nutzt einen RSA Key und möchtest dich einfach mit ssh raspberry mit diesem verbinden?!
Auch dies ist kein Problem und kann in das config File eingetragen werden.
Nehmen wir an du nutzt als User ‘pi’ und hast einen RSA Key der in deinem Home (~) Verzeichnis liegt und teste-mich heißt.
Dann müsstest du diese Angaben in das File schreiben – natürlich die IP-Adresse entsprechend anpassen.
Host raspberry User pi Port 22 HostName 192.168.5.10 IdentityFile ~/teste-mich
Das versprochene professionellere (kompliziertere…) Beispiel
Komplizierter geht es immer. Also werfen wir einen Blick auf ein entsprechendes Beispiel. Auch dieses würde sich in der config (~/.ssh/config) befinden.
Host test HostName 192.168.1.10 User tester Port 1234 IdentityFile ~/.ssh/teste-mich Host testZwei HostName 192.168.5.50 Host testDrei HostName 192.168.6.60 Host *dwc user dwc Host * !testDrei LogLevel INFO Host * User root Compression yes
Erklärung:
- Wenn du
ssh test
eingibst, dann wird das config File von oben nach unten sowie Zeile für Zeile verarbeitet. Dabei wird jede Bedingung geprüft ob diese zutrifft.
Zuerst werden die Optionen bei ‘host test’ verarbeitet, da dies ja für den genannten Host zutrifft.
Nun werden die weiteren Einträge geprüft und als nächster Match die Option für das LogLevel bei Host * !testDrei verarbeitet, da diese Option für ALLE Host außer ‘testDrei’ gelten sollen ( das*
steht für alle und das!
negiert das Nachfolgende).
Als letzter Match kommt dann der Eintrag Host * zur Verarbeitung. Hier ist zu beachten, dass NUR die Option Compression yes verarbeitet wird, da der User bereits bei host test angegeben wurde und NICHT überschrieben wird. - Zusammengefasst heißt das jetzt, dass bei der Eingabe von
ssh test
folgende Optionen benutzt werden:
HostName 192.168.1.10 User tester Port 1234 IdentityFile ~/.ssh/teste-mich LogLevel INFO Compression yes
- Merke: Es werden keine Werte überschrieben die zuvor bereits gesetzt wurden (von oben nach unten…)
- Host *dwc – alle Optionen werden für Hosts, die ‘dwc’ enthalten genutzt
- Host * !testDrei – Die Optionen gelten für alle Hosts – außer für ‘testDrei’
- Host * – gilt für alle Hosts
Wie werden SSH Config File Optionen gelesen bzw. überschrieben
Der ssh client verarbeitet die Optionen wie folgt:
- Optionen die direkt in der command line eingegeben werden
- Optionen die in der ~/.ssh/config definiert sind und NICHT in der command line angegeben wurden
- Optionen die in der /etc/ssh/ssh_config definiert sind und NICHT in der command line angegeben wurden und NICHT in der ~/.ssh/config bereits definiert wurden
Das bedeutet, wenn du eine Option aus der config Datei temporär überschreiben möchtest, dann musst du diese Option lediglich beim Aufruf mit angeben. Bei dem Beispiel für den Host test
möchten wir jetzt den User auf root ändern. Dazu würdest du dann folgendes in das Terminal schreiben:
ssh -o "User=root" test
Kopieren mit SCP und den Daten aus der Config
Du kannst die eingetragenen Daten auch für den Befehl SCP benutzen um damit gesichert Dateien oder Verzeichnisse zu kopieren.
Dies ist fast genauso simpel wie eine ssh-Verbindung zu starten:scp /Pfad/lokal/Datei @NAME_HOST:/PFAD/ZUM/ZIEL
scp test.txt @raspberry:~/test/
Das oben genannte Beispiel kopiert also von lokal (z.B. Laptop) die Datei test.txt auf den “entfernten” Server, der unter dem Host-Namen “raspberry” in der Config eingetragen wurde. Solltest du in dieser auch ein IdentityFile (RSA-Key) eingetragen haben, musst du auch kein Passwort eingeben und es wird direkt kopiert.
Noch ein kleines Beispiel um einen ganzen Ordner (und Unterordner) zu kopieren:
Hier wird das -r
mit angegeben, um zu signalisieren, dass wir einen Ordner kopieren wollen.
scp -r /Pfad/lokalerOrdner @NAME_HOST:/PFAD/ZUM/ZIEL
scp -r python_tutorials @raspberry:~/tutorials