Come aggiungere una chiave SSH a ssh-agent e al Portachiavi di macOS

Aggiungi AddKeysToAgent yes e UseKeychain yes a ~/.ssh/config, poi esegui una volta ssh-add --apple-use-keychain ~/.ssh/id_ed25519 e digita la passphrase. Viene salvata nel Portachiavi di login, e ssh la carica nell'agent quando serve, anche dopo un riavvio. Le vecchie opzioni -K e -A ora si chiamano --apple-use-keychain e --apple-load-keychain.

Aggiornata il . ssh-add -l, -d, -t e -D, AddKeysToAgent e IdentitiesOnly con un file di chiave pubblica sono stati provati con l'OpenSSH 10.3 incluso in macOS, usando chiavi usa e getta senza voce nel Portachiavi.

Configurare ssh

Aggiungi questo a ~/.ssh/config:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519
  • UseKeychain yes cerca la passphrase nel Portachiavi quando una chiave viene usata, e la salva lì dopo che l'hai digitata correttamente.
  • AddKeysToAgent yes aggiunge la chiave all'agent in esecuzione la prima volta che viene usata, così resta sbloccata per le connessioni successive.
  • IdentityFile indica la chiave. Senza questa riga, ssh prova comunque i nomi predefiniti.

Un file di chiave senza passphrase non ha nulla da salvare. Se la tua non ne ha, aggiungine una prima con ssh-keygen -p -f ~/.ssh/id_ed25519.

Non hai ancora una chiave? Vedi come generare una chiave SSH Ed25519, e imposta una passphrase quando te la chiede.

Salvare la passphrase

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

Digita la passphrase una volta. Poi verifica che l'agent abbia la chiave:

ssh-add -l

Elenca il fingerprint di ogni chiave caricata, e dice The agent has no identities. se non ce ne sono.

Non devi avviare l'agent da solo. Su macOS, launchd avvia ssh-agent su richiesta per la tua sessione, e SSH_AUTH_SOCK punta già a lui. Non aggiungere eval "$(ssh-agent)" al profilo della shell: avvia un agent separato in ogni shell.

Dopo un riavvio

L'agent parte vuoto dopo un riavvio, ma la passphrase è ancora nel Portachiavi. Con la configurazione sopra, la tua prima connessione ssh la legge da lì e carica la chiave nell'agent. Per caricare invece tutte le chiavi salvate in una volta:

ssh-add --apple-load-keychain

Apple ha cambiato questo comportamento in macOS 10.12.2. Le istruzioni più vecchie possono presumere che le chiavi si carichino da sole. Se ti viene chiesta la passphrase di continuo, controlla che AddKeysToAgent yes e UseKeychain yes siano impostati entrambi.

Le vecchie opzioni -K e -A

Le guide più vecchie usano ssh-add -K e ssh-add -A. La pagina di manuale di Apple dice che sono state rinominate --apple-use-keychain e --apple-load-keychain. In certi casi funzionano ancora, ma in OpenSSH standard -K significa un'altra cosa, legata alle chiavi hardware. Usa i nomi lunghi.

Se usi un altro ssh sullo stesso Mac

UseKeychain esiste solo nell'ssh distribuito da Apple. Altre versioni, come quella di Homebrew o quella di una macchina Linux che condivide i tuoi dotfile, si fermano con questo errore:

Bad configuration option: usekeychain

Per tenere una sola configurazione per tutte, dì a ssh di ignorare l'opzione dove è sconosciuta. Deve venire prima della riga che la usa:

IgnoreUnknown UseKeychain

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

Per vedere quale stai eseguendo:

which ssh
ssh -V

La versione di Apple è in /usr/bin/ssh. Anche le opzioni --apple- esistono solo nel /usr/bin/ssh-add di Apple.

Troppe chiavi: IdentitiesOnly

Di default, ssh offre ogni chiave presente nell'agent, oltre ai file che hai configurato. Con più chiavi può finire in Too many authentication failures, e comunica a ogni server chiavi che non ha motivo di vedere. Limita un host a una sola chiave:

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

IdentitiesOnly yes non disattiva l'agent. Se l'agent ha la chiave indicata, ssh la usa comunque da lì, quindi la passphrase non viene chiesta di nuovo. IdentityFile può perfino puntare al file .pub quando la chiave privata è solo nell'agent.

Rimuovere o limitare una chiave

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

-d e -D semplici svuotano solo l'agent. Con UseKeychain yes la passphrase è ancora nel Portachiavi, e la chiave torna alla tua prossima connessione.

Chiunque sia collegato come te su un Mac sbloccato può usare le chiavi nell'agent, così come qualsiasi programma che esegui. Se la cosa ti preoccupa, usa AddKeysToAgent confirm così ogni uso richiede un'approvazione, ma tieni presente che serve un programma SSH_ASKPASS funzionante. Pensaci bene anche prima di usare l'inoltro dell'agent: vedi i rischi dell'inoltro dell'agent.

Domande

Perché il Mac continua a chiedermi la passphrase della chiave SSH?

Di solito in ~/.ssh/config manca AddKeysToAgent yes o UseKeychain yes. Aggiungili entrambi, poi esegui una volta ssh-add --apple-use-keychain con la tua chiave.

ssh-add -K funziona ancora su macOS?

Apple l'ha rinominato in --apple-use-keychain, e -A in --apple-load-keychain. Nell'OpenSSH standard -K significa un'altra cosa, legata alle chiavi hardware, quindi usa i nomi lunghi.

Come vedo quali chiavi ha ssh-agent?

Esegui ssh-add -l. Stampa il fingerprint di ogni chiave caricata, oppure The agent has no identities. se è vuoto.

Fonti

Altro in Chiavi e accesso

Tutte le guide