44 votes

Comment spécifier la clé SSH à utiliser dans git pour git push afin d’avoir gitorious comme miroir?

J'ai un projet hébergé sur git.debian.org (alioth) et j'aimerais configurer un post-recevoir crochet pour mettre à jour un miroir du dépôt sur http://gitorious.org

Je suppose que je vais devoir utiliser git push --mirror gitorious

Maintenant, je vais avoir besoin d'avoir Alioth autorisé sur gitorious pour le pousser à réussir. Comment dois-je faire?

Je suppose que j'ai besoin de configurer un utilisateur sur gitorious et de créer une clé ssh pour elle. Et puis quand je fais la commande git push dans l'après-recevoir crochet, assurez-vous que cette clé ssh est utilisé.

Je pourrais utiliser un ~/.ssh/config mais le problème est que de nombreux utilisateurs peuvent pousser sur alioth, et tout le monde serait d'avoir à vous connecter et de configurer l' ~/.ssh/config. Au lieu de cela, j'aimerais avoir une option de ligne de commande ou une variable d'environnement à dire ssh qui touche à utiliser. Puis-je le faire?

Aussi, avez-vous d'autres idées sur la façon de la mise en miroir peut être réalisé? Et, est-il possible de le configurer dans l'autre sens (gitorious poussant sur alioth)?

39voto

Mildred Points 1142

La réponse est à trouver dans le git manuel de référence.

GIT_SSH

Si cette variable d'environnement est définie, alors git fetch et git push va utiliser cette commande au lieu de ssh quand ils en ont besoin pour se connecter à un système distant. L' $GIT_SSH de commande sera donné exactement deux arguments: le nom d'utilisateur@hôte (ou juste de l'hôte) à partir de l'URL et de la commande shell à exécuter à distance du système.

Pour passer des options pour le programme que vous souhaitez ajouter à la liste dans GIT_SSH vous aurez besoin d'envelopper le programme et les options dans un script shell, puis définissez GIT_SSH pour consulter le script shell.

Habituellement, il est plus facile de configurer toutes les options désirées par le biais de votre personnel .ssh/config le fichier. Veuillez consulter votre ssh documentation pour plus de détails.

Donc, j'ai besoin d'écrire un script, j'écris ce push-gitorious.sh script:

#!/bin/sh


if [ "run" != "$1" ]; then
  exec ssh -i "$GITORIOUS_IDENTITY_FILE" -o "StrictHostKeyChecking no" "$@"
fi

remote=YOUR_SSH_GITORIOUS_URL

echo "Mirroring to $remote"

export GITORIOUS_IDENTITY_FILE="`mktemp /tmp/tmp.XXXXXXXXXX`"
export GIT_SSH="$0"

cat >"$GITORIOUS_IDENTITY_FILE" <<EOF
YOUR SSH PRIVATE KEY

EOF
cat >"$GITORIOUS_IDENTITY_FILE.pub" <<EOF
YOUR SSH PUBLIC KEY

EOF

#echo git push --mirror "$remote"
git push --mirror "$remote"

rm -f "$GITORIOUS_IDENTITY_FILE"
rm -f "$GITORIOUS_IDENTITY_FILE.pub"

exit 0

Bien sûr, vous devez remplir la clé privée (la clé publique est inclus dans le scénario de référence seulement. Vous devez également remplir le gitorious URL.

Dans l'après-recevoir crochet, vous devez mettre:

path/to/push-gitorious.sh run

L'option d'exécution est important, sinon il sera exécuté ssh directement.

Avertissement: aucune vérification n'est faite sur l'hôte distant d'identité. Vous pouvez supprimer l'option de la ssh en ligne de commande et de personnaliser known_hosts si vous le souhaitez. Dans ce cas, je ne pense pas que c'est important.

31voto

alvinabad Points 621

Les deux méthodes je sais de sorte que vous pouvez spécifier n'importe quel fichier que vous souhaitez utiliser pour un git site à l'git en ligne de commande. Vous n'avez pas besoin de coder en dur ce fichier de clés dans un fichier de config ou d'un script. Il vous suffit de l'approvisionnement de ce droit à l'git en ligne de commande.

Méthode 1: Utilisation de la GIT_SSH variable d'environnement

L'utilisation sera comme ceci à la ligne de commande:

$ PKEY=~/.ssh/keyfile.pem git clone git@github.com:me/repo.git

Pour utiliser cette commande, vous devez faire de la pré-installation. Tout d'abord, créez un script shell avec le contenu suivant:

#!/bin/sh
if [ -z "$PKEY" ]; then
    # if PKEY is not specified, run ssh using default keyfile
    ssh "$@"
else
    ssh -i "$PKEY" "$@"
fi

Ensuite, l'exportation et l'ensemble de la GIT_SSH variable avec une valeur égale à l'emplacement du script shell ci-dessus.

$ export GIT_SSH=~/ssh-git.sh

où ~/ssh-git.sh est le nom de fichier du script shell ci-dessus.

Le script doit être exécutable afin de faire un chmod:

$ chmod +x ~/ssh-git.sh

Maintenant, vous pouvez exécuter cette commande avec n'importe quel clé que vous choisissez d'utiliser:

$ PKEY=~/.ssh/keyfile1.pem git clone git@github.com:me/repo.git

Pour utiliser un autre fichier de clef pour un hôte différent:

$ PKEY=~/.ssh/keyfile2.pem git clone git@myothersite.com:other/repo.git

Cela prend en charge toute clé que vous souhaitez utiliser. Chaque fois que vous devez exécuter git avec une clé que vous souhaitez utiliser, il vous suffit de fournir à la PKEY variable. Vous pouvez oublier tout le reste tant que le GIT_SSH a été pré-configuré.

Prendre note de la PKEY variable. Vous pouvez utiliser n'importe quel nom tant qu'il correspond à ce qui est utilisé dans le script shell GIT_SSH pointe.

Méthode 2: Utilisation d'un script de lancement

L'utilisation de ce gestionnaire de script sera quelque chose comme ceci:

$ git.sh -i ~/.ssh/keyfile.pem clone git@github.com:me/repo.git

Cette utilisation est intuitive puisqu'il ressemble en ssh avec l'option-i.

Cela ne nécessite pas de pré-installation d'un script shell et GIT_SSH. Vous avez seulement besoin de télécharger et exécuter ce simple script avec la commande git.

Vous pouvez obtenir une copie de ce script ici: http://alvinabad.wordpress.com/2013/03/23/how-to-specify-an-ssh-key-file-with-the-git-command/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X