J'essaie d'exécuter git clone
sans que SSH vérifie la clé de l'hôte du référentiel. Je peux le faire depuis ssh comme ça:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@Host
Existe-t-il un moyen de transmettre les mêmes options ssh à la commande git clone?
Edit: Il existe une restriction selon laquelle je ne peux pas modifier ~/.ssh/config
ni aucun autre fichier sur cette machine.
Ajoutez-les à votre ~/.ssh/config
:
Host host
HostName Host
User user
SshOption1 Value1
SshOption2 Value2
L’entrée Host
correspond à ce que vous allez spécifier sur la ligne de commande, et HostName
correspond au véritable nom d’hôte. Ils peuvent être identiques ou l'entrée Host
peut être un alias. L'entrée User
est utilisée si vous ne spécifiez pas user@
sur la ligne de commande.
Si vous devez le configurer sur la ligne de commande, définissez la variable d'environnement GIT_SSH
pour qu'elle pointe vers un script contenant vos options.
La dernière version de git 2.3 supporte une nouvelle variable "GIT_SSH_COMMAND" qui peut être utilisée pour définir une commande avec des paramètres.
GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@Host
$GIT_SSH_COMMAND
a priorité sur$GIT_SSH
et vaut interprété par le shell, ce qui permet à des arguments supplémentaires d’être inclus.
Voici un exemple délicat pour passer les arguments ssh en utilisant la variable GIT_SSH:
$ echo 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH="$PWD/ssh" git clone user@Host
Remarque: Les lignes ci-dessus sont des lignes de commande de terminal que vous devez coller dans votre terminal. Il va créer un fichier ssh, le rendre exécutable et l'exécuter.
Si vous souhaitez passer l'option clé privée, veuillez vérifier Comment savoir à git quelle clé privée utiliser? .
Une autre option permettant de spécifier différentes clés est git config core.sshCommand
avec git 2.10 + (Q3 2016).
Il s’agit d’une alternative à la variable d’environnement décrite dans la section Boris de answer )
Voir commit 3c8ede3 (26 juin 2016) par Nguyễn Thái Ngọc Duy (pclouds
) .
(Fusion de Junio C Hamano - gitster
- dans commit dc21164 , 19 juil. 2016)
Une nouvelle variable de configuration
core.sshCommand
a été ajoutée à spécifiez quelle valeur pour GIT_SSH_COMMAND utiliser par référentiel.Similaire à
$GIT_ASKPASS
ou$GIT_PROXY_COMMAND
, nous lisons également à partir de fichier de configuration d'abord, puis retomber à$GIT_SSH_COMMAND
.Ceci est utile pour sélectionner différentes clés privées ciblant le même hôte (par exemple, github)
core.sshCommand:
Si cette variable est définie,
git fetch
etgit Push
utiliseront la commande spécifiée au lieu dessh
lorsqu’ils devront se connecter à un système distant.
La commande se présente sous la même forme que la variable d'environnementGIT_SSH_COMMAND
et est remplacée lorsque la variable d'environnement est définie.
Cela signifie que le git clone
peut être:
cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
# later on
git clone Host:repo.git
Si vous souhaitez appliquer cela à tous Repos, comme utilisateur1300959 ajoute dans les commentaires , vous utiliseriez une configuration globale.
git config --global core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
Je pense que mettre à jour git vers une version> = 2.3 et utiliser GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@Host
est l'option de mise, mais si ce n'est pas possible, @ josh-lee a donné une bonne option, mais veuillez mettre à jour votre réponse en mettant en retrait le fichier de configuration ssh.
Host host
HostName Host
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Configuration au niveau du référentiel sans impact sur les paramètres du niveau système
En consolidant les réponses déjà disponibles, je choisis les étapes ci-dessous. Cela garantit que les modifications de configuration n'ont pas d'impact au niveau de la machine, mais uniquement sur le référentiel sur lequel vous travaillez. Cela est nécessaire dans mon cas car mon script doit être exécuté sur un agent Bamboo partagé.
1.Clonez le référentiel en utilisant l'approche GIT_SSH_COMMAND
.
GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url
2.Une fois cloné, naviguez dans le répertoire du référentiel.
cd repo-dir
3.Set core.sshCommand
configuration afin que tous les appels futurs puissent être exécutés simplement avec les commandes git comme d'habitude, mais consommant en interne les options git fournies.
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
Ce problème a été résolu en procédant comme suit dans la machine Windows: -
Créez un fichier de configuration dans le dossier C:\Users\username.ssh.
ajoutez la ligne suivante à un fichier de configuration.
Host <Host>
hostname <HOSTNAME>
user <USER_NAME>
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
port <PORT_NUMBER>
KexAlgorithms +diffie-hellman-group1-sha1
puis réessayez.