macOS Sierra sembra non ricordare le chiavi SSH tra i riavvii

171

Devo eseguire questo comando dall'aggiornamento a macOS:

ssh-add -K

Corregge il problema dopo il riavvio, ma devo eseguire questo comando ogni volta che accedo al mio computer.

Se non eseguo il comando sopra, le mie chiavi in ~/.ssh vengono saltate e mi viene richiesta la password del server per stabilire la connessione.

    
posta bisherbas 25.09.2016 - 14:39
fonte

10 risposte

198

A partire da macOS Sierra 10.12.2 Apple ha aggiunto un'opzione ssh_config chiamata UseKeychain che consente una risoluzione "corretta" del problema. Aggiungi quanto segue al tuo file ~/.ssh/config :

Host *
   AddKeysToAgent yes
   UseKeychain yes     

Dalla pagina ssh_config man su 10.12.2:

UseKeychain

On macOS, specifies whether the system should search for passphrases in the user's keychain when attempting to use a particular key. When the passphrase is provided by the user, this option also specifies whether the passphrase should be stored into the keychain once it has been verified to be correct. The argument must be 'yes' or 'no'. The default is 'no'.

    
risposta data 15.12.2016 - 14:56
fonte
103

Ho avuto questo problema anche quando ho tentato di distribuire del codice usando Capistrano . Molto frustrante. Ecco due metodi che conosco per affrontare questo problema.

Metodo 1: aggiungi tutte le chiavi conosciute all'agente SSH.

Quindi, una soluzione che ho trovato è quella di eseguire ssh-add con l'opzione -A - che aggiunge tutte le identità conosciute all'agente SSH usando qualsiasi passphrase memorizzata nel tuo portachiavi -come questo:

ssh-add -A

Ora funziona, ma non continuerà con i riavvii. Quindi, se non vuoi più preoccuparti di questo, apri il file ~/.bash_profile dell'utente in questo modo:

nano ~/.bash_profile

E aggiungi questa linea in basso:

ssh-add -A 2>/dev/null;

Ora quando apri una nuova finestra di Terminale, tutto dovrebbe andare bene!

Metodo 2: aggiungi solo le chiavi SSH che si trovano nel portachiavi all'agente.

Quindi, mentre l'opzione ssh-add -A dovrebbe funzionare per la maggior parte dei casi di base, mi sono imbattuto in un problema di recente in cui avevo installato su una macchina 6-7 caselle di Vagrant (che usa chiavi SSH / identità per l'accesso) più comune id_rsa.pub al posto.

Per farla breve, ho finito per essere bloccato da un server remoto a causa di troppi tentativi falliti basati su chiavi / identità SSH poiché l'accesso al server era basato su una password e le chiavi SSH / identità sono chiavi / identità SSH. Quindi l'agente SSH ha provato tutti delle mie chiavi SSH, non è riuscito e non sono riuscito a ottenere la richiesta della password.

Il problema è che ssh-add -A aggiungerà arbitrariamente ogni singola chiave / identità SSH che hai all'agente anche se non è necessario farlo; come nel caso delle scatole di Vagrant.

La mia soluzione dopo molti test è stata la seguente.

Innanzitutto, se al tuo agente sono state aggiunte più chiavi SSH / identità di quante ne hai bisogno, come mostrato con ssh-add -l , quindi elimina tutte dall'agente in questo modo:

ssh-add -D

Fatto ciò, quindi avviare l'agente SSH come processo in background in questo modo:

eval "$(ssh-agent -s)"

Ora, diventa strano e non sono sicuro del perché. In alcuni casi è possibile aggiungere in modo specifico la chiave / identità ~/.ssh/id_rsa all'agente in questo modo:

ssh-add ~/.ssh/id_rsa

Inserisci la tua passphrase, premi Invio e dovresti andare.

Ma in altri casi è sufficiente eseguire questa operazione per ottenere l'aggiunta della chiave / identità:

ssh-add -K

Se tutto funziona, digita ssh-add -l e dovresti vedere una sola chiave SSH / identità elencata.

Tutto bene? Ora apri .bash_profile :

nano ~/.bash_profile

E aggiungi questa linea in fondo; commenta o rimuovi la versione -A se disponi di tale posizione:

ssh-add -K 2>/dev/null;

Questo permetterà alla chiave SSH / identità di essere ricaricata all'agente SSH ad ogni avvio / riavvio.

AGGIORNAMENTO: Apple ha ora aggiunto un'opzione UseKeychain alle opzioni di configurazione SSH aperte e considera anche ssh-add -A una soluzione.

A partire da macOS Sierra 10.12.2, Apple ha aggiunto un'opzione di configurazione UseKeychain per le configurazioni SSH. Il controllo della pagina man (tramite man ssh_config ) mostra le seguenti informazioni:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ''yes'' or ''no''.  The default is ''no''.

