Manière simple d’exécuter ssh-agent et ssh-add lors de la connexion via SSH?

38

J'essaie d'exécuter automatiquement les commandes suivantes lorsque je me connecte à mon serveur via ssh:

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

Ma clé ssh a un mot de passe et je peux le saisir une fois par login.

J'ai essayé de mettre cela dans mon fichier .bashrc, mais je pense que ssh-agent démarre une nouvelle session bash. Lorsque j'essaie de me connecter après avoir cela dans mon .bashrc, il reste bloqué et je dois taper 'exit' pour voir l'invite 'entrer mot de passe pour déverrouiller la clé'

D'autres suggestions?

Le serveur exécute Ubuntu LTS

Cliquez sur Voter
la source
Pourquoi un agent de clé sur le serveur? Ce doit être sur votre client local à partir duquel vous vous connectez.
Zoredache
@Zoredache Je veux être capable de faire git pullet autres sur le serveur distant
Cliquez sur Upvote
Ensuite, exécutez un agent SSH sur votre ordinateur local et transférez-le.
Zoredache
@ Zoredache Merci, je ne savais pas que c'était possible. Cependant, j'aimerais quand même pouvoir faire ssh-add / ssh-agent à partir d'un script bash, même à partir de ma machine locale. C'est une douleur d'avoir à exécuter ces commandes manuellement.
Cliquez Upvote

Réponses:

52

Vous pouvez essayer d'ajouter ceci:

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

Ainsi, le ssh-agentne démarre pas un nouveau shell, il se lance simplement en arrière-plan et crache les commandes du shell pour définir les variables d'environnement appropriées.

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

ssh -A remote-host

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

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

Tobi Oetiker
la source
Lorsque je remplace ssh-agent /bin/bashpar ssh-agent -s, puis que j'essaie de le faire git pull, on me demande toujours le mot de passe composé de la clé privée pour le déverrouiller. Ce n'est pas vraiment ce que je veux, je veux seulement entrer la phrase secrète en faisant ssh-add, et ne pas avoir à la répéter à chaque fois que j'exécute des commandes git. Des idées?
Cliquez Upvote
et exécuter l'agent localement et utiliser ssh -A n'est pas une option pour vous? Le problème est que vous ne pouvez pas "redémarrer" le ssh-agent à chaque connexion. Chaque fois que vous le démarrez, il ne sait rien et lorsque vous ajoutez la clé, vous devez le déchiffrer ...
Tobi Oetiker
pour votre fichier .ssh / config: Hôte hôte distant ControlMaster auto ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Tobi Oetiker
1
oops vient de réaliser que vous avez besoin d'un eval supplémentaire avant l'appel de ssh-agent .. mis à jour ma réponse ci
Tobi Oetiker
1
vous pouvez créer un alias
Tobi Oetiker
2

Une alternative consiste à utiliser le trousseau de Funtoo . Ensuite, vous pouvez coller ce one-liner dans votre shell bash:

eval $(keychain --eval id_rsa)

Cela fait la même chose (lance l'agent ssh, etc.), tout en n'exécutant pas de processus ssh-agent 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 attache.

Erik Aronesty
la source