web-dev-qa-db-fra.com

Passer les options ssh à git clone

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.

72
Daniel Velkov

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.

36
Josh Lee

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.

98
Boris

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? .

18
kenorb

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 et git Push utiliseront la commande spécifiée au lieu de ssh lorsqu’ils devront se connecter à un système distant.
La commande se présente sous la même forme que la variable d'environnement GIT_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'
18
VonC

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
3
Jonathan Beber

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'
1
Pavan Kumar

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. 

0
Ajay