OpenSSH-Client – Kurzanleitung

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