L'agente SSH perde identità durante il riavvio della macchina


12

Dopo aver creato le chiavi con il nome id_rsanella posizione predefinita. Sto aggiungendo identità all'agente SSH con comando ssh-add ~/.ssh/id_rsa, sta aggiungendo con successo.

Posso SSH senza inserire la passphrase della chiave poiché è già con SSH Agent.

Ma , quando riavvio la macchina o il server e quindi controllo l'identità con il comando, ssh-add -Lricevo un messaggio simile The agent has no identities.

Ciò significa che quando si riavvia la macchina, l'agente ha perso l'identità? Questo comportamento normale o qualcosa che mi manca qui?

Per favore guidami, non ho molta familiarità con SSH.


Vedi questa discussione sul sito Unix e Linux.
Janosdivenyi,

Risposte:


12

È normale. Lo scopo di un key agent è solo quello di conservare le chiavi decifrate in memoria , ma non le scriverà mai su disco. (Ciò vanificherebbe lo scopo: perché non semplicemente proteggere la chiave principale invece?)

Quindi le chiavi devono essere sbloccate ad ogni accesso, ed è necessario automatizzarlo - su Linux usare pam_sshè un'opzione; utilizza automaticamente la password del sistema operativo per sbloccare l'agente. Un altro modulo simile è pam_envoy, che è leggermente più affidabile afaik (ma richiede systemd).

Entrambi i moduli avvieranno l'agente stesso e caricheranno le chiavi automaticamente.


qualche idea su come automatizzare sul terminale mac osx?
Niks,

Quando ho eseguito il comando $SSH_AUTH_SOCK sto ottenendo il risultato come:: -bash: /tmp/ssh-gT43vE99vk/agent.511Autorizzazione negata Sono confuso qui .. Meteo il mio agente di inoltro funziona o no .. Puoi plz guidare?
Niks,

Non è pensato per essere usato come comando: è una variabile , qualcosa che usi come parte di un altro comando. Ad esempio echo $SSH_AUTH_SOCKper stampare il suo valore.
user1686

ehi amico .. qualche idea? stackoverflow.com/questions/31916395/…
Niks

2

Prova a questo sul tuo ~ / .bashrc :

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

Questo dovrebbe richiedere la password solo dopo aver effettuato l'accesso.


Grazie per la risposta, ciò significa che l'agente SSH funziona correttamente. E dopo aver aggiunto questo non sarà necessario aggiungere identità ogni volta che si avvia la macchina? Scusate se questa è una domanda stupida, ma sono molto nuovo su SSH.
Niks,

Se la tua chiave ssh ha una password, verrà richiesta ogni volta che accedi.
Shiro,

Questa risposta è dannosa . Se fai quello che dice, cancellerà la tua chiave privata. Se non hai altri modi per autenticarti, perderai l'accesso ai sistemi in cui hai utilizzato l'autenticazione con chiave pubblica.
Kasperd,

2

Su OS X, ssh-add ha un flag speciale per connettersi al Portachiavi se decidi di memorizzare la tua chiave privata.

Corri e basta ssh-add -K ~/.ssh/id_rsa.

Credo che questo risponda alla tua domanda in modo più completo. Questo flag specifico per OS X è difficile da trovare documentazione ma funziona almeno da OS X Leopard.


2
Questa è la risposta corretta, seguita da una ssh-add -Ache aggiungerà tutte le chiavi in ​​Keychain. Inoltre, crea anche ~/.ssh/confige aggiungi in UseKeychain yesmodo che macOS conserverà sempre la tua chiave, come descritto qui: unix.stackexchange.com/questions/140075/…
lucasarruda,

Il mio MacBook dimentica ancora la mia identità al riavvio, anche dopo averlo provato.
Dominic Sayers,

0

Questa soluzione è utile se le chiavi ssh sono protette da passphrase.

Il problema con tutte le risposte sopra è che se la tua chiave privata è protetta da passphrase, ogni volta che avvii un nuovo terminale e provi a usare la chiave privata, devi digitare la passphrase e finirai per eseguire più copie di ssh-agentin memoria. La soluzione è aggiungere quanto segue nel tuo ~/.bashrco ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
     }
else
     start_agent;
fi
##### END Fix for ssh-agent #####

Ciò richiederà la passphrase delle chiavi private ssh solo una volta all'avvio di un terminale. La successiva apertura di nuove sessioni terminali (o tmux seeing) riutilizzerà l'agente ssh creato dallo snippet sopra.

Riferimento

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.