SSH Zugang mit Schlüssel absichern

  • Damit es im Smalltalk Thread nicht untergeht, kommt es hierhin ^^ .


    Viele denken sich bestimmt beim ersten eigenen Server (egal ob Droplet, VPS oder Dedicated) "ach ein starkes Passwort reicht schon! Von mir will eh keiner was".

    Bitte, bitte hört mit diesem Gedanken auf! Ein Server ist 24/7 erreichbar und vor allem bietet ein jedes offene System im Internet 2 Dinge die Betrüger und andere wollen und brauchen:

    • Eine IP Adresse die nicht gesperrt ist
    • Ressourcen (CPU Zeit, RAM, Bandbreite)

    Ja es gibt Dinge wie "fail2ban" die den Einbruch erschweren, aber wie oft ändert ihr euer Passwort? Wer sagt das ein Hacker (ich nenne das hier mal so nun, der Einfachheit halber) nicht durch Zufall beim ersten Versuch auf euer Passwort kommt?

    Dazu kommt, das viele ja gerne das vom ISP gesetzte Passwort einfach lassen, womit kommt das? Meist per Mail, unverschlüsselt. Auch heute ist Verschlüsselung bei Emails nicht verbreitet (sogar Meta bietet es an 8| ), das man in Deutschland wieder Deutsch sein wollte... und einen offenen Standard hinter einer Bezahlschranke stellte und als propitär verkaufte, machte es nicht besser!

    Doch back2topic (Ich greife für die Screenshots auf eine Sandbox VM zurück):

    Wie sichert man nun seinen Server, NAS, etc mit einem Schlüssel ab?

    Zu allererst legen wir dafür ein Schlüsselpaar an, das wir an einem sicheren Ort als Sicherheitskopie haben sollten:

    Zum anlegen des Schlüsselpaares verwenden wir das Programm ssh-keygen (das gibts sowohl unter Windows, als auch unter Linux), bedenkt das dies auf dem Host-System passiert, nicht auf dem Server!

    Im Normalfall sollte dort als Standardpfad der Pfad zu eurem Nutzerordner stehen (im aktuellen Fall, bei mir: C:\Users\sirzi\.ssh\, den könnt ihr so belassen auch.

    id_rsa ist der Dateiname, und sollte ebenfalls nicht geändert werden.

    Im Anschluss frägt euch das Programm nach einer Passphrase, das ist mit einem Kennwort vergleichbar, dies könnt ihr leer lassen oder eine festlegen, so habt ihr eine zusätzliche Sicherheit, sollte mal euer Privater Key geklaut werden:

    Nach Bestätigung ist euer SSH Key auch schon angelegt, wenn ihr den Ordner vom Anfang öffnet, findet ihr dort nun 2 Dateien: id_rsa und id_rsa.pub

    Die erste ist euer Privater Schlüssel und darf unter keinen Umständen herausgegeben werden! Für die nächsten Schritte interessant, ist der Public Key, in der .pub Datei,

    deren Inhalt sieht in etwa so aus:

    Code
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDK/+9OQLGnuksLh7hZylidVCbpFUfQLTP6QzVDY1gTAmOy4zf129PvqA9n9bQqR3G9YYfQy2Sn/LGI880bsBwEBNdOkKSNZGxH3dkLE3DitxV1UbYncPCg6VJ4M5lcKply5eyT4I0IKNNi6cPTapkqUa0E/0PHOnvKn0ngPqplvmiw42sFdFfsuLLFs/dUGUWvaohYwozXU7biz442oqaDvbLg73Ty6pEtkpkVYVcH5trJF/aVmv2ztJ33BfB3YagNZ+SjBAJax/zqdmAOxwQzcvSY3tLDPTzCT73x8mbNTCyUl1b2p/YiYRzzZWww65v+rTQXoMQh5qOEpn5Y03b3R+eou65twCpBu9h3lYrzvfVdO72GJjLDtM/9j0PblyvdPqlwmuR54QIt09MBTTN0ceLrG2C3Jb5r6NcOFVD/6HAuooflMq/j+1N4kaxhYIxSgaW7/L9kZJbzGn1GCphhvOpwGNTe0muTbcQpbmXL177h6hmuHx9M4W0aSBITARE= sirzi@YoRHa-Command

    Diesen Key fügen wir nun auf unserem Linux Server ein!

    Zu allererst, loggt euch wie gewohnt via SSH auf euren Server ein:

    (ja ich war faul... xD)

    Anschließend öffnet ihr die folgende Datei, für den Nutzer den ihr ändern möchtet (in meinem Beispiel der root-Benutzer, bitte bedenkt diesen zum einloggen via SSH völlig zu schließen und stattdessen einen Nutzer mit sudo Rechten zu verwenden!):

    /home/username/.ssh/authorized_keys

    Tipp:

    Unter Linux Systemen (Win/Mac ungetestet) kann man mit ssh-copy-id username@remote_host den Schlüssel auf das Zielsystem kopieren lassen

    Diese Datei ist, normalerweise leer (und neu) falls ihr nicht schon welche Eingetragen habt!

    Dort fügt ihr nun euren Publickey ein:

    Und speichert das ganze ab! (Bei nano, wie im Bild: CTRL+X -> Y -> Enter)

    Anschließend öffnet folgende Datei: /etc/ssh/sshd_config und sucht dort nach folgenden Einträgen:

    • PermitRootLogin -> auskommentieren (das # entfernen) und schauen das da yes dahinter steht, damit verbietet ihr das einloggen via SSH als root
    • PubkeyAuthentication -> ebenfalls auskommentieren und auf Ja stellen
    • AuthorizedKeysFile -> auskommentieren, es sollte Standard die Pfade .ssh/authorized_keys und .ssh/authorized_keys2 dort stehen
    • PasswordAuthentication -> auskommentieren (falls nur als Kommentar) und auf no stellen!
    • PermitEmptyPasswords -> auskommentieren und auf yes

    Anschließend kannst du mit sudo systemctl restart ssh den SSH Dienst neustarten.

    Bevor du die SSH Verbindung schließt, öffne eine zweite Terminal Sitzung und verbinde dich zum versuch mit dem Zielsystem, ohne Passwort. So kannst du prüfen ob es funktioniert und im Notfall noch mal nachschauen!

    Falls du 100% sicher gehen willst, auch gerne den Server neustarten.


    Sollte alles geklappt haben, sieht der Login nun so aus:

    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    Bonus:
    Manche Anbieter (Beispiel Hetzner), bieten die möglichkeit die Server direkt nur mit Publickey auszuliefern:


    Neben Publickey haben sich auch verfahren wie U2F (FIDO) und Passkeys etabliert, werden aber nicht von allen Clients unterstützt.

    Falls noch fragen gibt: Raus damit, vielleicht habe ich ja was übersehen :saint:

  • Man kann sich das ganze rumkopieren unter Unix Systemen vereinfachen indem man nach dem ssh-keygen einfach ein

    Code
    ssh-copy-id username@remote_host

    hinterher schiebt . FERTIG

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!