Comment faire fonctionner ssh-agent sur tous les terminaux?

27

J'ai configuré la connexion ssh automatique (sans mot de passe) à certains serveurs à l'aide de ssh-copy-id. ssh-agentne fonctionne qu'à partir du terminal où il a été exécuté. Comment puis-je ssh-addtravailler dans tous mes terminaux?

Naturellement, je ne préférerais pas la clé SSH sans mot de passe.

Gowtham
la source

Réponses:

26

Si vous vous connectez à une session graphique, organisez le démarrage ssh-agentlors du démarrage de votre session. Certaines distributions le font déjà pour vous. Si ce n'est pas le cas, organisez-vous pour exécuter à ssh-agentpartir de votre script de démarrage de session ou à partir de votre gestionnaire de fenêtres. Comment cela dépend de votre environnement de bureau et de votre gestionnaire de fenêtres. Par exemple, si vous démarrez votre gestionnaire de fenêtres manuellement, remplacez simplement l'appel à my_favorite_wmpar ssh-agent my_favorite_wm.

Ne démarrez pas ssh-agentdepuis .bashrcou .zshrc, car ces fichiers sont exécutés par chaque nouveau shell interactif. Le point de départ ssh-agentest dans un fichier de démarrage de session tel que .profileou .xsession.

Si vous souhaitez utiliser le même agent SSH sur tous les processus, peu importe d'où vous vous êtes connecté, vous pouvez toujours lui faire utiliser le même nom de socket, au lieu d'utiliser un socket nommé de manière aléatoire. Par exemple, vous pouvez mettre ceci dans votre ~/.profile:

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi
Gilles 'SO- arrête d'être méchant'
la source
Pour info, la raison pour laquelle il vérifie $? -ge 2est parce que le code de sortie 1 est lorsque l'agent ssh n'a pas de clés, mais l'agent ssh est déjà en cours d'exécution.
wisbucky
7

Vous voulez probablement un programme tel que Keychain , qui a été conçu dans ce but précis. Depuis la page de manuel:

DESCRIPTION
   keychain is a manager for ssh-agent, typically run from ~/.bash_profile.
   It allows your shells and cron jobs to share a single ssh-agent process.
snapshoe
la source
vraiment comme celui-ci!
Colin D
Génial! Je vous remercie. Fonctionne parfaitement.
Quelqu'un
cela fonctionne très bien, après avoir téléchargé le fichier compressé depuis Github, assurez-vous d'ajouter le chemin complet du répertoire keychain-2.8.5 non compressé à votre ~ / .bash_profile export PATH = $ PATH: line
Kevin Zhao
4

Appliquez-le à votre environnement de bureau ou à votre gestionnaire de fenêtres. Quand je l'ai fait manuellement dans le passé avec une coutume ~/.Xclients, je l'ai utilisé comme dernière ligne:

ssh-agent mywindowmanger

Il peut y avoir certains DE qui ont leurs propres options de configuration pour cela, bien qu'il me semble que (par exemple) KDE n'en a pas. Actuellement, il semble que le mien ait été exécuté via le code de /etc/X11/xinit/xinitrc-common(vraisemblablement fait par fedora), car il est actif pour tous les utilisateurs indépendamment de DE / WM et la commande de processus parent l'est $HOME/.Xclients, mais ce fichier ne fait pas référence ssh-agent(contrairement à ce qui se /etc/X11/xinit/xinitrc-commonproduit).

Si vous n'en avez pas ~/.Xclients, vous pouvez en créer une avec cette seule ligne, mais vous devrez connaître la commande qui démarre votre DE / WM.

boucle d'or
la source