Hier eine kurze Anleitung, wie du SSH Befehle ohne Passwort ausführen kannst. Das ganze funktioniert über ein Schlüsselpaar. Dies ist hilfreich, wenn man sich oft auf dieselben Linux Systeme verbinden muss, oder wenn ein Linux System via Script befehle auf einem anderen ausführen soll. Außerdem ist bei vielen Linux Distributionen der Root Log-in via Passwort deaktiviert, sodass man sich nur mit dieser Methode direkt als Root anmelden kann.
Was ist überhaupt SSH?
Secure Shell oder SSH ist ein Netzwerkprotokoll, mit dem du dich auf sichere weise mit einem entfernten System verbinden kannst, um z.B. Kommandos auf der Kommandozeile auszuführen.
Rsh, rlogin, rcp, telnet, etc. waren vorgänger von SSH. Secure Shell hat ihnen gegenüber einige Vorteile:
- Mehr Sicherheit bei der Authentifizierung
- Leichter Zugriff auf fremde Systeme
- Verschlüsselte Session
- Spoofing wird erschwert
Grundwissen zu Schlüsselpaaren
Normalerweise musst du, wenn du eine SSH Verbindung herstellst, dich am Zielsystem mit Benutzername und Kennwort authentifizieren. Damit du die SSH Verbindung herstellen kannst, ohne das Passwort Eingeben zu müssen, musst du auf deinem Quellsystem (z.B. deinem Windows Computer) SSH Schlüssel erstellen. Dieser Schlüssel besteht aus 2 Teilen, einen öffentlichen Schlüssel (Public-Key) und einem privaten Schlüssel (Private-Key).
Der private Schlüssel wird niemals weitergegeben. Der öffentliche dient der Authentifizierung an anderen Systemen.
Quelle und Ziel
Zuerst muss man sich klarwerden, welches System die Quelle, und welches System das Ziel ist.
Quellsystem | Zielsystem |
Baut die SSH Verbindung zum Zielsystem auf | Führ die Befehle/das Skript aus |
Public-Key auf Zielsystem kopieren | Public-Key in authorized_keys importieren |
Dadurch, dass du den Public-Key in die authorized_keys kopiert, weis dein System, dass derjenige mit diesem Key vertrauenswürdig ist und eine Verbindung herstellen darf.
Falls du übrigens 2 Kabel verbinden willst, ohne Löten zu müssen, schau mal hier 👈 rein 😉
SSH Key Authentication einrichten
Quellsystem
Erstellen der Schlüssel
Zuerst melden wir uns via SSH oder wie auch immer am System an. Wichtig ist das wir uns als der Benutzer anmelden, der später die SSH Verbindung aufbauen ausführen soll. In meinem Fall baue ich die SSH Verbindung als Benutzer Root auf.
Folgende Befehle erstellen das Schlüsselpaar mit RSA oder DSA Verschlüsselung. Du kannst auch beide Verfahren kombinieren für eine noch stärkere Verschlüsselung. Das ist aber i.d.R. nicht erforderlich.
ssh-keygen -t rsa
ssh-keygen -t dsa
Falls du diesen Befehl auf einer Homematic CCU2 oder CCU2 ausführen willst, musst du vorher das Dateisystem mit mount -o rw,remount / beschreibbar machen.
Die Kommandos kannst du wie folgt quittieren:
Enter file in which to save the key (Home-Verzeichnis des Users) | Kann mit Enter bestätigt werden, hier werden die Keys gespeichert. |
Enter Passphrase (empty for no passphrase) | Die Passphrase (das Kennwort für den Schlüssel), die du eingeben musst, sollte zwar sicher, aber nicht übertrieben lang sein. Du musst sie nämlich eventuell noch ein paar mal eingeben. Hinweis zum Kennwort für das Schlüsselpaar: Wenn die schlüssel mit einem Kennwort versehen ist, kann ein Dritter die Schlüssel ohne das Kennwort nicht verwenden. Dieses Kennwort hat keinen Einfluss auf die Sicherheit oder Verschlüsselung der SSH Verbindung. |
Enter same passphrase again | Das vorher eingegebene Kennwort nochmals bestätigen. |
Your identification has been saved in (Home-Verzeichnis des Users) | Hier wird die Identifikation gespeichert. |
Your Public Key has been saved in (Home-Verzeichnis des Users) | In diesem Pfad wurde der Public Key gespeichert. |
The Key Fingerprint is | Der Fingerprint des Keys wird in der Konsole angezeigt. |
Nun werden für das Schlüsselpaar Dateien erzeugt:
Public Key | Private Key | |
RSA | ~/.ssh/id_rsa.pub | ~/.ssh/id_rsa |
DSA | ~/.ssh/id_dsa.pub | ~/.ssh/id_dsa |
Ich mache in der Anleitung mit rsa Key weiter. Falls du DSA Keys erstellt hast, tausche bei den entsprechenden Befehlen den Dateinamen aus.
Kopieren des Public-Key auf das Zielsystem
Nun müssen wir die *.pub Dateien auf den Zielhost kopieren und dor an ~/.ssh/authorized_keys anhängen. Des weiteren benötigen wir den Hostnamen oder die IP-Adresse des Zielsystems, da wird die Datei ja schließlich dorthin kopieren müssen. Ich verwende hierfür den Befehl scp und kopiere den Public-Key in das tmp Verzeichnis des Zielsystems:
scp ~/.ssh/id_rsa.pub pi@rbpi-ccuio:/tmp
Zielsystem
Erstellen der Schlüssel auf dem Zielsystem
Wichtig ist das wir uns am Zielsystem als der Benutzer anmelden, der später die Befehle ausführen soll und kann! Ich möchte die Befehle später als Benutzer pi auf meinem Raspberry pi ausführen.
Zuerst erstellen wir hier ebenfalls ein Schlüsselpaar mit dem gleichen Befehl wie beim Quellsystem
ssh-keygen -t rsa
Importieren des Schlüssels des Zielsystems
Nun müssen wir den vorher kopierten Public-Key des Quellsystems in die authorized_keys des Zielsystems importieren.
cat /tmp/id_rsa.pub >>~/.ssh/authorized_keys
Nun wird der kopierte Public-Key sicherheitshalber via rm /tmp/id_rsa.pub vom Zielsystem gelöscht, um Missbrauch vorzubeugen.
Testen der Authentifizierung
Das Testen der Verbindung ist ebenfalls wichtig, um den Host in die Liste der Bekannten Hosts aufzunehmen. Dies muss bei jeder Verbindung mit einem neuen System einmalig manuell mit “yes” bestätigt werden. Danach sollte diese Meldung nie wieder erscheinen. Demzufolge führen wir unten stehenden Befehl natürlich auf dem Quellsystem aus…
ssh pi@rbpi-ccuio pwd
Zum endgültigen testen verwende ich gerne den Befehl ssh um mich auf dem Zielsystem anzumelden, und führe den Befehl pwd auf dem Zielsystem aus. Wenn das home Verzeichnis des Benutzers des Zielsystems angezeigt wird, ist der test erfolgreich.
ssh pi@rbpi-ccuio pwd
Fertig!
Vielen Dank fürs Lesen! Wie immer hoffe ich, der Artikel hat euch gefallen und ich konnte euch weiterhelfen.
Ihr wisst ja, wenn euch der Artikel gefallen hat, auf keinen Fall teilen oder gefällt mir drücken und bei Fragen oder Anregungen kein Kommentar schreiben 😉
Hey Simon,
das ist wie immer von Dir sehr schön beschrieben.
Das Ganze kann noch gekrönt werden, indem man (zumindest beim MAC) im Quellsystem und dort im Ordner .ssh eine Datei mit Namen “config” mit folgendem Inhalt erstellt:
Host nxpm
User pi
Port 22
Hostname 192.168.144.11
IdentityFile ~/.ssh/id_rsa
Dann kann man sich mit dem Zielsystem verbinden, indem man einfach nur das hier eintippt:
ssh nxpm
Und schon ist man eingeloggt.
Viele Grüße und weiter so
Tom