ssh-add non è persistente tra i riavvii


150

Ho aggiunto una chiave ssh all'agente tramite:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Dopo un riavvio, l'agente non ha più aggiunto questa chiave:

$ ssh-add -l
The agent has no identities.

Perché è successo?


Non ho tempo di rispondere completamente adesso, ma gpg-agent in modalità ssh farà quello che vuoi. Prova quello invece del legacy ssh-agent. Se questo aiuta, potrei provare ad espandere questo quando avrò tempo dopo.
Valità

@Valità: dubito che l'agente gpg sarà persistente durante i riavvii.
Pavel Šimerda,

@ PavelŠimerda Crittografa le chiavi private con la password dell'utente, quindi le inserisce $HOME/.gnupg/private-keys-v1.dnon appena le aggiungi con ssh-add. È davvero persistente. Supponiamo che tu abbia una home directory non volatile.
Valità

@Valità: non dovrebbe essere considerato un problema di sicurezza? Non potresti anche usare una chiave senza passphrase e farla senza aver bisogno di alcun agente?
Pavel Šimerda,

1
@ PavelŠimerda Non è in realtà un problema di sicurezza poiché la chiave viene archiviata crittografata con la password dell'utente, ma deve comunque essere digitata la password ogni volta che l'utente accede per decrittografarla. Memorizzare la chiave non crittografata significa che un utente con root (o un ladro che ha preso il tuo disco rigido) potrebbe rubarli dalla tua directory home, con gnupg se li rubano saranno crittografati con la tua password e quindi inutili.
Vality,

Risposte:


174

L'aggiunta di chiavi all'agente è temporanea. Durano solo finché l'agente è in esecuzione. Se lo uccidi o riavvii il computer, vengono persi fino a quando non li aggiungi nuovamente. Dalla ssh-agentpagina man:

ssh-agent è un programma per contenere chiavi private utilizzate per l'autenticazione con chiave pubblica (RSA, DSA, ECDSA). L'idea è che ssh-agent viene avviato all'inizio di una X-session o di una sessione di login e tutte le altre finestre o programmi vengono avviati come client per il programma ssh-agent. Tramite l'uso di variabili d'ambiente l'agente può essere localizzato e usato automaticamente per l'autenticazione quando si accede ad altre macchine usando ssh (1).

L'agente inizialmente non ha chiavi private. Le chiavi vengono aggiunte usando ssh-add (1). Quando viene eseguito senza argomenti, ssh-add (1) aggiunge i file ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsae ~/.ssh/identity. Se l'identità ha una passphrase, ssh-add (1) chiede la passphrase sul terminale se ne ha uno o da un piccolo programma X11 se eseguito sotto X11. In caso contrario, l'autenticazione fallirà. Invia quindi l'identità all'agente. Diverse identità possono essere archiviate nell'agente; l'agente può utilizzare automaticamente una di queste identità. ssh-add -lvisualizza le identità attualmente detenute dall'agente.

macOS Sierra

A partire da macOS Sierra 10.12.2 , Apple ha aggiunto un'opzione di configurazione UseKeychain per le configurazioni SSH. Puoi attivare questa funzione aggiungendola UseKeychain yesa ~/.ssh/config.

Host *
  UseKeychain yes

Portachiavi OSX

Non utilizzo OSX ma ho trovato questa Domande e risposte su SuperUser intitolata: Come utilizzare il portachiavi Mac OS X con chiavi SSH? .

Capisco che da Mac OS X Leopard il Keychain ha supportato la memorizzazione delle chiavi SSH. Qualcuno potrebbe spiegare come dovrebbe funzionare questa funzione.

Quindi dal suono di esso potresti importare le tue chiavi SSH in Keychain usando questo comando:

$ ssh-add -K [path/to/private SSH key]

Le chiavi dovrebbero quindi persistere da un avvio all'altro.

Ogni volta che riavvii il Mac, tutte le chiavi SSH nel tuo portachiavi verranno caricate automaticamente. Dovresti essere in grado di vedere le chiavi nell'app Accesso Portachiavi, nonché dalla riga di comando tramite:

  ssh-add -l

Fonte: Super User - Come usare il portachiavi di Mac OS X con le chiavi SSH?


veramente? Su Linux non ho questo problema. Devo "ssh-aggiungere my_key" ogni volta che riavvio il mio computer?
ア レ ッ ク ス

2
@Alex Come spiega la risposta, l'agente aggiunge automaticamente ~/.ssh/id_rsa. Immagino che questa sia la posizione del tuo file di chiavi su Linux. È anche possibile che tu non stia utilizzando l'agente chiave ssh standard. Ce ne sono altri, come gnome-keyring-daemon, che possono avere comportamenti diversi.
Patrick,

ma su Mac si chiama "id_rsa_mac". Come faccio ad aggiungere l'agente automaticamente?
ア レ ッ ク ス

@Patrick: non sono sicuro che il classico ssh-agentaggiunga automaticamente i tasti. A mio avviso è ssh-addche legge le posizioni standard o il sshclient se non si utilizza l'agente.
Pavel Šimerda,

5
Piccolo sidenote, se il tuo comando ssh-add non riconosce il flag -K probabilmente stai usando la versione macports di ssh-add ... puoi bypassare la versione macports specificando il percorso completo alla versione OSX di ssh-add in questo modo:/usr/bin/ssh-add -K /path/to/private/key
ChrisR,

20

Il ssh-agentè un servizio di sessione che memorizza le chiavi temporanea per l'utente.

Lo scopo principale dell'agente SSH è ricordare la versione in chiaro di una chiave protetta usando una passphrase. In altre parole, la chiave viene archiviata sul disco crittografato utilizzando una passphrase e il proprietario della chiave utilizza ssh-addo alcuni strumenti della GUI per fornire la passphrase e indicare all'agente di ricordarla fino a quando la sessione termina o l'utente richiede la rimozione esplicita.

Se non si utilizza una passphrase e non si utilizza l'inoltro dell'agente (che non è sicuro per la maggior parte degli scopi comunque), non è necessario l'agente . Qualsiasi client SSH dovrebbe essere in grado di leggere la chiave dal disco, da una posizione standard o da una specificata in modo esplicito.

Le posizioni standard sono elencate nella pagina del manuale ssh(1):

L'impostazione predefinita è ~ / .ssh / identity per la versione 1 del protocollo e ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 e ~ / .ssh / id_rsa per la versione 2 del protocollo.

Quando si utilizzano posizioni non standard, è possibile utilizzare l' -iinterruttore per sshdescritto nella stessa pagina del manuale o la rispettiva opzione nel client SSH che si sta utilizzando.


4
+1 per aver sostenuto il non utilizzo dissh-agent
dg99

7

In Sierra :

Usa UseKeychain . (Non l'ho provato ma sembra la soluzione più corretta.)

O

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Oppure crea un file plist invece di aggiungerlo a ~/.bash_profile.

Disclaimer: come altri hanno notato, non so quanto sia sicuro archiviare le passphrase ssh nel portachiavi.


Ho provato tutti i metodi sopra ma solo questo funziona. Grazie!
Duannx,
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.