SSH-Schlüssel zu ssh-agent und zum macOS-Schlüsselbund hinzufügen

Tragen Sie AddKeysToAgent yes und UseKeychain yes in ~/.ssh/config ein, führen Sie dann einmal ssh-add --apple-use-keychain ~/.ssh/id_ed25519 aus und geben Sie die Passphrase ein. Sie wird im Anmelde-Schlüsselbund gespeichert, und ssh lädt den Schlüssel bei Bedarf in den Agent, auch nach einem Neustart. Die alten Optionen -K und -A heißen jetzt --apple-use-keychain und --apple-load-keychain.

Genug von ssh-add und Passphrase-Abfragen? Wardterm kann der SSH-Agent für Terminal, git und Ihren Editor sein. Zeigen

Aktualisiert am . ssh-add -l, -d, -t und -D, AddKeysToAgent und IdentitiesOnly mit einer öffentlichen Schlüsseldatei liefen mit dem in macOS enthaltenen OpenSSH 10.3, mit Wegwerf-Schlüsseln ohne Schlüsselbund-Eintrag.

Die ssh-Konfiguration einrichten

Tragen Sie dies in ~/.ssh/config ein:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519
  • UseKeychain yes sucht die Passphrase im Schlüsselbund, wenn ein Schlüssel verwendet wird, und speichert sie dort, nachdem Sie sie richtig eingegeben haben.
  • AddKeysToAgent yes fügt den Schlüssel bei der ersten Verwendung dem laufenden Agent hinzu, sodass er für spätere Verbindungen entsperrt bleibt.
  • IdentityFile benennt den Schlüssel. Ohne diese Zeile probiert ssh trotzdem die Standardnamen.

Eine Schlüsseldatei ohne Passphrase hat nichts zu speichern. Hat Ihre keine, fügen Sie zuerst mit ssh-keygen -p -f ~/.ssh/id_ed25519 eine hinzu.

Noch keinen Schlüssel? Siehe wie Sie einen Ed25519-SSH-Schlüssel erzeugen, und vergeben Sie dabei eine Passphrase.

Die Passphrase speichern

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Geben Sie die Passphrase einmal ein. Prüfen Sie dann, ob der Agent den Schlüssel hält:

ssh-add -l

Es listet den Fingerprint jedes geladenen Schlüssels auf und meldet The agent has no identities., wenn es keine gibt.

Sie müssen den Agent nicht selbst starten. Unter macOS startet launchd ssh-agent bei Bedarf für Ihre Sitzung, und SSH_AUTH_SOCK zeigt bereits darauf. Tragen Sie eval "$(ssh-agent)" nicht in Ihr Shell-Profil ein: Das startet in jeder Shell einen eigenen Agent.

Nach einem Neustart

Der Agent startet nach einem Neustart leer, aber die Passphrase liegt weiterhin im Schlüsselbund. Mit der obigen Konfiguration liest Ihre erste ssh-Verbindung sie von dort und lädt den Schlüssel in den Agent. Um stattdessen alle gespeicherten Schlüssel auf einmal zu laden:

ssh-add --apple-load-keychain

Apple hat dieses Verhalten in macOS 10.12.2 geändert. Ältere Anleitungen gehen womöglich davon aus, dass Schlüssel sich von selbst laden. Werden Sie immer wieder nach der Passphrase gefragt, prüfen Sie, ob AddKeysToAgent yes und UseKeychain yes beide gesetzt sind.

Die alten Optionen -K und -A

Ältere Anleitungen verwenden ssh-add -K und ssh-add -A. Laut Apples Handbuchseite wurden sie in --apple-use-keychain und --apple-load-keychain umbenannt. In manchen Fällen funktionieren sie noch, aber im Standard-OpenSSH bedeutet -K etwas anderes, im Zusammenhang mit Hardware-Schlüsseln. Verwenden Sie die langen Namen.

Wenn Sie ein anderes ssh auf demselben Mac nutzen

UseKeychain gibt es nur in dem ssh, das Apple mitliefert. Andere Builds, etwa von Homebrew oder von einem Linux-Rechner, der Ihre Dotfiles teilt, brechen mit diesem Fehler ab:

Bad configuration option: usekeychain

Um eine Konfiguration für alle zu behalten, sagen Sie ssh, dass es die Option ignorieren soll, wo sie unbekannt ist. Das muss vor der Zeile stehen, die sie verwendet:

IgnoreUnknown UseKeychain

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

Um zu sehen, welches Sie gerade ausführen:

which ssh
ssh -V

Apples Build liegt in /usr/bin/ssh. Die Optionen mit --apple- gibt es ebenfalls nur in Apples /usr/bin/ssh-add.

Zu viele Schlüssel: IdentitiesOnly

Standardmäßig bietet ssh jeden Schlüssel im Agent an, dazu die konfigurierten Dateien. Bei mehreren Schlüsseln kann das in Too many authentication failures enden und verrät jedem Server Schlüssel, die er nicht zu sehen braucht. Beschränken Sie einen Host auf einen Schlüssel:

Host server
  HostName 203.0.113.10
  User user
  IdentityFile ~/.ssh/id_ed25519_work
  IdentitiesOnly yes

IdentitiesOnly yes schaltet den Agent nicht ab. Hält der Agent den genannten Schlüssel, nutzt ssh ihn weiterhin von dort, und die Passphrase wird nicht erneut abgefragt. IdentityFile kann sogar auf die .pub-Datei zeigen, wenn der private Schlüssel nur im Agent liegt.

Einen Schlüssel entfernen oder begrenzen

ssh-add -d ~/.ssh/id_ed25519                        # remove one key from the agent
ssh-add -D                                          # remove all keys from the agent
ssh-add --apple-use-keychain -d ~/.ssh/id_ed25519   # remove from the agent and the Keychain
ssh-add -t 3600 ~/.ssh/id_ed25519                   # keep the key loaded for one hour

Das einfache -d und -D leeren nur den Agent. Mit UseKeychain yes liegt die Passphrase weiterhin im Schlüsselbund, und der Schlüssel kommt bei Ihrer nächsten Verbindung zurück.

Jeder, der auf einem entsperrten Mac als Sie angemeldet ist, kann die Schlüssel im Agent nutzen, ebenso jedes Programm, das Sie ausführen. Wenn Sie das beunruhigt, verwenden Sie AddKeysToAgent confirm, damit jede Nutzung bestätigt werden muss, beachten Sie aber, dass dies ein funktionierendes SSH_ASKPASS-Programm braucht. Überlegen Sie sich auch gut, ob Sie Agent-Weiterleitung nutzen: siehe die Risiken der Agent-Weiterleitung.

Fragen

Warum fragt mein Mac immer wieder nach der Passphrase meines SSH-Schlüssels?

Meist fehlt AddKeysToAgent yes oder UseKeychain yes in ~/.ssh/config. Tragen Sie beide ein und führen Sie einmal ssh-add --apple-use-keychain mit Ihrem Schlüssel aus.

Funktioniert ssh-add -K unter macOS noch?

Apple hat es in --apple-use-keychain umbenannt und -A in --apple-load-keychain. Im Standard-OpenSSH bedeutet -K etwas anderes, das mit Hardware-Schlüsseln zu tun hat. Nutzen Sie also die langen Namen.

Wie sehe ich, welche Schlüssel ssh-agent hält?

Führen Sie ssh-add -l aus. Es zeigt den Fingerabdruck jedes geladenen Schlüssels, oder The agent has no identities., wenn er leer ist.

Quellen

Mehr zu Schlüssel und Anmeldung

Alle Anleitungen