Automatischer SSH-Login

sshFü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.