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
- https://formulae.brew.sh/formula/gnupg#default
- https://formulae.brew.sh/formula/gnutls#default
- https://formulae.brew.sh/formula/pinentry#default
- https://formulae.brew.sh/formula/pinentry-mac#default
- https://formulae.brew.sh/cask/gpg-suite#default
GPG-Agent und SSH-Support aktivieren
Du kannst den YubiKey jetzt bereits an deinem Mac anschließen und testen, ob er erkannt wird.
Gib einfach den folgenden Codeblock im Terminal ein:
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.
Es werden noch drei Dateien benötigt, die du im Verzeichnis /Users/benutzername/Library/LaunchAgents
ablegen musst.
Note
Es kann sein, dass der Ordner 📂 LaunchAgents
noch nicht vorhanden ist, dann ist er einfach neu zu erstellen:
mkdir ~/Library/LaunchAgents
- 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>
- 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>
- 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
Tip
Taucht ein Fehler mit launchctl bootstrap is a recommended alternative
auf, dann kann ein vorherige unload
Abhilfe schaffen.
launchctl unload ~/Library/LaunchAgents/gnupg.gpg-agent.plist
Die Konfiguration für SSH sind entsprechend vorzunehmen:
launchctl load -F ~/Library/LaunchAgents/link-ssh-auth-sock.plist
Tip
Bei einem Fehler kann dieser Befehl Abhilfe schaffen:
launchctl unload ~/Library/LaunchAgents/link-ssh-auth-sock.plist
Nachdem alle Befehle erfolgreich durchgelaufen sind, sollte der Mac neugestartet werden.
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.
Follow Me❗️