Come posso aggiungere permanentemente la mia chiave privata SSH a Keychain in modo che sia automaticamente disponibile per ssh?


419

Sembra che ssh-add -K ~/.ssh/id_rsacaricherà la chiave ma chiederà la password ogni volta che si riavvia.

Sto cercando una soluzione che non mi imponga di reinserire la password della chiave tra gli accessi.


1
Puoi dirci qualcosa in più su quando ti viene richiesta la password? Lo chiedo perché ho una chiave ssh per un server remoto, che ti assicuro non è la stessa password di accesso del mio Mac o altro, e non ho dovuto inserire la password per la chiave ssh da anni . Posso solo aprire un terminale, digitare "ssh <server>" e sono lì. Penso di aver prima impostato questa chiave in OSX 10.5. id_dsa, ma non penso che dovrebbe importare.
Michael H.

La mia id_rsachiave ha una password.
sorin,

Ho anche il problema che ho risolto così tanto tempo fa che non riesco a ricordare esattamente cosa ho fatto. Ma penso che l'idea sia di non correre ssh-add, ma di correre sshdirettamente. Dovresti visualizzare una finestra che fungerà da passphrase per la chiave e con una casella di controllo che ti consentirà di memorizzarla nel tuo portachiavi.
Harald Hanche-Olsen,

1
@Sorin - anche il mio! Ho dovuto accedervi una volta, tanto tempo fa, e il Mac l'ha salvato per me da allora. Spero che il consiglio di Harald possa essere d'aiuto.
Michael H.

Intendi la password del portachiavi (ovvero la password di accesso) o la passphrase della chiave? Se è quest'ultimo, le tue passphrase sono sicuramente memorizzate nel Portachiavi? Puoi verificarlo aprendo Accesso portachiavi e cercandolo nel portachiavi di accesso.
Mathew Hall,

Risposte:


688

Su OSX, il ssh-addclient nativo ha un argomento speciale per salvare la passphrase della chiave privata nel portachiavi OSX, il che significa che il tuo login normale lo sbloccherà per l'uso con ssh. Su OSX Sierra e versioni successive, devi anche configurare SSH per utilizzare sempre il portachiavi (vedi il passaggio 2 di seguito).

In alternativa puoi usare una chiave senza passphrase, ma se preferisci la sicurezza è sicuramente accettabile con questo flusso di lavoro.

Passaggio 1: conservare la chiave nel portachiavi

Fallo una volta sola:

ssh-add -K ~/.ssh/[your-private-key]

Inserisci la passphrase della chiave e non ti verrà più chiesto.

(Se utilizzi una versione pre-Sierra di OSX, il passaggio 2 non è necessario.)

Passaggio 2: configura SSH per utilizzare sempre il portachiavi

Sembra che OSX Sierra abbia rimosso il comodo comportamento di mantenere le chiavi tra gli accessi e l'aggiornamento a ssh non utilizza più il portachiavi per impostazione predefinita. Per questo motivo, ti verrà richiesto di inserire la passphrase per una chiave dopo l'aggiornamento e di nuovo dopo ogni riavvio.

La soluzione è abbastanza semplice ed è delineata in questo commento sul thread github . Ecco come configurarlo:

  1. Assicurati di aver completato il passaggio 1 sopra per memorizzare la chiave nel portachiavi.

  2. Se non lo hai già fatto, crea un ~/.ssh/configfile. In altre parole, nella .sshdirectory nella tua home directory, crea un file chiamato config.

  3. In quel .ssh/configfile, aggiungi le seguenti righe:

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

    Passa ~/.ssh/id_rsaal nome file effettivo della tua chiave privata. Se hai altre chiavi private nella tua ~.sshdirectory, aggiungi anche una IdentityFileriga per ognuna di esse. Ad esempio, ho una riga aggiuntiva che legge IdentityFile ~/.ssh/id_ed25519per una seconda chiave privata.

    Questa UseKeychain yesè la parte chiave, che dice a SSH di cercare nel tuo portachiavi OSX la passphrase della chiave.

  4. Questo è tutto! La prossima volta che caricherai qualsiasi connessione ssh, proverà le chiavi private che hai specificato e cercherà la loro passphrase nel portachiavi OSX. Non è richiesta la digitazione della passphrase.


2
Questo ha funzionato quasi per me. Il mio portachiavi "login" aveva già il blocco automatico disabilitato, quindi la risposta di Matthew Sanabria non si applicava. L'utilizzo di ha ssh-add -K ...aggiunto le chiavi all'agente ssh senza richiedere una password, ma solo per la sessione corrente. Dopo un riavvio, ho dovuto immettere nuovamente il comando.
Poulsbo,

