Comment ajouter un hôte connu SSH dans un script bash?


13

Je crée un script bash pour approvisionner un nouveau serveur sur lequel je peux déployer une application Web. Une chose que je dois toujours faire est d'utiliser GitHub en tant qu'hôte connu ssh git@github.com. Comment puis-je automatiser ce processus dans un script bash et le faire de manière idempotente?

Réponses:


17

Le moyen le plus simple serait de faire quelque chose comme ça.

ssh-keyscan remote_server >>~/.ssh/known_hosts

Si cette boîte est neuve, vous devrez peut-être également créer le ~/.sshrépertoire avant d'exécuter ssh-keyscan .

Gardez à l'esprit que ssh-keyscan peut accepter un nombre arbitraire de noms d'hôtes. Il obtiendra toutes les clés possibles.


1
PS - Pour l'approvisionnement, vous devez utiliser quelque chose comme une marionnette au lieu d'un script bash. Pour les marionnettes, cela pourrait être facilement géré avec la ressource sshkey . Consultez également cette question pour une méthode de gestion des serveurs connus en masse serverfault.com/a/416782/984
Zoredache

2
Cela me semblait sûr, mais après avoir passé quelques heures chacun sur des marionnettes et des concurrents, je me suis précipité vers les scripts bash et la raison. Si ces outils sont intuitifs, je n'ai apparemment aucune intuition. YMMV.
Ron Burk

Utilisez bash. Je rencontre constamment des problèmes dans différentes versions de choses comme la marionnette ou l'ansible. Nous revenons toujours à bash ... 3 entreprises fonctionnent maintenant comme ça et bash est toujours fiable pour nous.
Ligemer

4

Essayez-vous d'automatiser l'acceptation de la nouvelle clé? Si c'est le cas, vous pouvez utiliser -oStrictHostKeyChecking = no.
Cela est une très mauvaise idée, car vous êtes maintenant complètement ouvert aux attaques de l'homme du milieu.

Une meilleure option serait simplement de gérer un fichier known_hosts et de réutiliser ce fichier lorsque vous provisionnez de nouveaux serveurs. Collez-le sur github et écrivez un script simple pour télécharger ce fichier avant de le transférer dans github.

La vérification stricte de la clé hôte est une bonne chose.


Pouvez-vous élaborer sur le "gérer le fichier connu_hôtes"? Je pense que c'est ce que je veux faire, mais quand j'ai vu le fichier, son contenu ressemblait à une sorte de hachage / clé et ne ressemblait pas à quelque chose qui devait être géré manuellement.
Andrew

2
Provisionnez un nouveau serveur, ssh manuellement dans github comme vous le feriez. Acceptez la clé d'hôte lorsque vous y êtes invité. Se déconnecter. Copiez ~ / .ssh / known_hosts à partir de ce serveur nouvellement approvisionné ailleurs (github, serveur Web, peu importe tant que vous pouvez l'obtenir). La prochaine fois que vous provisionnez un serveur, copiez ce fichier avant de le transférer dans github. Vous n'avez pas besoin de modifier le fichier.
yoonix

C'est mieux que ma réponse (plus sûr). Une autre amélioration de la réponse de yoonix consiste à analyser `` ssh-keyscan github.com '' et à stocker la clé retournée dans ~ / .ssh / known_hosts de cette façon, elle n'est pas statique dans un fichier quelque part que vous devez mettre à jour.
Sirex

Cela fonctionnerait aussi, mais je ne le considérerais pas mieux. Vous vous préparez potentiellement à une attaque d'homme au milieu si vous saisissez une nouvelle clé d'hôte à chaque fois.
yoonix

1
Pour clarifier mon dernier commentaire (trop tard pour le modifier): Saisir une nouvelle clé d'hôte à chaque fois que vous provisionnez un hôte n'est pas différent sur le plan fonctionnel que de définir StrictHostKeyChecking = no. Avec l'un ou l'autre, vous faites aveuglément confiance à la clé envoyée à chaque provision. Si vous pensez qu'une attaque MITM est peu probable, lisez ces deux articles. Github serait une cible ÉNORME.
yoonix

1

Je ne suis pas sûr de comprendre la question, mais je pense que vous voulez ignorer l'invite known_host ou l'éviter complètement, auquel cas:

ssh -o StrictHostKeyChecking = no

ou d'autres suggestions sur: http://www.joedog.org/2012/07/ssh-disable-known_hosts-prompt/


Je veux une manière non interactive d'accepter la clé d'hôte GitHub (car cela se produira dans un script bash).
Andrew

alors cela fonctionnera - il n'acceptera pas la clé cependant, il l'ignorera complètement. La réponse de Yoonix est meilleure
Sirex
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.