Cet article fait partie d’une longue série en cours d’écriture consacrée à git.

Utiliser sa clé privée avec git lors des connexions via SSH

Parmi les protocoles supportés par git, on peut citer SSH. Voici les deux syntaxes possibles au niveau des URL, utilisées lors d’un clone, par exemple.

ssh://[user@]host.xz[:port]/path/to/repo.git/
[user@]host.xz:path/to/repo.git/

Il n’existe pas d’option git qui permette de préciser quelle clé privée utiliser pour la connexion.

Il faut savoir que, comme le transport se base sur SSH, on peut donc profiter de la configuration de ce dernier. Créer le fichier ~/.ssh/config, et lui donner les droits appropriés.

mkdir -p ~/.ssh
touch ~/.ssh/config
# ces fichiers sont sensibles, en lecture par le propriétaire uniquement
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config

Éditez-le avec votre éditeur préféré et ajoutez-y le contenu suivant.

Host serveurgit
HostName monserveur.com
User matthieu
Port 22
IdentityFile ~/.ssh/ma_cle
IdentitiesOnly yes
  • Host permet de donner un nom court à votre serveur, une sorte d’alias ;
  • HostName correspond à l’adresse IP ou nom d’hôte du serveur sur lequel se connecter ;
  • User permet de définir le nom d’utilisateur ;
  • Port permet de définir le numéro de port ;
  • IdentityFile est le chemin vers votre clé privée, vous pouvez aller faire un tour sur l’article suivant pour créer votre paire de clés publique et privée ;
  • IdentitiesOnly yes permet de n’utiliser que la clé privée configurée et pas d’autres éventuellement chargées dans un ssh-agent.

On pourra ainsi faire un git clone en utilisant l’alias choisi précédemment.

git clone serveurgit:mon_depot.git

Cela marche également avec un git remote.

git remote add origin serveurgit:mon_depot.git

L’avantage d’utiliser la configuration de SSH, est que l’alias configuré peut être utilisé avec d’autres outils pouvant utiliser SSH : scp, sftp, rsync, svn, etc. Le second intérêt est que l’alias simplifie grandement la ligne de commande. Le changement de configuration d’un serveur se fait à un seul endroit et tous les outils utilisant cet alias sont alors impactés par ce changement, très pratique.