J'essaie de créer un script shell qui, entre autres, démarre ssh-agent et ajoute une clé privée à l'agent. Exemple:
#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
Le problème avec cela est que ssh-agent lance apparemment une autre instance de $ SHELL (dans mon cas, bash) et du point de vue du script, il a tout exécuté et ssh-add et tout ce qui est en dessous n'est jamais exécuté.
Comment puis-je exécuter ssh-agent à partir de mon script shell et le faire avancer dans la liste des commandes?
exit
fait l'affaire.Mettez ce qui suit en haut de votre script:
Votre script devrait ressembler à ceci:
Explication
Les backticks autour
ssh-agent
collectent sa sortie.eval
collecte cette sortie, la concatène en une seule commande, puis exécute la commande. Ensuite, vous pouvez utiliserssh-add
pour fournir vos informations d'identification clés.la source
eval $(ssh-agent)
bash -i
à la fin du script.J'ai tendance à faire quelque chose comme ça dans les scripts qui nécessitent un agent.
Fondamentalement, la première chose que le script vérifie pour voir si un agent est en cours d'exécution. S'il ne l'est pas, exec est utilisé pour démarrer un nouveau processus à la place du script. L'agent est démarré, des clés sont ajoutées et enfin, le script est à nouveau appelé (voir le
$0
).la source
.. "ssh-add ; $0 $*"
, ou à la.. "ssh-add ; $0 $@"
place, ce qui peut fonctionner. Ce qui ne serait pas parfait, mais fonctionnerait certainement dans de nombreux cas. La meilleure solution est presque toujours d'avoir votre agent en cours d'exécution avant toute autre chose, c'est juste quelque chose qui pourrait être utile dans des cas obscurs.J'ai trouvé que cela fonctionne pour moi.
Je crée le processus ssh-agent, ajoute la clé, fais ce que je dois faire, puis je le tue. Pas besoin de vérifier s'il fonctionne plus tard.
la source
Il est préférable d'utiliser le trousseau dans ce cas
Debian / Ubuntu:
RHEL / Fedora / CentOS
Ajoutez dans votre .bashrc les éléments suivants:
la source
J'ai trouvé avec la solution de Zoredache, la clé serait disponible pour tout shell qui arrive à partager le même agent ssh que le shell qui a appelé le script. Je voulais éviter cela dans un script qui nécessitait un accès root à une machine distante, pour des raisons de sécurité évidentes.
J'ai trouvé de mettre le shebang suivant en haut des travaux de script:
la source
J'ai essayé et beaucoup et la solution qui a finalement fonctionné était de remplacer ma phrase secrète par une chaîne vide.
la source