macOS continua a chiedere la mia passphrase ssh da quando ho effettuato l'aggiornamento a Sierra


588

Ricordava la passphrase, ma ora me lo chiede ogni volta.

Ho letto che ho bisogno di rigenerare la chiave pubblica con questo comando, che ho fatto:

ssh-keygen -y -f id_rsa > id_rsa.pub

ma non ha risolto nulla.

Come posso fare in modo che macOS ricordi di nuovo la mia passphrase?


Sto riscontrando un comportamento correlato: in precedenza, veniva visualizzata la finestra di dialogo del keyring per chiedere la password, ora ho appena ricevuto il normale prompt della console SSH. Alcune registrazioni di programmi di supporto probabilmente non sono più disponibili.
Daniel B,

1
Sono passati anni da quando ho generato il mio id_rsa e non ho mai usato una passphrase e non l'ho usata per ssh in molti server. Ho davvero una passphrase o è solo che Sierra pensa che dovrei? Nota che $ cat ~ / .ssh / id_rsa | testa -2 ----- INIZIA CHIAVE PRIVATA RSA ----- Tipo di proc: 4, ENCRYPTED
Joe Murray,


Se stai usando Pretzo e nessuna di queste risposte ha risolto il tuo problema: assicurati di non avere il sshmodulo abilitato zpretzorc. Non è comunque necessario su macOS e, se abilitato, ti chiederà la passphrase anche dopo averla aggiunta UseKeychain.
Jimothy,

1
prova a fare ssh -v ...per vedere se ha informazioni utili sul debug ...
rogerdpack,

Risposte:


1129

Nell'ultima versione di macOS (10.12.2), questo è facile da risolvere. Basta modificare il tuo ~/.ssh/confige abilitare l' UseKeychainopzione:

Host *
    UseKeychain yes

Non è necessario cambiare nient'altro. Ora tutto funziona come prima degli ultimi aggiornamenti. Non è necessario aggiungere chiavi a ssh-agent.


Modifica: potrebbe essere necessario inserire una volta la passphrase. Se non lo conosci, segui queste istruzioni per rivelarlo.


24
Questo ha funzionato assolutamente per me. Tutto sotto sembra più complicato di questa correzione.
Brillill

82
Nota, il Host *blocco dovrebbe (quasi) essere sempre posizionato in fondo al tuo ~/.ssh/configfile. Quando sshcerca le impostazioni utilizza il primo valore che trova. Quindi, mettendo il blocco jolly alla fine, agisce come un insieme di valori predefiniti; puoi sovrascrivere le impostazioni per host specifici specificandoli in precedenza nel file.
Molomby,

6
Questo ha funzionato anche per me, ma una volta ho dovuto inserire correttamente la passphrase. C'è un'altra risposta che descrive come visualizzare la password se non la ricordi.
FGreg,

26
Se il file di configurazione non esiste, anche crearne uno e aggiungerlo funzionerà.
Albero del

6
Non è necessario il Host *titolo. Basta aggiungere la riga singola UseKeychain yesnella parte superiore del tuo .ssh/configse si desidera che questo si applichi a tutti gli host.
sj26

185

Ho avuto lo stesso problema. Il portachiavi di MacOS Sierra continua a chiedere la passphrase. Il tuo id_rsa dovrebbe essere crittografato con una passphrase per sicurezza. Quindi prova ad aggiungerlo al portachiavissh-add -K ~/.ssh/id_rsa

Se la chiave si trova in un'altra cartella, ~/.sshsostituirla con la cartella corretta.

