Intelligente Lösungen
in neuer Dimension

SSH: Schlüsselpaar mit dem Hardware-Token SoloKey

Für die Arbeit an Linux-Servern verwenden wir sehr gerne SSH in Verbindung mit Schlüsselpaaren. So kann man sich an den Servern anmelden, ohne dass dauernd ein Kennwort eingegeben werden muß.

Diese Anleitung wurde erstellt mit Ubuntu-20.04 und einem SoloKey 3.0.0

Standard-SSH-Schlüsselpaar

Mit dem Standard-SSH-Schlüsselpaar muß man bei jeder SSH-Anmeldung den “Knopf” auf dem SoloKey drücken. Sicherheitstechnisch hat das den Vorteil, dass nicht unbemerkt im Hintergrund SSH-Verbindungen aufgebaut werden können, denn sie erfordern ja diesen manuellen Eingriff. Nachteilig ist, dass man eventuell sehr häufig den Knopf drücken muß. Wenn man bspw. ein Skript ausführt, das nacheinander 5 Kommandos via SSH ausführen möchte, dann muß man 5-mal auf den Knopf drücken.

Unschön ist zusätzlich, dass keine Aufforderung zur Betätigung des Knopfes erscheint, die Ausführung bleibt einfach hängen! Wenn man die Gummihülle vom SoloKey entfernt, dann sieht man, dass die Leuchtdiode anders leuchtet wenn eine Betätigung ansteht.

SSH-Schlüsselpaar anlegen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
uli@ulicsl:~$ ssh-keygen  -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk
Generating public/private ecdsa-sk key pair.
You may need to touch your authenticator to authorize key generation.

# Ausführung bleibt hängen - Knopf auf dem SoloKey drücken!

Enter passphrase (empty for no passphrase): (meine-passphrase)
Enter same passphrase again:  (meine-passphrase)
Your identification has been saved in /home/uli/.ssh/id_ecdsa_sk
Your public key has been saved in /home/uli/.ssh/id_ecdsa_sk.pub
The key fingerprint is:
SHA256:sJ42o9jqKvZGiDUCXTj6C/DzVH7Exbr636TfVqmnEPc uli@ulicsl
The key's randomart image is:
+-[ECDSA-SK 256]--+
| . o.    .       |
|. +       o      |
|.. .  .. o       |
|+ o   .o+        |
|o=.. o..S. . .  .|
|o.+.....o   o ...|
| ..=  *o   .. .E |
|...+.o.o   +.o.. |
|+o*oo  ...o.oo+  |
+----[SHA256]-----+

Schlüssel auf Server hinterlegen

1
2
3
4
5
6
7
8
9
uli@ulicsl:~$ ssh-copy-id -i .ssh/id_ecdsa_sk gitea
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_ecdsa_sk.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'gitea'"
and check to make sure that only the key(s) you wanted were added.

Schlüssel in SSH-Agent hinterlegen

1
2
3
uli@ulicsl:~$ ssh-add ~/.ssh/id_ecdsa_sk
Enter passphrase for /home/uli/.ssh/id_ecdsa_sk:  (meine-passphrase)
Identity added: /home/uli/.ssh/id_ecdsa_sk (uli@ulicsl)

Serveranmeldung mit neuem Schlüssel

1
2
3
4
5
6
7
8
9
10
11
uli@ulicsl:~$ ssh -i .ssh/id_ecdsa_sk gitea

# Ausführung bleibt hängen - Knopf auf dem SoloKey drücken!

Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.8.0-36-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Sat Jan  9 11:36:59 2021 from 10.38.131.1
root@gitea:~# 

Knopflos-Schlüsselpaar

Man kann das Schlüsselpaar auch so anlegen, dass das Betätigen den Knopfes nicht mehr notwendig ist. Dies vereinfacht den Vorgang des Anmeldens. Nachteilig ist, dass man somit nicht mehr “mitbekommt”, wenn ein Hintergrundprogramm SSH-Verbindungen aufbaut.

Knopflos-SSH-Schlüsselpaar anlegen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
uli@ulicsl:~$ ssh-keygen  -Ono-touch-required -t ecdsa-sk -f ~/.ssh/id_ecdsa_notouch_sk
Generating public/private ecdsa-sk key pair.
You may need to touch your authenticator to authorize key generation.

# Ausführung bleibt hängen - Knopf auf dem SoloKey drücken!

