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).
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:
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.
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.
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
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_hosts
dans 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.
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.
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
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.