**This is an old revision of the document!**
Private/Public-Key Authentifizierung
tl;dr
Erzeugen des private-public-key Paares auf dem Client
ssh-keygen -t rsaÜbertragen des public(!)-key auf den Server in den .ssh Ordner
Variante 1: Linux zu Linux
Hier Transport und Übertragung nach authorized_keys in einem Rutsch
ssh-copy-id user@serverVariante 2: Windows zu Linux
Hier erst Transport und händisches Übertragung nach authorized_keys
cat id_rsa.pub >> authorized_keysUm ein public-private-key Schlüsselpaar zu erzeugen und richtig zu konfigurieren, müssen wir uns sowohl auf dem
Client als auch auf dem Server bewegen.
In der folgenden Anleitung sind die Befehle, die hierfür notwendig sind, aufgelistet.
Bitte beachten: Um zu wissen, ob wir uns gerade auf dem Client oder dem Server befinden, sind den Befehlen jeweils ein user@client(Client) bzw. ein user@server (Server/Host) vorangestellt.
Client
Standort: user@client:~/.ssh
Generieren des Schlüsselpaares (public key und private key)
user@client: ssh-keygen -t rsaWenn du die folgenden Abfragen nach Dateinamen nur durch
Enter überspringst, entstehen standardmäßig zwei Dateien:
- Der private key:
id_rsa - Der public key:
id_rsa.pub(.pub wie public ;)
Verteilt wird ausschließlich der public key! Der private key wird gehütet, wie der eigene Augapfel!
Natürlich kommt man mit nur einem Schlüsselpaar als Administrator nicht besonders weit. Da man ja nicht für jeden Job bzw. für jeden Server, auf dem man sich anmelden möchte, einen eigenen Rechner hat, können im oben genannten Prozess auch individuelle Namen für die Schlüssel erzeugt werden.
Schlüssel-Transfer
Der public key muss zum Server transferiert werden
Variante 1: Linux zu Linux
user@client: ssh-copy-id user@serverSolltest du einen individuellen Namen für die Schlüssel erstellt haben, nutzt du
user@client: ssh-copy-id -i ~/.ssh/mykey user@server
-i ~/.ssh/mykey macht hier den Unterschied.
Dabei wird der public key auf den Server transferiert und dort der Datei authorized_keys hizugefügt:
user@server:~/.ssh/authorized_keys
Variante 2: Sorgenkind Windows
Sollte der Befehl ssh-copy bei dir nicht installiert sein (Windows), musst du den Schlüssel per scp auf den Server in den Ordner .ssh transferieren:
user@client: scp id_rsa.pub user@server:~/.sshAnschließend muss der Schlüssel manuell der Datei
authorized_keys auf dem Server hinzugefügt werden:
user@server:~/.ssh cat id_rsa.pub >> authorized_keysHier geht es um das
cat id_rsa.pub >> authorized_keys.
Einloggen nach dem Schlüssel-Transfer
Fall 1: Du hast keinen individuellen Namen gewählt.
ssh user@serverAb jetzt reicht es, einfach, diesen Befehl zu verwenden - eine Passwort-Abfrage erfolgt nicht mehr.
Dabei verwendest du also den Befehl ssh ergänzt um das Argumentpaar user@server, also dem User, der am Host server angemeldet werden soll.
Fall 2: Du hast einen individuellen Schlüsselnamen gewählt:
ssh -i ~/.ssh/id_rsa user@server
Einloggen über Alias
Falls dir der Befehl ssh user@server noch zu lang ist, ist es möglich, sich über einen Alias einzuloggen.
Schreibe eine Konfiguration in die Datei ~/.ssh/config auf dem Client.
Host vmx
HostName hostadresse
User user
IdentityFile private_key
Ab dann reicht ein Aufruf des Befehls
ssh vmx(vmx ist natürlich nur ein Platzhalter - den Namen kannst du frei wählen)
Möglichkeit zum Log-In per Passwort deaktivieren in /etc/ssh/sshd_config
Selbst wenn du ein Passwort nach allen Sicherheitsregeln erstellt hast, ist es immer noch sicherer gar keine Anmeldung per Passwort zuzulassen.
Konfiguriere hierfür die Datei /etc/ssh/sshd_config
PasswordAuthentication no PubkeyAuthentication yes
Anschließend noch sshd neu starten:
Vorsicht: In Ubuntu wird ein Alias namens ssh verwendet, um sshd anzusprechen. Muss man wissen.
sudo systemctl restart sshFalls es je nach Linux kein
ssh gibt, verwende sshd
sudo systemctl restart sshoder
sudo systemctl restart ssh.service
ssh stoppen
sudo systemctl stop ssh.socket sudo systemctl stop ssh.service
Exkurs ssh vs sshd sowie systemctl
systemctl
systemctlist ein Kommandozeilenwerkzeug zur Verwaltung vonsystemd, dem standardmäßigen Init-System vieler moderner Linux-Distributionen.systemdermöglicht Steuerung von Diensten (Services), Units, Systemzuständen und Konfigurationen
Häufige Befehle
| Befehl | Aktion |
|---|---|
systemctl start <dienst> | Startet einen Dienst |
systemctl stop <dienst> | Stoppt einen Dienst |
systemctl restart <dienst> | Startet einen Dienst neu |
systemctl status <dienst> | Zeigt den Status eines Dienstes an |
systemctl enable <dienst> | Aktiviert einen Dienst für den automatischen Start beim Booten |
systemctl disable <dienst> | Deaktiviert einen Dienst |
ssh vs sshd
- Ubuntu und Debian verwenden
sshfür den Client undsshauch für den Dienst - CentOS, Fedora, Arch Linux, und OpenSUSE verwenden
sshdfür den Dienst
Der ssh-Client-Befehl bleibt in allen Distributionen gleich, aber der Dienstname kann entweder ssh oder sshd sein.
Infos über ssh
sudo journalctl -u ssh
Banner Nachricht beim Login anzeigen
SSH-Banner-Warnungen sind notwendig, wenn Unternehmen oder Organisationen eine Warnung anzeigen möchten, um unbefugte Parteien davon abzuhalten, auf einen Server zuzugreifen.
Diese Warnungen werden direkt vor der Passwortabfrage angezeigt, damit unbefugte Benutzer, die sich gerade einloggen wollen, auf die Konsequenzen ihres Handelns aufmerksam gemacht werden. Typischerweise beinhalten diese Warnungen rechtliche Konsequenzen, die unbefugte Benutzer erleiden können, sollten sie sich entscheiden, auf den Server zuzugreifen.
Beachte, dass eine Banner-Warnung keineswegs eine Methode ist, um unbefugte Benutzer vom Einloggen abzuhalten. Die Warnung dient lediglich dazu, unbefugte Parteien vom Einloggen abzuschrecken.
Wenn Du unbefugte Benutzer vom Einloggen abhalten möchten, sind zusätzliche SSH-Konfigurationen erforderlich.
How to
Gehe wieder in die bekannte ssh-Konfigurationsdatei /etc/ssh/sshd_config und suche dort nach folgender Zeile:
# no default banner path # Banner noneÄndere den Inhalt dieser Zeilen so, dass statt
# Banner none nun der Pfad zu einer Datei steht, in der du die Informationen eingibst, die du magst. Die Zeilen könnten also folgendermaßen aussehen:
# no default banner path Banner /etc/mybannerMit einem Editor deiner Wahl, zum Beispiel
nano erzeugst du nun diese Datei mybanner und schreibst den Inhalt hinein:
******************************************** ** Willkommen. Aber nur mit Erlaubnis! ** ********************************************