Automatischer SSH-Login
Für viele Anwendungsfälle wie zum Beispiel die Steuerung der Raspberry Pi durch openHAB wie in diesem Artikel beschrieben, ist ein automatischer SSH-Login erforderlich. Auch kann ein ständiger Login zu einem bestimmten Rechner somit deutlich erleichtert und beschleunigt werden.
Dazu ist zunächst zu wissen, dass SSH eine sogenannte PKI-Infrastruktur nutzt. Das bedeutet, dass jeder Client/Server/Gerät ein Schlüsselpaar besitzt, welches aus einem privaten sowie einem öffentlichen Schlüssel besteht. Mit dem Tool ssh-keygen und dessen folgenden Aufruf:
ssh-keygen -b 2048 -t rsa
erzeugen wir ein solches Schlüsselpaar mithilfe des RSA-Algorithmus in einer Länge von 2048 Bit. Ein Passwort kann wahlweise gesetzt werden, für unseren Anwendungsfall für die Steuerung mittels openHAB lassen wir dieses frei und bestätigen die Abfragen lediglich mit der Enter-Taste.
Nun wurden im Heimatverzeichnis (des Nutzers, der die Schlüssel erstellen lies) im Unterordner „.ssh“ zwei Dateien erstellt. Die Datei „id_rsa“ enthält den privaten Schlüssel und sollte gesichert und unter Verschluss gehalten werden. In der Datei „id_rsa.pub“ befindet sich der öffentliche Schlüssel. Diesen fügen wir später im Zielsystem, also dem Linuxsystem bei welchem wir uns automatisch anmelden wollen, als Schlüssel eines vertrauenswürdigen Kommunikationspartners ein.
Den öffentlichen Schlüssel verteilen wir nun auf dem Zielsystem:
ssh-copy-id IP_DES_ZIELSYSTEMS
Nun testen wir die Verbindung:
ssh IP_DES_ZIELSYSTEMS
Sollte dies die erste Verbindung zu diesem System sein, erfolgt die einmalige Abfrage, ob der öffentliche Schlüssel zu den „known-Hosts“ hinzugefügt werden soll. Zukünftig findet der Login unmittelbar und ohne Abfrage des Nutzerpasswortes statt.
Besonderheiten bei openHAB
Für die Verwendung von openHAB gibt es leider ein paar Besonderheiten zu beachten. Während der grundsätzlichen Installation von openHAB via apt-Repository wird der Systemnutzer „openhab“ mit dem Heimatverzeichnis „/var/lib/openhab“ eingerichtet. Bei jedem Neustart von openHAB jedoch wird ein Script ausgeführt, dass sämtliche Rechte innerhalb der openHAB-Verzeichnise neu setzt. Daher gehen wir wie folgt vor.
Angemeldet als Nutzer „root“ ändern wir zunächst den Nutzer „openhab“ in sofern, dass wir als diesen Nutzer eine Shell benutzen können. Dazu vergeben wir mit
passwd openhab
ein Passwort für den Nutzer und weisen ihm mit
chsh -s /bin/bash openhab
eine Bash-Shell zu.
Anschließend können wir mit
su openhab
in den Kontext des Nutzers openhab wechseln und mit seinen Rechten und seiner Umgebung auf der Shell arbeiten. Wir erstellen wie bereits oben beschrieben ein Schlüsselpaar mit
ssh-keygen -t rsa
und verschieben anschließend den neu generierten Ordner „.ssh“ an einen Ort, der nicht von der Neuverrechtung beim Start von openHAB betroffen ist:
mv ~/.ssh/ /scripts/
Der Ordner „/scripts“ wurde im Verlauf der Anleitung „OpenHAB – Installation“ angelegt. Falls nicht, erstellen wir diesen mit
mkdir /scripts
und übetragen die Besitzrechte an den Nutzer „openhab“ mit
chown openhab: /scripts/
In unseren Scripten, welche als „openhab“ ausgeführt werden, geben wir künftig bei einer SSH-Verbindung explizit den Ort unseres privaten Schlüssels an, beispielsweise:
ssh -i /scripts/.ssh/id_rsa root@IP_DES_ZIELSYSTEMS "/usr/local/bin/sispmctl -d $2 -q$3 $4"
Sollte es sich bei unserem Zielsystem, auf welchem OpenHAB sich anmelden soll, um einen Raspberry mit der Distribution Raspbian handeln, müssen wir zunächst auf diesem ein Passwort für den Nutzer „root“ vergeben. Dazu loggen wir uns direkt als Nutzer „pi“ auf dem entsprechenden Zielsystem an und vergeben das root-Passwort mittels
sudo passwd
Nach zweimaliger Eingabe wurde das Passwort gesetzt.
Zurück auf dem OpenHAB-Server „installieren“ wir nun unseren öffentlichen Schlüssel auf jedes Zielsystem, zu welchem wir uns mit unseren Scripten verbinden wollen. Dazu fügen wir unseren öffentlichen Schlüssel den autorisierten Schlüsseln auf dem Zielsystem hinzu:
ssh-copy-id -i scripts/.ssh/id_rsa root@IP_DES_ZIELSYSTEMS
Wir verlassen den Kontext des Nutzers „openhab“ mit
exit
und bewegen uns wieder als Nutzer „root“ auf der Kommandozeile.
Da sich openhab nun dummerweise nicht den öffentlichen Schlüssel des entfernten Geräts merken kann, müssen wir leider die Überprüfung dessen deaktivieren.
Dazu entfernen wir in der Datei „/etc/ssh/ssh_config“ die Raute vor der Zeile
# StrictHostKeyChecking no
so dass diese Anweisung aktiviert wird.
Thomas
11.02.2016 @ 22:58
vergiss es ^^
Thomas
11.02.2016 @ 22:35
Hallo Daniel,
erstmal Danke für deinen Blog, hat mir den Einstieg um einiges erleichtert in OpenHab. Nur hab ich das gleiche Problem wie Pedro, versteh nur nicht ganz wie ich den Schlüssel auf dem OpenHAB Server generiere… das anschließende kopieren sollte kein Problem mehr sein
Daniel Wenzel
06.01.2016 @ 07:01
Die Schlüssel erstellst du auf dem openHAB-Server. Dort gibts du dann auch den Inhalt der id_rsa.pub aus. Diesen Inhalt kopierst du in die Datei ~/.ssh/authorized_keys2 auf deiner Himbeere!
Dann noch einmal vom openHAB-Server manuell via SSH bei der Himbeere einloggen und ab sofort sollte ein Passwortloser Login möglich sein.
Kopieren und Einfügen kannst du auch via Putty machen.
Pedro
04.01.2016 @ 11:06
hi, die nervensäge schon wieder.
ich habe das komplett so durchgeführt wie beschrieben, wenn ich diesen teil eingebe
cat id_rsa.pub >> ~/.ssh/authorized_keys2
kommt: cat: id_rsa.pub: Datei oder Verzeichnis nicht gefunden
aber die dateien sind alle da. ich versteh das echt nicht.