Je suis en train de mettre au point un script rapide qui déploie plusieurs machines vagabondes localement à des fins de développement. La partie de la procédure consiste à ajouter la clé ssh aux cases vagrant.
Jusqu'ici, obtenir le chemin des clés ssh est assez facile: vagrant ssh-config | grep IdentityFile | awk '{print $2}'
Cela donne le résultat attendu:
/Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key /Users/admin/vms/.vagrant/machines/backend-node.vagrant/virtualbox/private_private/private_key/Users/admin/vms /. vagrant/machines/app-node.vagrant/virtualbox/private_key
Cependant, canaliser le résultat vers ssh-add
lève une exception:
ssh_askpass: exec (/ usr/X11R6/bin/ssh-askpass): aucun fichier ou répertoire de ce type
Quand je tape manuellement les commandes une à une, le ssh-add
fonctionne correctement: ssh-add /Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key
Identité ajoutée ...
Par conséquent, je crois que le problème vient du résultat de awk
qui renvoie un bloc de 3 lignes au lieu de 3 fois une ligne au canal.
Cette suspicion peut être confirmée en émettant: vagrant ssh-config | grep IdentityFile | awk '{print $2}' | wc -l
qui renvoie 3 lorsque je m'attends à obtenir 3 fois la valeur 1.
quelqu'un pourrait-il savoir comment scinder le résultat de awk
pour que le ssh-add
fonctionne correctement?
Vous pouvez le faire fonctionner avec la commande awk
pour ajouter un caractère de nouvelle ligne (\n
) à chaque ligne:
vagrant ssh-config | awk '/IdentityFile/{print $2"\n"}'
Et puis dirigez ceci vers ssh-add
.