Im folgenden Beitrag beschreibe ich die Einrichtung von SSH Zugriff mit Key ohne Passwort unter Linux.
Als ich versuchte die excec-Funktion (Blockly) in ioBroker zu nutzen, um von einem Linux-System auf ein anderes zuzugreifen, blieb mir keine andere Wahl als dieses Anmeldeverfahren zu nutzen. Denn man kann dem Konsolenbefehl „ssh“ kein Passwort übergeben. Ich nutze das SSH-Key Anmeldeverfahren , um auf meine Server oder Systeme vom Smartphone, Tablet oder PC zuzugreifen.
Home-Verzeichnis Rechte setzen (Client und Server)
:~$ sudo chmod 755 /home/<Benutzer>
Schlüsselpaar auf dem Client erstellen
Ich habe mich für einen 2048 Bit langen RSA-Schlüssel entschieden. Ihr könnt die folgenden Eingaben mit Enter bestätigen. Die Eingabe einer Passphrase für den Key ist empfohlen, doch für unser Vorhaben nicht praktikabel.
:~$ ssh-keygen -b 2048
Public Key vom Client auf den Server transferieren
Bei diesem Schritt ist die Eingabe des Passworts ein letztes Mal notwendig, um den Key auf den Server zu transferieren.
:~$ ssh-copy-id -i /home/<Benutzer>/.ssh/id_rsa.pub <Benutzer>@192.168.0.130
Wurde die Verbindung erfolgreich hergestellt, ist in der Datei /home/<Benutzer>/.ssh/authorized_keys auf dem Server der Public-Key vom Client erfolgreich eingetragen. Prüfen könnt ihr das wie folgt:
:~$ cat /home/<Benutzer>/.ssh/authorized_keys
SSH-Key Verbindung testen – Client zu Server
So könnt ihr testen, ob die Einrichtung erfolgreich abgeschlossen wurde – die Passworteingabe ist ab jetzt nicht mehr erforderlich.
:~$ ssh <Benutzer>@192.168.0.130
Hat man die Konfiguration abgeschlossen und der SSH Zugriff mit Key funktioniert, so ist die Deaktivierung des Anmeldeverfahrens mit Passwort möglich. Dazu einfach diese Zeile in der systemweiten Konfiguration ändern.
:~$ sudo nano /etc/ssh/ssh_config
PasswordAuthentication no
Table of Contents
Zusätzliche Einstellungen auf dem Server – Benutzer mit sudo ohne Passwortabfrage
Mein Benutzer gehört zwar zu der Gruppe sudo, aber für manche Kommandozeilenbefehle ist ein Passwort notwendig. Das habe ich auf dem Server wie folgt gelöst:
:~$ sudo visudo
# This file MUST be edited with the 'visudo' command as root. # Please consider adding local content in /etc/sudoers.d/ instead of directly modifying this file. # See the man page for details on how to write a sudoers file. Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" #User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command # sudo ALL=(ALL:ALL) ALL %sudo ALL=(ALL) NOPASSWD:ALL #See sudoers(5) for more information on "#include" directives: includedir /etc/sudoers.d
Dieser Eintrag muss auskommentiert
#sudo ALL=(ALL:ALL) ALL
und dieser muss eingetragen werden:
%sudo ALL=(ALL) NOPASSWD:ALL
SSH Zugriff mit Key auf mehr als ein System
Der Zugriff vom selben System auf weitere Systeme ist möglich, allerdings benötigen wir dafür eine Benutzer-Konfigurationsdatei im .ssh Ordner des Users.
:~$ .ssh/config
Dieses Vorgehen ist nötig, weil SSH lediglich versucht mit dem Standard-Key Paar (id_rsa/id_rsa.pub) eine Verbindung herzustellen. Das neue Schlüsselpaar erhält für die weitere Verbindung einen anderen Namen, sonst überschreiben wir den ersten Key. Das neue Schlüsselpaar muss in SSH bekannt sein, andererseits ist ein Verbindungsaufbau nicht möglich.
Die Datei lässt sich mit dem Texteditor nano einfach erstellen oder mit einem Editor eurer Wahl:
:~$ nano .ssh/config
Host rpi4
HostName 192.168.0.163
User pi
IdentityFile ~/.ssh/id_rsa_rpi4
Host 192.168.0.163
HostName 192.168.0.163
User pi
IdentityFile ~/.ssh/id_rsa_rpi4
-----------------------------------------
Host grafana
HostName 192.168.0.130
User grafana
IdentityFile ~/.ssh/id_rsa_grafana
Host 192.168.0.130
User grafana
IdentityFile ~/.ssh/id_rsa_grafana
Die ersten beiden Einträge verweisen auf den selben Host und dient lediglich der Veranschaulichung. Die Verkürzung des SSH-Befehls, sowie folgende Schreibweisen für den Verbindungsaufbau sind nun möglich:
:~$ ssh rpi4
:~$ ssh 192.168.0.163
:~$ ssh grafana
:~$ ssh
192.168.0.130
Hier könnt ihr den Artikel lesen über die ioBroker Blockly exec-Funktion.