Il portachiavi ora conosce la tua chiave ssh e, si spera, tutto funziona ora (il mio l'ha fatto)


25
Funziona ma sembra non persistere quando riavvio il mio computer. Qualcun altro ha lo stesso problema?
joshua.paling,

1
Sì, lo stesso problema qui. @ joshua.paling
kingkool68,

18
@ joshua.paling, kingkool68 - Apple ha rimosso la possibilità di ricordare le chiavi SSH al riavvio per conformarsi al comportamento OpenSSH tradizionale. Vedi questa domanda per altri modi per ottenere la stessa funzionalità: apple.stackexchange.com/questions/254468/…
Evan Pon

@EvanPon Ma questo non funzionerà con le chiavi crittografate, vero?
Konrad Rudolph,

2
@KonradRudolph funziona per me. La chiamata ssh-addcon l' -Aopzione cercherà nel portachiavi di MacOS tutte le password per le identità in questione. Credo che ti chiederà se le password non sono nel portachiavi.
Evan Pon,

73

Questo risolto il mio problema simile:

/usr/bin/ssh-add -K

Questo memorizza le passphrase nel tuo portachiavi.

Aggiornamento (grazie @EasyCo): funziona ma non persiste tra i riavvii. @ La soluzione di Jukka-Suomela in questa pagina non funziona i riavvii. Puoi trovare questa risposta qui:

https://superuser.com/a/1158050/234685


3
Questa è l'unica cosa che funziona.
criptico0

5
Non è stato necessario creare .ssh / .config quando si utilizza questa soluzione.
Shai,

Questo ha funzionato per me. Non è necessario modificare il file host. Sono su Sierra.
cchiera,

Questo ha funzionato per me su Mac OS Sierra.
Dayron Gallardo,

2
Come affermato in precedenza, questo funziona ma non persiste tra i riavvii. La soluzione di @ jukka-suomela funziona attraverso il riavvio.
EasyCo

40

Ho dovuto inserire la passphrase corretta solo una volta e ha iniziato a funzionare. Il problema era che non ricordavo la mia passphrase SSH originale, ma l'ho recuperata seguendo questi passaggi da Github:

  • Nel Finder, cerca l'app Accesso Portachiavi.
  • In Accesso portachiavi, cerca SSH.
  • Fare doppio clic sulla voce per la chiave SSH per aprire una nuova finestra di dialogo.
  • Finestra di dialogo di accesso al portachiavi Nell'angolo in basso a sinistra, selezionare Mostra password.
  • Ti verrà richiesta la password amministrativa. Digitalo nella finestra di dialogo "Accesso portachiavi".
  • La tua password verrà rivelata.

2
Non funziona Il terminale dice ancora "passphrase errata"
Jayden Lawson il

18

Nessuna delle soluzioni di cui sopra ha funzionato dopo l'installazione di Sierra su El Capitan su un nuovo MacBook Pro. Sierra di progettazione non salva le chiavi SSH nel portachiavi.

Due soluzioni hanno funzionato per me. Uno è aggiungere il comando ssh-add -A &> /dev/nulla ~ / .bash_profile. Ogni volta che si apre il terminale, questo comando verrà eseguito (la &> /dev/nullparte invia all'output del comando il file / dev / null).

Una soluzione più complicata ma leggermente più delicata è quella di creare un plist con il comando che viene eseguito ogni volta che il sistema operativo viene avviato come suggerito in Salvataggio delle chiavi SSH nel portachiavi macOS Sierra . Ciò comporta l'uso di Xcode per creare il file.


Questa sembra essere anche la risposta ufficiale di Apple - vedi openradar.appspot.com/27348363
Nick Maynard,

La soluzione migliore fino ad ora per me. Sto usando Mac OSX Sierra (10.12.2).
zyc,

15

Una soluzione è aggiungere quanto segue al tuo file ~ / .ssh / config:

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

Tratto da: https://www.reddit.com/r/osx/comments/52zn5r/difficulty_with_sshagent_in_macos_sierra/ Vedi anche: https://apple.stackexchange.com/a/264974/3810


Finora, in nessuna delle risposte, qualcuno ha menzionato l' Bad configuration option: usekeychainerrore che ottengo con UseKeychain (comunque è in maiuscolo). Ma sono stato in grado di farlo funzionare rimuovendo solo quella riga e lasciando AddKeysToAgent e IdentityFile (devi ancora inserire la passphrase la prima volta). Questo è con macOS Sierra 10.12.6.
William Turrell,

funziona benissimo quando mi trovo nel terminale e utilizzo il comando ssh, ma altre app, come WebStorm che usano il proprio terminale, non accettano questa configurazione fino a quando non utilizzo per la prima volta un comando ssh nel terminale normale. allora funziona ovunque, qualche suggerimento?
santiago arizti,

@WilliamTurrell Se questo dovesse ancora succedere, digita which sshper assicurarti di utilizzare /usr/bin/sshe non una versione di Fink o MacPorts, che sarebbe sotto qualcosa del genere /usr/local/bin/ssho/opt/local/bin/ssh
Stefan Lasiewski,

7

Questa mattina ho avuto lo stesso problema dopo aver effettuato l'aggiornamento a Sierra. Nel mio caso, il id_rsafile è stato crittografato e dopo la decrittazione funzionava come un fascino.

  1. Verifica se il tuo id_rsafile è crittografato con il seguente comando:cat ~/.ssh/id_rsa | head -2
  2. Se la seconda riga dice Proc-Type: 4,ENCRYPTED, è crittografato e potresti provare a decifrarlo
  3. Importante: fai un backup del tuo id_rsafile originale ! Usa il comandocp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
  4. Decodifica la tua chiave privata con openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
  5. Rimuovere la chiave originale ( rm ~/.ssh/id_rsa) e sostituirla con quella decrittografata:mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

Dopo questi passaggi, dovresti essere in grado di utilizzare di nuovo ssh.


4
Sebbene questa sia una sorta di soluzione alternativa, non penso che risolva davvero il problema del PO.
Daniel B,

Questo funziona per me. @DanielB, qual è il problema con questo?
Dag Høidahl,

7
@ DagHøidahl La chiave non verrà più crittografata. Può essere rubato con diritti utente regolari, quindi la crittografia è un DOVERE forte.
Daniel B,

6
Ciò rimuove la password dalla chiave, motivo per cui risolve il problema del PO. Ma lo sconsiglio. La password è tutto ciò che impedisce alle persone di usare la chiave quando viene rubata. Poiché la tua chiave probabilmente darà accesso a più sistemi, non vorrai indebolirla.
Martijn Heemels,

5

Ho provato più risposte qui, ma continuavo a riscontrare problemi con il passaggio delle chiavi remote (come quando si utilizza capistrano). Per risolverlo, ho letto il technote di Apple e ho creato questo file di configurazione. Non dovrai più chiedere la mia password!

https://developer.apple.com/library/content/technotes/tn2449/_index.html

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

4

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

Metodo 1: aggiungere tutte le chiavi note all'agente SSH.

Quindi una soluzione che ho trovato è quella di eseguire ssh-addcon l' -Aopzione — che aggiunge tutte le identità conosciute all'agente SSH usando qualsiasi passphrase memorizzata nel tuo portachiavi — in questo modo:

ssh-add -A

Ora funziona ma non persiste per tutti i riavvi. Quindi, se non vuoi più preoccuparti di questo, apri il ~/.bash_profilefile del tuo utente in questo modo:

nano ~/.bash_profile

E aggiungi questa riga in fondo:

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

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

Metodo 2: aggiungere solo le chiavi SSH presenti nel portachiavi all'agente.

Quindi, mentre l' ssh-add -Aopzione dovrebbe funzionare per la maggior parte dei casi di base, di recente ho riscontrato un problema in cui avevo installato 6-7 scatole Vagrant (che utilizzano chiavi / identità SSH per l'accesso) su una macchina in cima alle più comuni id_rsa.pubin atto.

Per farla breve, ho finito per essere bloccato fuori 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 / identità SSH sono chiavi / identità SSH. Quindi l'agente SSH ha provato tutte le mie chiavi SSH, non è riuscito e non sono nemmeno riuscito a visualizzare la richiesta della password.

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

La mia soluzione dopo molti test è stata la seguente.

Innanzitutto, se hai più chiavi / identità SSH aggiunte al tuo agente di quante ne hai bisogno, come mostrato, ssh-add -lquindi eliminale tutte dall'agente in questo modo:

ssh-add -D

Fatto ciò, avvia l'agente SSH come un processo in background in questo modo:

eval "$(ssh-agent -s)"

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

ssh-add ~/.ssh/id_rsa.pub

Digita la passphrase, premi Returne dovresti essere a posto.

Ma in altri casi semplicemente eseguirlo è sufficiente per ottenere la chiave / identità aggiunta:

ssh-add -K

Se tutto ha funzionato, digita ssh-add -le dovresti vedere una sola chiave / identità SSH elencata.

Tutto bene? Ora apri il tuo .bash_profile:

nano ~/.bash_profile

E aggiungi questa linea in fondo; commentare o rimuovere la -Aversione se è presente:

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

Ciò consentirà di ricaricare la chiave / identità SSH nell'agente SSH ad ogni avvio / riavvio.

AGGIORNAMENTO: Apple ha ora aggiunto UseKeychainun'opzione alle opzioni di configurazione SSH aperte e considera anche ssh-add -Auna soluzione.

A partire da macOS Sierra 10.12.2, Apple (presumo) ha aggiunto UseKeychainun'opzione di configurazione per le configurazioni SSH. Il controllo della pagina man (via 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''.

Il che si riduce ad Apple vedendo la soluzione come aggiunta ssh-add -Aal tuo .bash_profile come spiegato in questo ticket Open Radar o aggiunta UseKeychaincome una delle opzioni in un utente ~/.ssh/config.



1

Ho provato tutte le soluzioni suggerite qui, ma non ho il portachiavi impostato sul mio Mac.

L'aggiunta alla seguente riga in cima al .ssh/configfile sia sul computer locale che su quello remoto ha funzionato per me.

PubkeyAcceptedKeyTypes=+ssh-dss 

1

È necessario .plistaggiungere un file ~/Library/LaunchAgents/per eseguirlo ssh-add -Aad ogni avvio di macOS.

C'è un singolo comando che lo fa (da SSH-keys-in-macOS-Sierra-keychain ) che è:

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
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.