Zum Inhalt

SSH-Verbindung gesichert! - YubiKey am Mac

Die Anmeldung mit einem YubiKey an einem entfernten Server ist mit SSH ist eine sehr sichere und komfortable Methode für die Anmeldung per Secure Shell (SSH).

Als Benutzer musst du dir nicht mehr irgendwelche Passwörter merken und den privaten SSH-Schlüssel umständlich auf deinem Client oder einem USB-Stick verwalten.

Der private Schlüssel liegt mit einem 6-stelligen PIN gesichert auf dem YubiKey. Erst nach erfolgreicher Eingabe wird der private SSH-Schlüssel freigegeben und eine Anmeldung des Clients am Server ist möglich.

Gibt man den PIN dreimal falsch ein, ist der YubiKey gesperrt und lässt sich nur mit dem PUK entsperren.

Für die Betriebssysteme Windows und Linux habe ich die Konfiguration des Clients bereits hier im Blog beschrieben (👉 YubiKey Themenseite). Nun folgt die Anleitung für MacOS Monterey.

GPG-Installieren

Ist bereits eine GPG-Version auf deinem Mac installiert, kannst du das im Terminal mit dem Befehl abfragen.

gpg --version

Ist GPG auf dem Mac noch nicht installiert, kannst du die erforderlichen Pakete am einfachsten mit der Hilfe von Homebrew installieren.

Mit dem folgenden Befehl installierst du alle notwendigen Programme, die für die Anleitung benötigt werden. Voraussetzung ist, dass du den Paketmanager Homebrew bereits auf deinem Mac installiert hast.

Nach der Installation der gpg-suite wirst du gefragt, ob du eine E-Mail-Erweiterung installieren möchtest. Das kannst du getrost verneine, die wird nicht benötigt.

brew install gnupg gnutls pinentry pinentry-mac 

brew install --cask gpg-suite

Die Links zu den Homebrew Formulae

GPG-Agent und SSH-Support aktivieren

Du kannst den YubiKey jetzt bereits an deinem Mac anschließen und testen, ob er erkannt wird.

gpgconf --launch gpg-agent
export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh
ssh-add -l

Du erhältst als Ausgabe eine lange Nummer. Damit ist sichergestellt, der Hardwaretoken wird erkannt und kann an deinem Mac verwendet werden. Für die SSH-Anmeldung sind aber noch ein paar weitere Schritte notwendig.

Apple verwendet bei seinen Betriebssystemen seit Monterey die Z Shell (zsh). In die Konfigurations-Datei sind die folgenden Zeilen einzufügen. Sollte die Datei noch nicht vorhanden sein, lege sie mit einem Editor deiner Wahl ganz einfach an.

Die Konfigurationsdatei ist direkt im Home-Ordner deines Benutzers zu finden.

  • für die Z Shell ist die Datei .zsh_profile
  • .bash_profile - verwendest du eine ältere Version des Betriebssystems, dann hast du wahrscheinlich noch die bekanntere Bash in Verwendung. Kein Problem, editiere die Konfigurationsdatei und füge die Zeilen einfach dort am Ende ein.
gpgconf --launch gpg-agent
export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh

Im nächsten Schritt ist die gpg-agent.cong zu bearbeiten.
Die folgenden Zeilen sind in die Datei ~/.gnupg/gpg-agent.conf einzufügen. Ist die Datei nicht vorhanden, lege die Datei neu an.

enable-ssh-support

default-cache-ttl 28800
max-cache-ttl 28800

Im gleichen Verzeichnis ist auch die Datei ~/.gnupg/gpg.conf zu editieren. Auch hier gilt, ist die Datei nicht vorhanden, lege sie neu an.

# Uncomment within config (or add this line)
use-agent

# This silences the "you need a passphrase" message once the passphrase handling is all set.
# Use at your own discretion - may prevent the successful interactive use of some operations.
# It is working fine for my use cases though.
batch
no-emit-version

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Es werden noch drei Dateien benötigt, die du im Verzeichnis /Users/benutzername/Library/LaunchAgents ablegen musst.

  1. Datei gnupg.gpg-agent-symlink.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ProperyList-1.0/dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>gnupg.gpg-agent-symlink</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>-c</string>
            <string>/bin/ln -sf $HOME/.gnupg/S.gpg-agent.ssh $SSH_AUTH_SOCK</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>
  1. Datei gnupg.gpg-agent.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>gnupg.gpg-agent</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <false/>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/MacGPG2/bin/gpg-connect-agent</string>
            <string>/bye</string>
        </array>
    </dict>
</plist>
  1. Datei link-ssh-auth-sock.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>link-ssh-auth-sock</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/sh</string>
    <string>-c</string>
    <string>/bin/ln -sf $HOME/.gnupg/S.gpg-agent.ssh $SSH_AUTH_SOCK</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Die Verlinkungen sind mit den Befehlen herzustellen:

$ launchctl load -F ~/Library/LaunchAgents/gnupg.gpg-agent.plist

$ launchctl list | grep gpg-agent

$ pgrep -fl gpg-agent

Die Konfiguration für SSH sind entsprechend vorzunehmen:

launchctl load -F ~/Library/LaunchAgents/link-ssh-auth-sock.plist

Die genaue Beschreibung findest du hier:

Das wars!

Im Terminal kannst du die SSH-Verbindung aufbauen. Es erscheint eine neue Maske, wo du den PIN für den YubiKey eingeben musst. Ist der korrekt, wird die Verbindung zu deinem Server hergestellt.

ssh benutzername@ip-adresse-des-servers

Beim ersten Verbindungsaufbau kann es sein, dass du aufgefordert wirst eine andere Karte einzulegen. Die Meldung lautet:

Bitte legen Sie die Karte mit der folgenden Seriennummer ein:

Die Beschreibung, wie das Problem gelöst wird, findest du natürlich hier in meinem Blog.

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source