SSH Zugang ohne Passwortabfrage für einen speziellen User einrichten
In diesem Artikel möchte ich euch die Möglichkeit aufzeigen, SSH Zugang zu Systemen zu erhalten, ohne ein Passwort einzugeben. Ich nutze dies gerne in stark automatisierten Umgebungen. Meine Systeme müssen teilweise Aktionen auf anderen Systemen ausführen und dies ist die einfachste und für mich sicherste Lösung für dieses Problem. Dieser Artikel besteht eigentlich aus 2 verschiedenen Teilen. Einmal muss der User, welcher per SSH Zugang zum „Server“ bekommen soll, über einen gültigen RSA Key verfügen, und zweitens muss dieser Key auf dem Server abgelegt werden. Dieses Szenario kann sogar angewendet werden, wenn der Client-User keine vollen User Rechte (kein Home, kein Login möglich) besitzt.
Wie immer starten wir auf einem neu aufgesetzten und aktuellem System. Im speziellem Fall handelt es sich um ein Ubuntu 20.04. Der User für welchen wir den passwortlosen Zugang einrichten wollen, heißt „test“.
Fangen wir an…..
RSA Key erstellen
Auch diesen Teil schauen wir uns getrennt an. Zuerst werden wir uns das generelle Vorgehen anschauen um einen RSA Key zu erstellen und etwas weiter unten, gehen wir auf das Vorgehen ein, sollte dies für einen speziellen User benötigt werden. Zum generellen Teil.
Wir sind nun mit unserem User im System eingeloggt. Wir befinden uns z.B. im Home Verzeichnis des Users. Als erstes sollten wir uns einen versteckten Ordner für die benötigten Schlüssel zulegen und wechseln auch noch direkt hinein.
mkdir .ssh/
cd .ssh/
Jetzt erstellen wir uns einen Schlüssel. Hierzu verwenden wir den Befehl „ssh-keygen“. Dieser Befehl enthält bereits alles was wir benötigen. Es wir automatisch ein 2048 bit langer Schlüssel des Typs RSA angelegt. Die Nachfrage nach den zu speichernden Dateien, können wir mit Enter bestätigen. Danach werden wir nach einem Passwort gefragt. Dieses wird benötigt um den privaten Anteil des Schlüssels zu entschlüsseln. Es muss nicht zwingend gesetzt werden. Sollte aber jemand an diesen Teil kommen, kann er damit auch den Rest entschlüsseln. Ich persönlich setze kein Passwort.
ssh-keygen
Wenn alles geklappt hat, sollten 2 Dateien in dem Ordner auftauchen. Was wir uns natürlich einmal anschauen.
ls -l
rw------- 1 xxxx xxxxx 1679 Dez 30 2017 id_rsa rw-r--r-- 1 xxxx xxxxx 387 Dez 30 2017 id_rsa.pub
Das war auch schon für den generellen Teil. Wer also kein Interesse daran hat, dieses Vorgehen für einen speziellen User umzusetzen, der kann den nächsten Unterpunkt überspringen.
RSA Key für einen speziellen User erstellen
An dieser Stelle kommt uns „sudo“ zugute. Über „sudo“ können wir Befehle auf einem System, für einen anderen User, absetzen. Dies geht mit der Option „-u“. Wenn ihr nicht auf einem Ubuntu arbeitet könnt ihr mit ähnliches mit dem Befehl „su – USERNAME“ erreichen. Folgend das entsprechende Beispiel von oben mit einem speziellen User.
Wir suchen uns ein sinnvolles Arbeitsverzeichnis des Users. Falls es sich um eine Programm handelt dann würde sich dessen Programmordner anbieten. Eigentlich ist es aber egal. Wichtig ist nur, dass außer Admins kein anderer User darauf Zugriff haben kann. Also wir sind in diesem Verzeichnis und unser User heißt „test“.
mkdir .ssh/
chown test:test .ssh/
cd .ssh/
sudo -u test ssh-keygen
Wie zu sehen ist, erstellen wir wieder ein Verzeichnis für die Dateien und ändern dann aber direkt den Eigentümer. Danach sind wir in das Verzeichnis gegangen und haben dort, im Namen des Users „test“, die Schlüssel erstellt. Auch hier sehen wir diese. Allerdings gehören diese direkt dem User test.
ls -l
rw------- 1 test test 1679 Dez 30 2017 id_rsa rw-r--r-- 1 test test 387 Dez 30 2017 id_rsa.pub
Somit sind wir auch mit diesem Teil durch. Jetzt muss der öffentliche Schlüssel noch kopiert werden.
RSA Key manuell kopieren
Folgendes ist zu beachten. Genau wie es einen speziellen User auf dem Client System geben kann, kann es auch auf dem Server einen geben. Es muss also alles im Kontext des User, welcher die benötigten Rechte hat um unser Anliegen auszuführen, geschehen. Zur Verdeutlichung ein kurzes Beispiel. Auf dem Client System läuft z.B. ein FHEM und dieses soll auf einem entfernten System z.B. einen Messwert auslesen, welcher aber nur vom User „mess“ ausgelesen werden kann. Also muss der FHEM User vom Client System einen SSH Zugang zum User „mess“ erhalten. Ich setze voraus, dass dies bedacht wurde. Unser Startpunkt, ist im Home Verzeichnis dieses Users auf dem Zielsystem (dies kann auch root sein).
Wir schauen ob es einen SSH Ordner gibt. Da dieser von Haus aus versteckt wird, müssen wir explizit danach suchen. Dafür nutzen wir die Option -a für den Befehl „ls“.
ls -al
Sollten wir einen finden, dann wechseln wir direkt hinein. Ansonsten legen wir diesen an und machen dies danach.
mkdir .ssh/
cd .ssh/
Wir befinden uns also in diesem Ordner. Hier benötigen wir eine Datei Namens „authorized_keys“. Diese legen wir an. Wenn es diese Datei gibt dann bitte den nächsten Schritt (diese Datei anlegen) überspringen.
nano authorized_keys
Da wir den Schlüssel noch benötigen, speichern wir die Datei erstmal leer ab. Dies geht mit „STRG+O“ (der Buchstabe) und danach schließen wir die Datei mit „STRG+X“.
Nun loggen wir uns auf dem Client ein. Wir gehen zu dem angelegten „SSH“ Ordner und lassen uns den öffentlichen Schlüssel anzeigen.
cd .ssh/ cat id_rsa.pub
Wir kopieren den langen Text der uns angezeigt wird. Dieser beginnt mit ssh-rsa! Bitte alles kopieren.
Jetzt gehen wir wieder auf den Server, in das Home-Verzeichnis des Users und gehen wieder direkt in den SSH Ordner. Hier öffnen wir uns die Datei „authorized_keys“ und fügen den Schlüssel ein. Sollte diese Datei schon da gewesen sein, dann bitte den Schlüssel am Ende der Datei einfügen. Danach wieder speichern (strg+o) und schließen (strg+x)!
cd .ssh/ nano authorized_keys
Jetzt können wir unser Werk noch testen. Dies ist auch wichtig, da beim ersten verbinden auf dem Client System der Schlüssel bestätigt werden muss. Dazu wieder auf den Client und folgenden Befehl absetzen. Dabei ist der User und die IP natürlich den Gegebenheiten anzupassen.
ssh test_server@10.1.1.4
Wenn alles korrekt gelaufen ist, dann kommt die Meldung bzw. Anfrage, dass dies ein neuer Schlüssel ist und ob dieser akzeptiert und gespeichert werden soll. Dies bestätigen wir mit „yes“. Danach sollten wir auf dem System sein. Beim nächsten mal fällt auch diese Abfrage weg.
Wenn wir dies wieder mit einem speziellen Client User machen dann lautet der Befehl so.
sudo -u test ssh test_server@10.1.1.4