Question Clone git non interactif (invite d'empreinte digitale ssh) [dupliquer]


Cette question a déjà une réponse ici:

Je souhaite cloner un repo de manière non interactive. Lors du clonage, git demande à confirmer les empreintes digitales 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 forcer "oui" chaque fois que cette question apparaît? J'ai essayé d'utiliser yes yes | git clone ...mais ça ne marche pas.

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


109
2017-11-09 09:04


origine


Il est intéressant de voir que même après deux ans, cette question n’a pas de réponse appropriée. Il y a peu d'autres cas où git vous le demandera, par exemple si vous essayez de cloner via http et que le serveur demande basic_auth. Comment faire cela en mode non interactice? - sorin
Ajout du -q option (calme) l'a fait pour moi. Maintenant, je suis bloqué en automatisant la phrase secrète.


Réponses:


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

RÉPONSE:

Ajouter les noms de domaine à la known_hosts déposer en utilisant le ssh-keyscan La commande a résolu le problème:

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


92
2017-11-02 04:13



S'il vous plaît ne faites pas de cette façon. Ceci n’est absolument PAS sécurisé: les empreintes digitales ne sont pas là pour vous importuner, mais pour vous assurer que vous ne faites pas face à une attaque de type "man-in-the-middle". S'il vous plaît voir ma réponse ci-dessous. - autra
comme je l'ai dit, "je ne pense pas que ce soit la meilleure solution, mais une solution pour moi." parce que j'étais pressé, il y a sûrement une "manière correcte" de le faire ((: - kroe
Ce n'est pas une question de politique correcte :-) C'est une question de savoir si c'est sécurisé ou non. Votre solution est sécurisée si et seulement si vous vérifiez manuellement l’empreinte digitale après votre ssh-keyscan et avant de l'ajouter à .ssh/known_hosts être le même que celui que github a publié sur leur site web. Vous pouvez le faire de plusieurs manières, et la mienne en fait partie. Vous pouvez également effectuer un contrôle d'égalité dans votre script, mais à la fin, tout se résume à ceci: vous avez besoin que votre script sache quelle empreinte qu'il attend, et qu'il échoue s'il ne reçoit pas la bonne. - autra
ajouter la clé SEULEMENT si elle n'existe pas ssh-keygen -F github.com || ssh-keyscan github.com >>~/.ssh/known_hosts - transang
Effectuer cette opération une fois dans le cadre d’une gestion de la configuration ou d’un approvisionnement devrait suffire. Si les empreintes digitales changent à l'avenir, ssh fonctionnera comme prévu et vous avertira que le certificat a été modifié, renvoyant un code de sortie différent de 0. Ceci est susceptible d'arrêter n'importe quel script où vous utilisez ssh ou git. - emhohensee


Aucune des réponses n'est sécurisée. Vous avez 2 options:

Utiliser le protocole https au lieu de git

Il ne vous demandera pas d'empreinte digitale, car ssh n'est pas impliqué, https (duh) est utilisé à la place. Si vous utilisez une image minimaliste ou Docker, vous devrez peut-être installer le package ca-certificates.

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 totalement pas sécurisé.

Avant d’exécuter votre script, obtenez la clé de github (sur votre ordinateur local):

ssh-keyscan github.com >> githubKey

Générez l'empreinte digitale:

ssh-keygen -lf githubKey

Et vérifie manuellement contre ceux énumérés dans cette page (ok, là, vous faites confiance aux certificats https et OpenSSL pour vous apporter le site Web original de github, mais c'est toujours mieux que d'accepter aveuglément une clé publique).

Ensuite, vous le codez 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 si elle croit que la sécurité a été compromise (ou pas suffisamment sécurisée). Si tel est le cas, vous vouloir votre script échouera quand même.


79
2018-06-25 15:39



Ce est la seule réponse correcte et sécurisée à la question. Pourquoi est-ce le dernier? J'ai honte de l'humanité ;-( - Jan Warchoł
Vous ne pouvez pas utiliser HTTPS non interactif avec GitHub si vous utilisez une authentification à deux facteurs, malheureusement. - Brett Widmeier
Je ne vois pas pourquoi pas. Nous parlons ici d'un dépôt public, pas besoin d'authentification. Le clonage d'un dépôt privé à partir d'un script est une autre chose: vous devez autoriser votre script à le faire. - autra
Vérifier l'empreinte digitale "manuellement" est moins pénible qu'il n'y paraît, à l'aide de la "barre de recherche" des explorateurs modernes (comme dans Chrome). - Franklin Yu


Je crois qu’une meilleure option consiste ici à sauvegarder et à vider votre ~/.ssh/known_hosts fichier, établissez 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 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.


7
2018-04-07 18:53





Bien que je comprenne bien que vous souhaitiez automatiser un tel processus, il serait mal avisé de le faire. La raison pour laquelle SSH et les sous-composants réseau connexes hésitent lors de l'utilisation d'un protocole sécurisé est d'avertir un humain que la clé publique d'un système est inconnue. C'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 de type homme du milieu, 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 sur le réseau, vous devez utiliser explicitement et exclusivement le protocole git: // lors du clonage - sans authentification et en texte clair.


6
2018-01-22 22:34



Je peux définitivement voir des cas d’utilisation où nous devons imposer des utilisations non interactives de git clone... et cela ne signifie pas que nous devons accepter n'importe quel chèque (celui de l'empreinte digitale en particulier). Dans mon cas, je serais parfaitement heureux d’échouer automatiquement sur une telle chose. - vaab


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


5
2018-02-03 07:45



Il permet également l'homme au milieu, n'est-ce pas? - autra


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 clone/pull les tâches.

Cet extrait ajoutera uniquement l'empreinte si elle n'est pas déjà trouvée:

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

4
2018-02-16 10:42



C'était parfait. Peut facilement être placé dans un script de déploiement et est plus sûr que de désactiver la vérification de l'hôte. Voici un one-liner pour github: if [ ! -n "$(grep "^github.com " ~/.ssh/known_hosts)" ]; then ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null; fi; ssh-agent bash -c "ssh-add /path/to/your/deploy/id_rsa; git clone -b master git@github.com:githubAccount/githubRepo.git /your/target/dir - tweak2
Cela ne marche pas quand HashKnownHosts est activé dans / etc / ssh / ssh_config (ou ~ / .ssh / config). Au lieu de [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ] il serait préférable d'utiliser [ ! "$(ssh-keygen -F bitbucket.org)" ], qui trouve des lignes hachées et non hachées dans connus_hôtes. - Claus Conrad