GitHub, ssh et les clefs


Aujourd’hui j’ai décidé de déposer le script xcodebuild-wrapper.py dans GitHub afin de le partager avec la communauté.

Déprécié

Les échanges avec GitHub se font en passant par SSH afin de chiffrer les communications et assurer un minimum de sécurité.

Dans la mise en place du compte GitHub explique comment créer une paire de clefs RSA, comme mettre la clef publique sure dans les paramètres du compte GitHub.

Tout cela est très bien, mais me pose (et peux vous poser) un problème. J’ai déjà des paires de clefs SSH dans mon $HOME/.ssh. Comment faire pour avoir une clef spécifique et utiliser celle-là au moment des push/pull ?

Génération de la paire de clefs

La première entorse aux instructions de GitHub se fait dès la création de la paire de clefs. Au lieu de laisser faire ssh-keygen, je donne le nom du fichier que je veux pour ma clef privée, ici github.rsa

1
2
3
4
5
6
$ ssh-keygen -t rsa -C "github@example.com" Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/github.rsa Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/github.rsa.
Your public key has been saved in /home/user/.ssh/github.rsa.pub.
The key fingerprint is: 8f:12:12:1e:76:3f:b9:4a:2c:60:fd:62:f3:da:36:b4 github@example.com
Il faut ensuite déposer la clef publique (~/.ssh/github.ras.pub) sur le serveur en suivant les instructions de GitHub… encore une fois pas jusqu’au bout.

Pour tester la connectivité, nous devons modifier la commande proposée :

1
2
$ ssh -T git@github.com -i $HOME/.ssh/github.rsa Enter passphrase for key '/home/jfoucry/.ssh/github.rsa':
Hi jfoucry! You've successfully authenticated, but GitHub does not provide shell access.

Macédoine d’instructions

GitHub propose de configurer de façon globale (mot clef global dans les commandes git). Personnellement, ça me dérange, j’utilise git avec d’autres dépôts et j’aimerais laisser la configuration globale telle quelle est.

Avant la série d’instruction qui consiste à mettre le nom du développeur et le token GitHub dans la configuration GLOBAL de git, nous allons créer le répertoire local qui contient nos sources.

1
$ mkdir ~/Documents/Sources/projets/MonProjet $ cd ~/Documents/Sources/projets/MonProjet $ git init
Notre dépôt local de référence est créé, c’est maintenant que nous allons reprendre les instructions de GitHub, avec une petite différence, nous allons retirer le mot clef global :

1
2
$ git config github.user userName $ git config github.token MonToken $ git config user.name "Prenom Nom"
$ git config user.email "github@example.com"

SSH, le retour de la vengeance du petit fils

Si nous continuons les instructions de GitHub, nous allons avoir un problème. La commande git ne va pas trouver la bonne clef privée pour dialoguer avec le serveur GitHub. Nous devons ruser en utilisant une des fonctionnalités de OpenSSH, j’ai nommé, le fichier $HOME/.ssh/config.

Dans ce fichier nous allons indiquer comment joindre le serveur GitHub. Mais voyez plutôt :

1
2
3
host github
Hostname github.com user git
IdentityFile /home/jfoucry/.ssh/github.rsa

La première ligne est un petit nom pour le serveur, le seconde indique l’adresse ou le nom du serveur, user DOIT être git dans cette configuration, et IdentityFile est le chemin vers la clef privée.

Réessayons la commande que GitHub propose pour tester une fois le fichier sauvegardé. Cette fois, j’utilise le petit nom de ma configuration.

1
2
3
4
$ ssh -T github
Enter passphrase for key '/home/jfoucry/.ssh/github.rsa':
Enter passphrase for key '/home/jfoucry/.ssh/github.rsa':
Hi jfoucry! You've successfully authenticated, but GitHub does not provide shell access.

Finissons-en maintenant

En effet, nous pouvons maintenant reprendre la documentation de GitHub (avec encore quelques modifications mineures).

1
2
$ touch README $ git add README $ git commit -m "First commit"
$ git remote add origin github:jfoucry/MonProjet.git $ git push -u origin master

J’utilise le petit nom de ma configuration SSH.

Pour cloner, on utiliser à nouveau le petit nom :

1
2
3
4
$ git clone github:jfoucry/MonProjet.git
Cloning into 'MonProjet'...
Enter passphrase for key '/home/jfoucry/.ssh/github.rsa': remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0) Receiving objects: 100% (3/3), 211 bytes, done.
github  clefs  ssh 

powered by FreeBSD