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
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
.
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
.
Cette question répond assez bien à SuperUser .
J'ai trouvé le conseil d'utiliser Keychain très utile.