SSH-Schlüsseltausch – Linux Login automatisiert ohne Passwort

Oftmals muss man sich auf einem Linux Server einloggen (von einem anderen Linux Server aus) und darf dabei (aus Sicherheitsgründen) den Programmen SSH oder SFTP keine Passwörter mitgeben.
Vorallem natürlich wenn das ganze automatisch erfolgen soll, z.B. von einem Backup Script…


Am Anfang hatte ich erstmal einen Weg gesucht das zu umgehen (wenn ich mein Passwort im Klartext im Script schreiben will, will ich das halt! Der User hatte sowieso nur wenig Rechte!) aber reden wir hier lieber nicht über diesen (definitiv falschen!) Weg 🙂
(Wer es doch wissen will soll mal Google mit dem Stichwort „sshpass“ füttern…)

Für diesen Test sorgen wir dafür dass der User ‚pi‘ vom Host ‚raspi3‘ sich ohne Passwort als User ‚pi‘ auf dem Host ‚pi.de‘ anmelden darf

Zuallererst erzeugen wir auf dem Host pi.de den Zieluser pi:

adduser pi

Als Passwort geben wir einfach mal ‚pipi‘ an.
(jaja, ‚pipi‘ liest sich komisch, ich weiß…)
Nun kann sich jeder User am Host pi.de als User ‚pi‘ anmelden. Ganz einfach so:
(Achtung: Der SSH-Port ist hier nicht 22, sondern 123, deshalb das zusätzliche ‚-p 123‘)

ssh pi@pi.de -p 123

Kennwort ‚pipi‘ eingeben und wir sind drin.
Wir wollen das aber automatisch, also gehen wir auf dem Host pi.de in die Datei ‚/etc/shadow‘ und schalten den Kennwortzugang ab.
In der Zeile des Users ‚pi‘ steht vorher:

pi:$6$T5SkYjVe$TkYn8ZYUzKcKyhE.8RGhs1TLJoQ/okEGyVNrPbBHBfiWY5ZGsHmr6UvnfvyrvEr4WRYrr2jfSoQ35aryPtUT2.:16869:0:99999:7:::

Wir machen aus dem Passwort (die ganz lange Zahlenkombination) einfach einen *. Das heißt dass es kein Passwort gibt.
Das einloggen mit anderen Techniken (Schlüsselaustausch) ist aber weiterhin erlaubt!
Die Zeile sieht dann so aus:

pi:*:16869:0:99999:7:::

Nun gehen wir auf unseren Host ‚raspi3‘ als User ‚pi‘ und erzeugen uns eine Schlüsseldatei, das geht so:
(Passwort vergeben wir keines, die Vorgaben der Dateipfade lassen wir so)

ssh-keygen -t rsa

Es wurden nun in dem Ordner ‚/home/pi/.ssh‘ zwei Dateien erstellt. Einmal unser Teil des Schlüssels mit dem Namen ‚id_rsa‘ und der öffentliche Teil des Schlüssels mit dem Namen ‚id_rsa.pub‘. Den privaten Teil nutzt das Programm ssh automatisch wenn er ihn in diesem Ordner findet. Dafür darf natürlich kein Passwort vergeben sein welches den privaten Teil nochmal extra verschlüsselt.
(wenn eines vergeben ist wird SSH nach dem Passwort für die Schlüsseldatei fragen. Das ist nicht weiter schlimm, nur für ein Backup-Script natürlich nicht wünschenswert.)

Um nun unseren privaten Schlüssel auf den Host ‚pi.de‘ zu bringen können wir entweder das Tool ’ssh-copy-id‘ nutzen, oder aber wir machens von Hand. Von Hand ist mir lieber, weil flexibler.

Also den Inhalt der Datei ‚/home/pi/.ssh/id_rsa.pub‘ in die Zwischenablage kopieren:
(dieser Inhalt ist nicht geheim, den darf man gerne verteilen…)

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDczO5DSAIarZjY6xmocCIJio2SrMT5kXuUWneNrVZdFoF6Um7R4U77E9SvskAYiiQ73yfPZY6ZgXAcY4Qtuum1FfkR0HcTP2kX1rcF61cpdWvmeAaT9jkHtY/PK3zlflJra8YBLZzKZXwAnhS9vcK2IBSK+sauBfwLOOKKx84/c+Cr3sNu4eCU+QrImV03rjITqpczldSCQZfA2cMLaq7gmyxwx0Z4/redZINYmhL+RBGTUa6SoeNMTDb4ZhDcRoErRX319MKxpY4lrJZkVfMuIJ6c3YeLM1bIsX45I1jdwq/wtoorTlvziiMnuFR0J4PsOxq0wbIjXCSl6oUdpVSF pi@raspi3

Mit diesem Teil im Gepäck gehen wir nun wieder auf ‚pi.de‘ als User ‚pi‘ und erstellen den Ordner ‚/home/pi/.ssh‘ und die Datei ‚/home/pi/.ssh/authorized_keys‘ und fügen den Inhalt unserer Zwischenablage da rein.

Und… das wars!
Wenn wir nun

ssh pi@pi.de -p 123

als User Pi vom Host raspi3 machen kommen wir als User pi auf dem Host ‚pi.de‘ an. So einfach!

