web-dev-qa-db-fra.com

Clone git non interactif (invite d'empreinte digitale ssh)

Je veux cloner un dépôt de manière non interactive. Lors du clonage, git demande de confirmer l'empreinte digitale de l'hôte:

The authenticity of Host 'bitbucket.org (207.223.240.182)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? no

Comment puis-je forcer "oui" chaque fois que cette question apparaît? J'ai essayé d'utiliser yes yes | git clone ..., mais cela ne fonctionne pas.

EDIT: Voici une solution: Puis-je ajouter automatiquement un nouvel hôte à known_hosts? (ajoute des entires à known_hosts avec ssh-keyscan).

143
qwe

Ni les options "StrictHostKeyChecking no" ni "ssh-keyscan" ne sont sécurisées. vous besoin une validation manuelle des empreintes digitales à un moment donné pour éviter l'attaque MiTM si vous vous en tenez à ssh.

En fait, vous avez 2 options:

Utilisez le protocole https au lieu de git

Il ne vous demandera pas d'empreinte digitale, car ssh n'est pas impliqué, https est utilisé à la place. Pour un point de vue sécurité, vous faites confiance à l'installation des certificats racine sur votre système d'exploitation. Si vous utilisez une image minimaliste ou Docker, vous devrez peut-être installer le package ca-certificats.

Si vous voulez vraiment le protocole git + ssh

Avez-vous vraiment besoin d'ajouter la clé au moment de l'exécution? Ce n'est pas sécurisé car vous n'avez pas vérifié l'empreinte digitale et cela vous laisse ouvert aux attaques MiTM. Ce n'est pas seulement théorique et cela a fait ses preuves.

Avant d'exécuter votre script, récupérez la clé de github (sur votre machine locale):

ssh-keyscan github.com >> githubKey

Générez l'empreinte digitale:

ssh-keygen -lf githubKey

Et vérifiez-le manuellement par rapport à ceux répertoriés dans cette page (ok, là vous faites confiance Certificats https et OpenSSL pour vous apporter le site Web original de Github, mais c'est toujours bien mieux que d'accepter aveuglément une clé publique).

Ensuite, vous le codez en dur dans votre script en y ajoutant:

echo '<copy paste the content of 'cat githubKey' on your machine>'  >> ~/.ssh/known_hosts

avant le clone git.

La clé publique GitHub ne changera que s'ils croient qu'elle a été compromise (ou pas suffisamment sécurisée). Si c'est le cas, vous voulez votre script échouera quand même.

120
autra

Je ne pense pas que ce soit la meilleure solution, mais c'était une solution pour moi.

RÉPONSE:

Ajout des noms de domaine au known_hosts fichier à l'aide du ssh-keyscan la commande a résolu le problème:

ssh-keyscan <enter_domainname_e.g._github.com> >> ~/.ssh/known_hosts

115
kroe

Je crois qu'une meilleure option ici est de sauvegarder et de vider votre ~/.ssh/known_hosts fichier, effectuez manuellement la connexion SSH, en vérifiant l'adresse IP et l'empreinte digitale, mv ~/.ssh/known_hosts ~/bitbucket_hosts, puis utilisez le contenu de ~/bitbucket_hostsdans votre script pour ajouter automatiquement les empreintes digitales connues au fichier known_hosts (n'oubliez pas de restaurer l'original ~/.ssh/known_hosts).

Cette étape ne doit être effectuée qu'une seule fois (sur n'importe quelle machine, je crois), et une fois que vous avez les empreintes digitales, vous pouvez l'intégrer à votre script d'automatisation.

9
Steven Soroka

Bien que je comprenne certainement que vous souhaitez automatiser un tel processus, il serait mal avisé de le faire. La raison pour laquelle SSH et les sous-composants de réseau associés rechignent lors de l'utilisation d'un protocole sécurisé est d'avertir un humain que la clé publique d'un système est inconnue. Ceci est intentionnel - l'utilisateur doit informer explicitement le système auquel l'hôte est attendu. Vous ne voudriez pas accepter automatiquement chaque clé publique qui vous est présentée ou une partie de la sécurité dans SSH ou TLS/SSL pourrait être compromise. Un exemple est via une attaque man-in-the-middle comme lorsqu'un logiciel proxy présente sa propre clé à la place d'un hôte que vous attendez.

Procéder avec prudence.

Si vous ne craignez pas la source du code à travers le fil, vous devez utiliser explicitement et exclusivement le protocole git: // lors du clonage - il est sans authentification et en texte clair.

7
Jeff Stice-Hall

Ajout de la clé à .ssh/known_hosts semble être la bonne chose à faire.

Cependant, lorsque vous automatisez la tâche, vous voulez vous assurer que la clé n'est pas déjà contenue et ajoutée à chaque tâche clone/pull.

Cet extrait ajoutera uniquement l'empreinte digitale s'il n'est pas déjà trouvé:

if [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ]; then ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null; fi
7
udondan

Comme l'a dit Jeff Hall, le faire est dangereux car il permet des attaques d'homme au milieu non détectées. Cependant, vous pouvez utiliser le StrictHostKeyChecking no option in ssh pour désactiver la vérification des clés d'hôte. Cependant, je serais très prudent avec cette option si j'étais vous.

6
Wren T.