4
@Poulsbo & @Abram - vedi il mio aggiornamento, Sierra ha cambiato il comportamento automatico e ora devi eseguire ssh-add -Amanualmente per caricare il tuo portachiavi salvato. Alcune possibili soluzioni citate sopra.
trisweb,

3
@trisweb Grazie per il suggerimento. La soluzione di joshbuchea di modificare il .ssh/configfile sembra promettente! Vedi github.com/lionheart/openradar-mirror/issues/…
Poulsbo

2
@sorin vedi la risposta aggiornata e fammi sapere se hai qualche feedback. Grazie!
trisweb,

9
Funziona alla grande! Nel mio caso avevo bisogno di usare il Aflag oltre a Kquello per aggiungere le mie chiavi al portachiavi e registrare la passphrase in esso ( ssh-add -AK ~/.ssh/[your-private-key]). Grazie!
youssman,

22

Avevo un problema simile, in quanto mi veniva chiesto OGNI VOLTA per la mia passphrase di chiave da pub.

Per suggerimento dell'utente "trisweb" sopra, ho attivato queste opzioni su ~ / .ssh / config:

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

MA è stato ancora richiesto ogni volta che volevo usare ssh.

Alla fine ho attivato "ssh -v" e ho trovato questa riga di debug:

debug1: key_load_private: passphrase errata fornita per decrittografare la chiave privata

Ho quindi aperto il mio portachiavi in ​​"Keychain Access.app", ho trovato la chiave denominata "SSH: /Users/username/.ssh/id_rsa" e l'ho aperto.

Ho fatto clic su "Mostra password" per rivelare la password e ho effettivamente scoperto che la passphrase nel portachiavi era una passphrase precedente.

Ho aggiornato la passphrase in Keychain Access e ora funziona senza password.

Avrei potuto anche aggiornare la passphrase con questa frase:

ssh-keygen -p -f ~ / .ssh / id_rsa


13

Ti viene richiesta la password ogni volta perché il tuo portachiavi "login" viene bloccato dopo inattività e / o sospensione o nel tuo caso un riavvio. Esistono due modi per risolverlo.

  1. Modifica le impostazioni per il tuo portachiavi "login". Supponendo che la chiave ssh sia memorizzata nel portachiavi "login".

    • Apri Accesso portachiavi
    • Evidenzia il portachiavi "login"
    • Fare clic con il tasto destro o fare clic con il tasto destro del mouse sul portachiavi "login"
    • Deseleziona le caselle di controllo "Blocca dopo X minuti di inattività" e "Blocca durante il sonno".
  2. Genera un'altra chiave SSH senza usare una passphrase.

    • Terminale aperto.
    • Inserisci il comando: ssh-keygen -t rsa -b 4096 -C <comment> -f <.ssh/id_rsa>
    • -t è per tipo, -b è la dimensione della chiave, -C è un commento, -f file di output (è necessario prima creare le directory)
    • Non impostare una passphrase.
    • Importa la chiave SSH nel portachiavi "login" con ssh-add -K <path to ssh key>

Non dovresti più richiedere una password per il portachiavi.


2
Si noti che quando si richiama ssh-adddall'interno di SSH, è security unlock-keychainnecessario chiamare prima. Inoltre, non ho dovuto creare le directory per il -fparametro. Sfortunatamente, dovevo ancora chiamare security unlocl-keychainnelle sessioni SSH per accedere al Keychain di accesso, che richiede ogni volta la password ...
Ohad Schneider,

2
Il punto è avere una passphrase sulla chiave. Dubito che la generazione di una nuova chiave SSH sia utile alla domanda.
Gray,

7

Inoltre, in macOS Sierra e HighSierra (non sono a conoscenza delle versioni precedenti), l'esecuzione ssh-add -Aconsentirà all'agente di caricare tutte le chiavi le cui passphrase sono memorizzate sul Portachiavi ... Molto utile


7

Per tutto quanto sopra in cui non ha funzionato, il mio problema sembra essere stato perché ero duplicando il UseKeychain yes& AddKeysToAgent yesin tutte le chiavi SSH profili / scorciatoie. Ho aggiornato il mio ~/.ssh/configfile per dichiararli solo una volta e ora caricano tutti al momento dell'accesso senza richiedere password all'avvio, ad esempio:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar

Host foo
  HostName foo.com
  User fooUser
  IdentityFile ~/.ssh/foo

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar

-3

Aggiungi la chiave pubblica in:

.ssh/known_hosts

La chiave pubblica di solito è attiva:

/home/user/.ssh/id_rsa.pub

spero che aiuti


8
Penso che significhiauthorized_keys
Rene Larsen

Comunque, questo non funziona se hai più di una chiave!
sorin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.