76 votes

Un moyen simple de lancer ssh-agent et ssh-add lors de la connexion via SSH ?

J'essaie de faire en sorte que les commandes suivantes soient exécutées automatiquement lorsque je me connecte à mon serveur via ssh :

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

Ma clé ssh a une phrase de passe et je peux l'entrer une fois par connexion.

J'ai essayé de mettre cela dans mon fichier .bashrc, mais je crois que ssh-agent démarre une nouvelle session bash. Lorsque j'essaye de me connecter après avoir mis cela dans mon .bashrc, il se bloque, et je dois taper 'exit' pour voir ensuite l'invite 'enter passphrace to unlock key'.

D'autres suggestions ?

Le serveur fonctionne sous Ubuntu LTS

85voto

Chen Kinnrot Points 6207

Vous pouvez essayer d'ajouter ceci :

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

De cette façon, le ssh-agent ne démarre pas un nouveau Shell, il se lance simplement en arrière-plan et crache les commandes Shell pour définir les variables d'environnement appropriées.

Comme dit dans le commentaire, peut-être que vous le faites pas vous ne voulez pas du tout exécuter l'agent sur l'hôte distant, mais plutôt sur la boîte à partir de laquelle vous travaillez, et utilisez

ssh -A remote-host

pour transférer les services de votre agent ssh local vers l'hôte distant.

Pour des raisons de sécurité, vous ne devriez utiliser le transfert d'agent qu'avec des hôtes gérés par des personnes de confiance, mais c'est mieux que d'exécuter un agent complet à distance à tout moment.

14voto

womblerone Points 151

Une autre alternative est d'ajouter ceci à votre .bashrc. Cela présente le même avantage que la réponse d'Erik (garantir une seule instance) mais ne nécessite pas de paquetage supplémentaire.

# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
    echo Starting SSH Agent
    eval $(ssh-agent -s)
fi

Cela lance ssh-add s'il n'y a pas au moins une clé chargée et définit un délai d'attente pour la clé de 1 jour :

ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
     echo Adding keys...
     ssh-add -t 1d
fi

12voto

Erik Aronesty Points 268

Une alternative est d'utiliser l'outil de Funtoo Porte-clés . Ensuite, vous pouvez coller cette ligne unique dans votre Shell bash :

eval $(keychain --eval id_rsa)

Cela fait la même chose (lancer l'agent ssh, etc.), mais sans exécuter un processus d'agent ssh pour chaque sous-shell. Au lieu de cela, il recherche les instances "déjà en cours d'exécution" que vous possédez et vous y rattache.

1voto

Soheil Points 111

Gardez également à l'esprit que si vous disposez d'une connexion ssh keep-alive, vous devez supprimer les fichiers de connexion existants avant de procéder à l'installation. -A prend effet. Supprimez tous les fichiers de connexion ssh dans /tmp/[host] .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X