Da ich gerade von Windows zurück zu macOS migriere, wollte ich auch die SSH Authentifizierung mit dem SSH Key auf meinem YubiKey weiterverwenden. Leider haben die meisten Konfigurationsdateinen für den GPG Agent nicht mehr für macOS Mojave funktioniert, daher möchte ich meine Konfiguration hier teilen.
In meinem Setuop verwende ich die GPG Version, die per Homebrew ausgeliefert wird. Die Eingabe der PIN zur Entsperrung des YubiKeys wird im Terminal mittels des Tools pinentry durchgeführt.
MacBook:~ mrxermon$ brew install gpg
==> Downloading https://homebrew.bintray.com/bottles/gnupg-2.2.13.mojave.bottle.tar.gz
Already downloaded: /Users/jgilla/Library/Caches/Homebrew/downloads/278d195b5f290b08cd467c5f77947bc2fb0ced4cd73ad3eec80e3641a45370ca--gnupg-2.2.13.mojave.bottle.tar.gz
==> Pouring gnupg-2.2.13.mojave.bottle.tar.gz
/usr/local/Cellar/gnupg/2.2.13: 134 files, 11.0MB
Danach wird die Konfiguration für den GPG Agenten angelegt, ggf. muss der Pfad zum pinentry Tool angepasst werden.
MacBook:~ mrxermon$ cat .gnupg/gpg-agent.conf
pinentry-program /usr/local/Cellar/pinentry/1.1.0_1/bin/pinentry
enable-ssh-support
default-cache-ttl 60
max-cache-ttl 120
Damit der GPG Agent direkt mit dem Öffnen des Terminals nutzbar ist, muss das Profile für die Shell angepasst werden. Für die BASH lautet die Konfiguration wie folgt.
MacBook:~ mrxermon$ cat .bash_profile
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
gpg-connect-agent updatestartuptty /bye > /dev/null
Da ich zu Beginn einen seltsamen Fehler beim Aufbau der Verbindung hatte, musste ich die Konfiguration um den markierten Eintrag erweitern. Der Fehler beim Aufbau der Verbindung lautete wie folgt.
sign_and_send_pubkey: signing failed: agent refused operation
Update für macOS Catalina (10/2019):
Da macOS Catalina nicht mehr bash sondern zsh als standard-Shell verwendet, muss der GPG Agent auch für diese Shell entsprechend aktiviert werden. Hierzu wird die o.g. Konfiguration exakt für zsh kopiert.
MacBook ~ % cat .zshrc
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
gpg-connect-agent updatestartuptty /bye > /dev/null