Répondez oui dans un script bash

24

J'essaie de faire un git clonecreux d'un script bash, mais la première fois que j'exécute le script et le serveur n'est pas encore connu, le script échoue. J'ai quelque chose comme ça:

yes | git clone git@github.com:repo/repoo.git
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? 

Mais c'est ignorer le yes. Savez-vous comment forcer git cloneà ajouter la clé aux hôtes connus?

Rafael
la source
Et alors echo yes | git clone [email protected]:repo/repoo.git?
asfallows
3
@asfallows, @Rafael: echo yesn'est pas une bonne approche: la deuxième fois que vous exécutez la commande, ssh ne vous demandera pas si vous souhaitez continuer car la clé du serveur sera déjà connue.
Gilles 'SO- arrête d'être méchant'

Réponses:

21

Ajoutez ce qui suit à votre ~/.ssh/configfichier:

Host github.com
    StrictHostKeyChecking no

Tout ce qui utilise le client open-ssh pour établir un shell distant (avec le client git le fait) devrait ignorer les vérifications de clés sur github.com.

C'est en fait une mauvaise idée car toute forme de saut des chèques (que vous frappiez automatiquement oui ou sautiez le chèque en premier lieu) crée de la place pour un homme dans le compromis de sécurité moyen. Une meilleure façon serait de récupérer et de valider l'empreinte digitale et de la stocker dans le known_hostsfichier avant de devoir exécuter un script qui se connecte automatiquement.

Caleb
la source
2
Avec une forte préférence pour récupérer et valider l'empreinte digitale et la stocker dans le known_hostsfichier avant .
Gilles 'SO- arrête d'être méchant'
1
Merci beaucoup pour votre réponse, j'ai fini par suivre l'approche consistant à ajouter l'empreinte digitale dans les known_hosts. C'est comme plus sûr :)
Rafael
Oh, j'utilise des marionnettes pour faire ça. Si quelqu'un est intéressé à l'utiliser, voici la recette: gist.github.com/1155725
Rafael
5

yessorties y. Besoins d'acceptation des clés RSA yes. Vous pouvez essayer yes yes | git clone [email protected]:repo/repoo.gitdonc les yessorties yesau lieu de y.

jfg956
la source
5
Pour une raison quelconque, cela n'a pas fonctionné avec git clone, pour moi.
Matt V.
Ni ça a fonctionné pour moi. Aussi echo "yes" | ...ne fonctionne pas. Je pense qu'il gitn'accepte pas la tuyauterie. Peut-être seulement dans une version?
udondan
3

L'exécution ssh-keyscan -H github.com >> ~/.ssh/known_hostsavant le clonage ajoutera la clé et empêchera l'invite d'apparaître.

Bien sûr, cette approche est également vulnérable à une attaque MITM.

Kevin Smyth
la source
1

J'ai rencontré ce problème auparavant. Bien que ce soit sur une machine Windows, nous avons dû utiliser ssh pour nous connecter à un hôte distant. Nous avons rencontré le même problème que la première connexion échouait toujours car elle ne reconnaissait pas les clés.

Je l'ai résolu en me connectant manuellement et en trouvant la clé de registre et en l'important au début du script. Sous Linux, ce devrait être la même idée générale: vous voulez ajouter ce serveur à une liste d'hôtes de confiance afin que ssh ne vous demande pas si vous lui faites confiance à chaque fois.

Une fois que vous vous connectez manuellement, recherchez le fichier de clé et ajoutez-le à votre fichier known_hosts. De cette façon, ssh examinera ce fichier, supposera que vous savez ce que vous faites et continuera sans vous poser de questions sur l'empreinte digitale.

n0pe
la source