Veröffentlichung 3. August 2018 @ 17:34
Letzte Änderung 19. April 2021 @ 20:09
Überblick
- Ed25519-Schlüssel für möglichst sicheren Zugang
- Ed25519-Schlüssel ohne Passphrase, z. B. für unbeaufsichtigtes Backup
- RSA-Schlüssel für kompatiblen Zugang, z. B. für Eclipse
- Hostspezifische SSH-Client-Konfiguration
Voraussetzungen
Client client.example.com
- Benutzerkonto clientuser
- Client-Schlüssel /home/clientuser/.ssh/id_*
- Host-Schlüssel /home/clientuser/.ssh/known_hosts
- Konfiguration /etc/ssh/ssh_config, /root/.ssh/config
Host host.example.com
- Benutzerkonto hostuser
- Client-Schlüssel /home/hostuser/.ssh/authorized_keys
- Host-Schlüssel /etc/ssh/ssh_host_*
- IP-Adresse x.x.x.x
- SSH-Port 42022
Software
- OpenSSH 7.2, OpenSSL 1.0.2g #ssh -V
- Ubuntu Server 16.04.04 LTS #lsb_release -a
Ed25519-SSH-Schlüssel mit Passphrase generieren und auf entferntem Host speichern
SSH-Schlüsselpaar mit Authentifizierungs-Algorithmus Ed25519 erzeugen
ssh-keygen -t ed25519 #keine Option -b, da immer 256 bit Generating public/private ed25519 key pair. Enter file in which to save the key (/home/clientuser/.ssh/id_ed25519): <Enter> Enter passphrase (empty for no passphrase): *** Enter same passphrase again: *** ...
Öffentlichen Schlüssel in Datei authorized_keys auf Host speichern
ssh-copy-id -i /home/clientuser/.ssh/id_ed25519 -p 42022 hostuser@host.example.com #nur bei SSH-Server mit Passwort-Authentifizierung
[Optional] Öffentlichen Schlüssel aus Datei authorized_keys auf Host löschen
ssh -i /home/clientuser/.ssh/id_ed25519 -p 42022 hostuser@host.example.com 'sed --in-place "/^ssh-ed25519.*clientuser@client.example.com$/d" /home/hostuser/.ssh/authorized_keys'
[Optional] Ed25519-SSH-Schlüssel ohne Passphrase generieren
SSH-Schlüsselpaar mit Authentifizierungs-Algorithmus Ed25519 erzeugen
ssh-keygen -C clientuser@client.example.com_ppl -f /home/clientuser/.ssh/id_ed25519_ppl -N '' -t ed25519 #Endung ppl für passphraseless Generating public/private ed25519 key pair. ...
Öffentlichen Schlüssel in Datei authorized_keys auf Host speichern
ssh-copy-id -i /home/clientuser/.ssh/id_ed25519_ppl -p 42022 hostuser@host.example.com
[Optional] Öffentlichen Schlüssel aus Datei authorized_keys auf Host löschen
ssh -i /home/clientuser/.ssh/id_ed25519_ppl -p 42022 hostuser@host.example.com 'sed --in-place "/^ssh-ed25519.*clientuser@client.example.com_ppl$/d" /home/hostuser/.ssh/authorized_keys'
[Optional] RSA-SSH-Schlüssel mit Passphrase generieren und auf entferntem Host speichern
SSH-Schlüsselpaar mit Authentifizierungs-Algorithmus RSA mit Schlüssellänge 4096 Bits erzeugen
ssh-keygen -b 4096 -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/clientuser/.ssh/id_rsa): <Enter> Enter passphrase (empty for no passphrase): *** Enter same passphrase again: *** ...
Öffentlichen Schlüssel in Datei authorized_keys auf Host speichern
ssh-copy-id -i /home/clientuser/.ssh/id_rsa -p 42022 hostuser@host.example.com
[Optional] Öffentlichen Schlüssel aus Datei authorized_keys auf Host löschen
ssh -i /home/clientuser/.ssh/id_rsa -p 42022 hostuser@host.example.com 'sed --in-place "/^ssh-rsa.*clientuser@client.example.com$/d" /home/hostuser/.ssh/authorized_keys'
SSH-Client für individuellen Zugriff auf entfernte Hosts konfigurieren und testen
Einstellungen in globaler SSH-Client-Konfigurationsdatei auskommentieren
... #Host * ... #SendEnv LANG LC_* #HashKnownHosts yes #GSSAPIAuthentication yes #GSSAPIDelegateCredentials no
Öffentliche Host-Schlüssel abfragen
ssh-keyscan -p 42022 host.example.com ... [host.example.com]:42022 ssh-ed25519 xxx
Benutzerspezifische SSH-Client-Konfigurationsdatei für möglichst sicheren Zugang anlegen und Zugriffsrechte einschränken
#Einstellungen für alle Hosts: Host * #sicherste symmetrische Chiffre mit Authentizierung und Integritätsprüfung gemäß ssh -Q cipher-auth #=> kein Eintrag für MACs erforderlich: Ciphers chacha20-poly1305@openssh.com #Einträge in known_hosts-Datei als Hashwerte speichern: HashKnownHosts yes #sicherster Schlüsselaustausch-Algorithmus gemäß ssh -Q kex: KexAlgorithms curve25519-sha256@libssh.org #keine Passwort-Authentifizierung: PasswordAuthentication no #Einstellungen für Host host.example.com: Host example #sicherster Host-Authentifizierungs-Algorithmus gemäß ssh-keyscan -p 42022 host.example.com: HostKeyAlgorithms ssh-ed25519 #Name: HostName host.example.com #Private Schlüsseldatei entsprechend HostKeyAlgorithms: IdentityFile ~/.ssh/id_ed25519 #geänderter Standard-Port für Security through obscurity: Port 42022 #Benutzer: User hostuser
chmod 0600 /home/clientuser/.ssh/config
SSH-Zugriff auf Host testen
ssh example The authenticity of host '[host.example.com]:42022 ([x.x.x.x]:42022)' can't be established. ED25519 key fingerprint is xxx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[host.example.com]:42022,[x.x.x.x]:42022' (ED25519) to the list of known hosts.
[Optional] Host-Schlüssel aus known_hosts löschen
Schlüssel für Host-FQDN entfernen
ssh-keygen -R [host.example.com]:42022 Host [host.example.com]:42022 found: line 1 /home/clientuser/.ssh/known_hosts updated. Original contents retained as /home/clientuser/.ssh/known_hosts.old
Schlüssel für Host-IP entfernen
ssh-keygen -R [x.x.x.x]:42022 Host [x.x.x.x]:42022 found: line 1 /home/clientuser/.ssh/known_hosts updated. Original contents retained as /home/clientuser/.ssh/known_hosts.old
Quellen
https://infosec.mozilla.org/guidelines/openssh
https://man.openbsd.org/ssh
https://man.openbsd.org/ssh-keygen
https://man.openbsd.org/ssh-keyscan
http://manpages.ubuntu.com/manpages/xenial/man1/ssh-copy-id.1.html
http://manpages.ubuntu.com/manpages/xenial/man5/ssh_config.5.html
https://stribika.github.io/2015/01/04/secure-secure-shell.html
https://www.openssh.com/manual.html
https://www.openssh.com/specs.html