Enter passphrase (empty for no passphrase): (meine-passphrase)
Enter same passphrase again:  (meine-passphrase)
Your identification has been saved in /home/uli/.ssh/id_ecdsa_notouch_sk
Your public key has been saved in /home/uli/.ssh/id_ecdsa_notouch_sk.pub
The key fingerprint is:
SHA256:m95XBquHxumms0ijf9je1tlfvSWxDKixKiZgxosSmnE uli@ulicsl
The key's randomart image is:
+-[ECDSA-SK 256]--+
|                 |
|                 |
|                 |
|           ..    |
|.       S . .o.  |
|++E      *  .ooo.|
|=*.   oo=. = =+ +|
|=.. oo.=+oO = ..+|
|.  o.o+o=O+o   o.|
+----[SHA256]-----+

Knopflos-Schlüssel auf Server hinterlegen

Wir können den Schlüssel nicht einfach mit ssh-copy-id auf dem Server hinterlegen, weil wir beim Hinterlegen die Option “no-touch-required” mit angeben müssen. Also:

  1. Anmelden am Server: ssh gitea
  2. Anpassen von .ssh/authorized_keys:

    no-touch-required sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZ... uli@ulicsl

  3. Sicherstellen: Zugriffsrechte passen: chmod 700 .ssh; chmod 600 .ssh/authorized_keys

Knopflos-Schlüssel in SSH-Agent hinterlegen

1
2
3
uli@ulicsl:~$ ssh-add ~/.ssh/id_ecdsa_notouch_sk
Enter passphrase for /home/uli/.ssh/id_ecdsa_notouch_sk:  (meine-passphrase)
Identity added: /home/uli/.ssh/id_ecdsa_notouch_sk (uli@ulicsl)

Serveranmeldung mit neuem Knopflos-Schlüssel

1
2
3
4
5
6
7
8
uli@ulicsl:~$ ssh -i .ssh/id_ecdsa_notouch_sk gitea
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.8.0-36-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Sat Jan  9 11:36:59 2021 from 10.38.131.1
root@gitea:~# 

Kompatibilität

Einsatzzweck Klappt? Anmerkungen
SSH-Anmeldung an Ubuntu-14.04 Nein
SSH-Anmeldung an Ubuntu-16.04 Nein
SSH-Anmeldung an Ubuntu-18.04 Nein
SSH-Anmeldung an Ubuntu-18.04@DP Ja Mit rückportiertem OpenSSH von 20.04
SSH-Anmeldung an Ubuntu-20.04 Ja
LUKS-Entsperren Ubuntu-20.04 Nein DropbearSSH scheint SK-Schlüssel nicht zu unterstützen
SSH-Anmeldung SLES-11 Nein
SSH-Anmeldung SLES-12 Nein
Gitea-1.13.2 Nein Für git clone ...
Gitea-1.13.2@DPSERV2 Ja PAG-GITEA, Für git clone ... – Patch aktiviert
Gitea-1.13.2@Ilmarinen Ja DP-GITEA, Für git clone ... – Patch aktiviert
Gitbucket@DP ?
Bitbucket@Highway ?
Gitlab@Freeway ?
Gitlab@Gravity ?

Tests und Probleme

Verwendung des Schlüsseltyps “ed25519-sk”

1
2
3
4
uli@ulicsl:~$ ssh-keygen -t ed25519-sk -f ~/.ssh/id_ed25519_sk
Generating public/private ed25519-sk key pair.
You may need to touch your authenticator to authorize key generation.
Key enrollment failed: requested feature not supported

Test mit SLES11

Anmeldetests mit SLES11 sind gescheitert. Weder Standard-SSH-Schlüsselpaar noch das Knopflos-SSH-Schlüsselpaar funktionieren!

Auf dem SLES11-Rechner ist SSH-2.0-OpenSSH_6.6.1 aktiv!

Test mit SLES12

Anmeldetests mit SLES12 sind gescheitert. Weder Standard-SSH-Schlüsselpaar noch das Knopflos-SSH-Schlüsselpaar funktionieren!

Auf dem SLES12-Rechner ist SSH-2.0-OpenSSH_7.2 aktiv!

Test mit Ubuntu-14.04

  • Stardard-OpenSSH-6.6.1: SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.13 – klappt nicht!

Test mit Ubuntu-16.04

  • Standard-OpenSSH-7.2: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10 – klappt nicht!

Test mit Ubuntu-18.04

  • Standard-OpenSSH-7.6: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3 – klappt nicht!
  • Rückportiertes OpenSSH-8.2: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4dp01~bionic0.1 – klappt!

Test mit Ubuntu-20.04

Klappt! Das ganze Dokument habe ich mit Ubuntu-20.04 durchgespielt!

Links und Referenzen

Historie und Anmerkung

  • 2021-02-19: Klarstellung “… an Ubuntu-xx.yy”, DP-GITEA
  • 2021-02-15: Dropbear zum Entsperren von LUKS
  • 2021-02-14: Diverse SSH-Versionen, Tabelle
  • 2021-01-16: Ubuntu-18.04 mit OpenSSH.8.2
  • 2021-01-09: Erste Version