Das hier ist übrigens der Inhalt der Datei ‚/home/pi/.ssh/id_rsa‘ auf dem Host raspi3:
(dieser Inhalt ist jetzt aber GEHEIM und man sollte diesen niemandem zugängig machen!)

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA3MzuQ0gCGq2Y2OsZqHAiCYqNkqzE+ZF7lFp3ja1WXRaBelJu
0eFO+xPUr7JAGIokO98nz2WOmYFwHGOELbrptRX5EdB3Ez9pF9a3BetXKXVr5ngG
k/Y5B7WPzyt85X5Sa2vGAS2cymV8AJ4Uvb3CtiAUivrGrgX8CzjiisfOP3Pgq97D
buHglPkKyJldN64yE6qXM5XUgkGXwNnDC2qu4JsscMdGeP63nWSDWJoS/kQRk1Gu
kqHjTEw2+GYQ3EaBK0V99fTCsaWOJayWZFXzLiCenN2HizNWyLF+OSNY3cKv8LaK
K05b84ojJ7hUdCeD7DsatMGyI1wkpeqFHaVUhQIDAQABAoIBAGVHRt7rr7Nm/144
cJt3W9V+jTPDNdK37bR9zqrY4G1wflGKcDSrIVw/m2Y/3/ChpL8lvBAAqGk3GyKa
by2+t6aNfqKyOXxFsMHzhh4b9e4ZYzXixjmmTkCAAofnjbGCwPFvDPLLZkjcRgXO
fPsPiLmbe3DIWMvICPVo0VkRD0TA2xqtYnQYmGdYpekLZSQUuAI97mpGbM11TnIf
0fjpwgb0V17TMhbYejD7KrkgZvRZcrOw27e5qx6ckJEnvdzkDdgJ/K93JiP/1h00
GOm35h6GxzymRd4kqdkUYD6fQVwsAo1H1u7hgkbMKlZv1IXlvOaYIwrumBR+CiPJ
h68ICL0CgYEA8xdulkHxkkDY0901HFQTJGGelnX/4g2xGQjFQAuop+uWkaMYEwu5
cCToxjc9RTI3NFz/hD9p5tpiOvLFkF9ugwurJP3ituAxq1YqbEHMxwhJDtKIxCN0
65IVRjdRMTiK+F8IBGAKrEBK7WOeJkDWC23yQ9V48zNB78Ht24LtDuMCgYEA6IZ5
7Rr+ulRJhgcD1WMo527w8SEC9+6foyWcYkqSzEAITnBcbQmPbYZaV2vIbbrg52v1
ZZmgNwhlDEOwZrIe4dulg653zIRxSaH0WKsBsUia9If8q1GDMtBdccegcEIAvXFR
SZaQQtH+lt55lfQTec1Lure4yn5PcYAjtFaaQ3cCgYEAx0ZCJXLRcS8vkB4aV6qk
NoK/2l/I76qBrx/9cs8b5uu9do3YQmSuEzxuhW7rDzpm/sntvJ+vVMtZEzHIut1A
XrTGC4EExR1sGiR8ilo2YEJugXQdIYxfYG1Ue0cFi+/qHEjq7Ys9tI7P3WJ4Vqt3
y87JdsocaGFwf/bd4cCmTDkCgYAf24TK8n7h4nhsT3u7+aj6BF4oe0Bf3aargJSr
dtIj/8XjkUtoeP3YoKayAYdlWUxFCKqHcAPeZl0J0CBUAaVvhltn7jhloeOvlevX
Vh6WPn9Ub2kzw6g5Bwk2dIZLuw9E5Uigz2sWbJT38KUx4U3lyzXL8C32OFYEE+1Q
YOkjwwKBgHRByU1ToBqI28mq9tYAnl08JT4vglX31HlbO4iTDubRRtotZ2Lk3jo0
JAiX3GT13JFOJ/y0teAh9G069aZlvFIn66o0uXYp4g/lDuj/RiQgaDKMx6tWzYcz
ZDcuod2K+fNhU7/w3jVF7CBG5Zwjj814/iMScdXbC+aWDGDmTmf/
-----END RSA PRIVATE KEY-----

Das ist der private Schlüssel. Der muss natürlich geheim bleiben – vorallem weil wir ihn nicht mit einem Passwort verschlüsselt haben!

Gibt es nun auf dem Host raspi3 einen User ‚badman‘ und er bekommt diesen Schlüssel, kann er ihn in der Datei ‚/home/badman/geklauterschluessel.txt‘ speichern, und sich mit SSH als User ‚pi‘ auf dem Host ‚pi.de‘ anmelden.
Und zwar indem er diesen Schlüssel seinem SSH-Programm mitgibt:

ssh pi@pi.de -p 123 -i /home/badman/geklauterschluessel.txt

Das darf natürlich nicht passieren !

Bei ubuntuusers.de ist das ganze nochmal sehr ausführlich erklärt: https://wiki.ubuntuusers.de/SSH/

4 Antworten auf „SSH-Schlüsseltausch – Linux Login automatisiert ohne Passwort“

  1. Netter Ansatz das Login via SSH-Keyfile zu realisieren aber wieso muss man in der /etc/shadow das pw entfernen? Es reicht ja wenn man dem user mit dem man sich einloggen will eine keyfile erstelt und diese in der ~/.ssh/authorized_keys hinterlegt. Dazu noch die Auth. via Keyfile in der ssh-config freischalten und passwort logins systemweit verbieten.

    ssh-copy-id dient dabei dan dem bekant machen des neuen ssh-schlüssels!
    Dieser solte ggf noch mit einer passpharse gesichert werden um diebstahl des Schlüssels und damit verbunden die zugangsmöglichkeiten einzuschränken!

    Freundliche grüße

  2. Hallo EDV Büro RAAIT,

    ich persönlich erlaube Login mit Passwort weiterhin, da ich auf meinen Server mal schnell von Computer XY aus zugreifen will.
    Deshalb das disablen des Passwortes nur für den einen Nutzer.

    Dass der Schlüssel mit einem Passwort gesichert wird ist hier absichtlich nicht der Fall denn der Schlüssel soll ja von einem Script automatisiert genutzt werden können.

    Thomas

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.