In einigen wenigen Fällen ist erwünscht oder sogar erforderlich, dass man sich auf eine fremde Maschine per ssh ohne Passwortabfrage einloggt. Denkbare Anwendungsfälle sind der Einsatz in Shellskripten oder wie hier näher erläutert, der Aufbau eines Tunnels über ssh, um z.B. ein ungeschütztes Protokoll über das Internet von einer entfernten Maschine auf eine lokale Maschine zu Verfügung zu stellen. Beispielhaft werde ich in den beiden Teilen schildern, wie man PostgreSQL von einer gehosteten Maschine ins lokale Netzwerk bekommt.
In einem ersten Schritt generieren wir uns einen passenden Schlüssel mit dem Kommando ssh-keygen. Wir haben die Auswahl unter RSA-Schlüsseln mit einer Länge von 768 bis 2048 bits und einem DSA-Schlüssel mit genau 1024 bits. Bei RSA-Schlüsseln wird eine Länge von 2048 bits als ausreichend sicher angenommen.
ssh-keygen -t rsa -b 2048
ssh-keygen -t dsa
Die Frage nach dem Speicherort kann man in den meisten Fällen bestätigen, im Normalfall unter ~/.ssh/id_dsa oder id_rsa. Braucht man mehr als einen Standardschlüssel, gibt man einfach einen anderen Namen ein. Die Frage nach einem Passwort und dessen Wiederholung lassen wir leer. Nun müssen wir den öffentlichen Teil des Schlüssels auf den Remothost installieren. Auch hier bringt Linux gleich die passenden Tools mit:
ssh-copy-id -i ~/.ssh/id_dsa.pub user@remotehost
Werden mehere Schlüssel für unterschiedliche Accounts/Maschinen gebraucht, ergänzt man die ~/.ssh/config um folgende Einträge:
Host remotehost
Port 22
IdentityFile ~/.ssh/<key>
Da ich ein Login mit einem ungesicherten Key aus Sicherheitsbedenken ablehnen muss, zeige ich einen eher unbachteten Weg, den so gewonnen Zugang soweit einzuschränken, dass nur die Ausführung eines Kommandos erlaubt wird. Man ergänzt auf dem Remotehost im Homeverzeichnis des users die .ssh/authorized_keys die neu erstellte Zeile, die je nach Art des erstellten Schlüssels mit ssh-rsa für einen RSA-Key bzw. mit ssh-dss für einen DSA-Key beginnt um z.B. den Eintrag:
command="/usr/bin/sleep 1800", ssh-dss ...
Jetzt darf der Besitzer des Schlüssel nur noch /usr/bin/sleep 1800 auf dem Remotehost ausführen. Für unsere Zwecke des Tunnelbaus ideale Voraussetzungen…