Che si riduce ad Apple che vede la soluzione aggiungendo ssh-add -A al tuo .bash_profile come spiegato in questo ticket Open Radar o aggiungendo UseKeychain come una delle opzioni in per utente ~/.ssh/config .

    
risposta data 27.09.2016 - 04:23
fonte
14

Ho scritto un breve post su questo argomento che potrebbe aiutarti.

Una soluzione chiama il comando ssh-add -A ad ogni avvio.

Aggiungi semplicemente .plist file con il seguente contenuto al percorso ~/Library/LaunchAgents/ o creane uno con Lingon app:

<?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>ssh-add-a</string>
    <key>ProgramArguments</key>
    <array>
        <string>ssh-add</string>
        <string>-A</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

<!-- @@@@LingonWhatStart:ssh-add -A@@@@LingonWhatEnd -->
    
risposta data 06.10.2016 - 00:36
fonte
14

Come spiegato qui , questo è il metodo raccomandato poiché macOS 10.12 .2 :

  1. Aggiungi le seguenti righe al tuo file ~/.ssh/config :

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Qualsiasi chiave aggiunta a ssh-agent utilizzando il comando ssh-add /path/to/your/private/key/id_rsa verrà automaticamente aggiunta al portachiavi e dovrebbe essere caricata automaticamente al riavvio.

Sto aggiungendo questa risposta perché:

  • Altre risposte ti dicono di aggiungere la riga IdentityFile ~/.ssh/id_rsa , ma quell'opzione non è necessaria per il caricamento automatico delle chiavi (e in realtà associerà quella particolare chiave per la sezione host a cui la aggiungi, che non vorrai se usi chiavi diverse per diversi hots).
  • La risposta accettata cita UseKeychain , ma ciò non è sufficiente per mantenere le chiavi in ssh-agent dopo un riavvio.
risposta data 06.03.2017 - 22:36
fonte
7

Da macOS 10.12.2 puoi usare l'opzione UseKeychain . Leggi di più qui o consulta man ssh_config .

     UseKeychain
         On macOS, specifies whether the system should search for passphrases in the user's keychain
         when attempting to use a particular key. When the passphrase is provided by the user, this
         option also specifies whether the passphrase should be stored into the keychain once it has
         been verified to be correct.  The argument must be ''yes'' or ''no''.  The default is ''no''.

Quindi procedi come segue:

echo "UseKeychain yes" >> ~/.ssh/config

    
risposta data 26.01.2017 - 11:22
fonte
3

Ho avuto questo problema prima e ho trovato un modo per aggirare questo problema. Ho appena creato un file denominato config nella mia cartella ~/.ssh , in cui ho aggiunto le seguenti righe:

Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes

Non sono sicuro del perché, ma Host e HostName sono entrambi importanti. Nel mio caso, se uno di questi non era presente, la soluzione non funzionava.

Poi, ho appena fatto un ssh-add -K e funzionava anche dopo il riavvio.

    
risposta data 03.11.2016 - 06:57
fonte
2

Ho trovato che ssh-add -K mi ha fornito " opzione illegale - K ". Questo perché ssh-add era una strana versione proveniente da / usr / local / bin (installata da brew?). Sono stato in grado di aggiungere la chiave con l'uso specifico di ssh-add situato in / usr / bin:

/usr/bin/ssh-add -K ~/.ssh/id_rsa
    
risposta data 11.10.2016 - 19:54
fonte
1

Modifica di ~ / .ssh / config per aggiungere UseKeyChain per tutti gli host è abbastanza per fermare questo incubo ricorrente;)

Host *
 UseKeychain yes

Se il file è vuoto o non esiste semplice creare e / o aggiungere la configurazione di cui sopra.

    
risposta data 27.02.2017 - 15:10
fonte
1

Se si utilizza una versione diversa di ssh (ad esempio, installata tramite homebrew), le soluzioni di cui sopra non funzioneranno immediatamente. Ad esempio, AddKeysToAgent yes e UseKeychain yes nel file .ssh/config non vengono riconosciuti dalle versioni ssh non Apple e causeranno un errore. Lo stesso vale per l'opzione -A o -K per il client ssh .

Ciò significa che la risposta @mluisbrown non funzionerà affatto. Puoi utilizzare il metodo 1 della risposta @JakeGould e utilizzare esplicitamente l'utilità macOS ssh-add nella tua .bash_profile per aggiungere tutte le chiavi al portachiavi, ovvero:

/usr/bin/ssh-add -A

Come menzionato da un commento sopra , potresti dover aggiungere prima una chiave al portachiavi: ad es. /usr/bin/ssh-add -K .ssh/github

    
risposta data 17.06.2017 - 20:02
fonte
0

Ho aggiornato a Mac OS X Sierra (10.12.6). Potrei ssh in altri host ma non su github.com.

Questo è quello che ho dovuto inserire in ~ / .ssh / config:

PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa

Dopo questa modifica, potrei usare github come prima.

    
risposta data 06.08.2018 - 18:41
fonte

Leggi altre domande sui tag