L'agent SSH perd son identité lors du redémarrage de la machine

12

Après avoir créé des clés avec un nom id_rsaà son emplacement par défaut. J'ajoute l'identité à l'agent SSH avec la commande ssh-add ~/.ssh/id_rsa, l'ajout réussit.

Je peux SSH sans entrer la phrase de passe de la clé car c'est déjà avec l'agent SSH.

Mais , lorsque je redémarre la machine ou le serveur, puis vérifie l'identité avec la commande, ssh-add -Lje reçois un message comme The agent has no identities.

Cela signifie-t-il qu'au redémarrage de la machine, l'agent a perdu son identité? Est-ce un comportement normal ou quelque chose qui me manque ici?

Veuillez me guider, je ne connais pas très bien SSH.

Niks
la source
Voir ce fil sur le site Unix et Linux.
janosdivenyi

Réponses:

12

C'est normal. Le but d'un agent de clé est simplement de conserver des clés déchiffrées en mémoire , mais il ne les écrit jamais sur le disque. (Cela irait à l'encontre du but - pourquoi ne pas simplement protéger la clé principale à la place?)

Les clés doivent donc être déverrouillées à chaque connexion, et vous devez automatiser cela - sous Linux, l’utilisation pam_sshest une option; il utilise automatiquement votre mot de passe de système d'exploitation pour déverrouiller l'agent. Un autre module similaire est pam_envoy, qui est un peu plus fiable afaik (mais nécessite systemd).

Les deux modules démarreront l'agent lui-même et chargeront les clés automatiquement.

user1686
la source
une idée comment automatiser sur un terminal mac osx?
Niks
Lorsque j'ai exécuté la commande $SSH_AUTH_SOCK , j'obtiens le résultat sous la forme:: -bash: /tmp/ssh-gT43vE99vk/agent.511Permission refusée Je suis confus ici .. météo mon transfert d'agent fonctionne ou non .. pouvez-vous plz guider?
Niks
Ce n'est pas destiné à être utilisé comme une commande - c'est une variable , quelque chose que vous utilisez dans le cadre d'une autre commande. Par exemple echo $SSH_AUTH_SOCKpour imprimer sa valeur.
user1686
hey mon pote .. une idée? stackoverflow.com/questions/31916395/…
Niks
2

Essayez ceci dans votre ~ / .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

Cela ne devrait vous demander le mot de passe qu'une fois connecté.

Shiro
la source
Merci pour la réponse, cela signifie que l'agent SSH fonctionne correctement. Et après avoir ajouté cela, il ne sera pas nécessaire d'ajouter une identité à chaque démarrage de la machine? Désolé si c'est une question idiote mais je suis très nouveau sur ssh.
Niks
Si votre clé ssh a un mot de passe, il vous sera demandé à chaque connexion.
Shiro
Cette réponse est nuisible . Si vous faites ce qu'il dit, il supprimera votre clé privée. Si vous ne disposez d'aucun autre moyen d'authentification, vous perdrez l'accès aux systèmes sur lesquels vous avez utilisé l'authentification par clé publique.
kasperd
2

Sous OS X, ssh-add a un indicateur spécial pour se connecter au trousseau si vous décidez d'y stocker votre clé privée.

Courez ssh-add -K ~/.ssh/id_rsa.

Je crois que cela répond plus à votre question. Il est difficile de trouver cette documentation spécifique à OS X, mais cela fonctionne depuis au moins OS X Leopard.

Olivier Lacan
la source
2
C'est la bonne réponse, suivie d'un ssh-add -Aqui ajoutera toutes les clés du trousseau. De plus, créez également un ~/.ssh/configet ajoutez-le UseKeychain yespour que macOS conserve toujours votre clé, comme décrit ici: unix.stackexchange.com/questions/140075/…
lucasarruda
Mon MacBook oublie toujours mon identité lorsque je redémarre, même après avoir essayé.
Dominic Sayers
0

Cette solution est pratique si vos clés ssh sont protégées par une phrase secrète.

Le problème avec toutes les réponses ci-dessus est que si votre clé privée est protégée par une phrase secrète, chaque fois que vous lancez un nouveau terminal et essayez d'utiliser la clé privée, vous devez taper la phrase secrète et vous finirez par exécuter plusieurs copies de l' ssh-agententrée Mémoire. La solution consiste à ajouter ce qui suit dans votre ~/.bashrcou ~/.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 #####

Cela vous demandera la phrase secrète de votre ou vos clés privées ssh une seule fois lorsque vous lancerez un terminal. L'ouverture ultérieure de nouvelles sessions de terminal (ou vues tmux) réutilisera l'agent ssh créé par l'extrait ci-dessus.

Référence

GMaster
la source