web-dev-qa-db-fra.com

Pourquoi ssh-agent n'enregistre-t-il pas ma clé non chiffrée pour une utilisation ultérieure?

Chaque fois que je SSH sur un autre serveur depuis notre serveur sans tête Ubuntu, on me demande le mot de passe de mon fichier de clés. Même si je me suis déjà connecté au serveur.

Avez-vous une idée pourquoi cela peut-être? Cela pourrait être quelque chose d'aussi simple que ssh-agent qui ne fonctionne pas actuellement.

La même clé sur mon ordinateur de bureau Ubuntu Gnome fonctionne bien. Le serveur et le bureau exécutent Ubuntu 10.10.

ps -ef | grep '[s]sh-agent'
simon     3219     1  0 12:46 ?        00:00:00 ssh-agent
12
Treffynnon

Même si l'agent est actif, si certaines variables d'environnement ne sont pas définies, vous ne faites pas référence à l'agent. De plus, même si tout est ok, agent et variables, l’identité n’est pas automatiquement envoyée à l’agent: c’est une tâche pour ssh-askpass, fonctionnant uniquement lors de sessions X.

Si vous utilisez bash, créez le fichier ~/.bash_profile avec ce contenu:

# File: ~/.bash_profile

# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
  . ~/.profile
fi

# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
  echo "Starting ssh agent"
  eval $(ssh-agent -s)
  agent_started=1
fi

# ssh become a function, adding identity to agent when needed
ssh() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/ssh "$@"
}
export -f ssh

# another example: git
git() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/git "$@"
}
export -f git

modifiez le nom du fichier ~/.ssh/id_dsa en fonction de vos besoins et ajoutez cette ligne à ~/.bash_logout

# stuff to add at end of ~/.bash_logout
if ((agent_started)); then
  echo "Killing ssh agent"
  ssh-agent -k
fi

Une dernière remarque: ceci n'interfère pas avec une session gnome, car dans ce cas, seul ~/.profile est obtenu, et vous pouvez bénéficier de l'interface graphique ssh-askpass qui demande un mot de passe et l'envoie à la ssh-agent.

10
enzotib

J'ai récemment commencé à utiliser ssh-ident:

https://github.com/ccontavalli/ssh-ident

tout ce que vous avez à faire est d'ajouter quelque chose comme:

alias ssh="/path/to/ssh-ident"

dans votre .bashrc. Vous pouvez également utiliser ln -s /path/to/ssh-ident ~/bin/ssh ou un autre répertoire de votre CHEMIN avant /bin et /usr/bin.

2
rabexc

Cette question répond assez bien à SuperUser .

J'ai trouvé le conseil d'utiliser Keychain très utile.

1
metakermit