Utiliser une clef SSH dédiée pour GitLab et/ou GitHub

Développement 11 janv. 2022

Il existe plusieurs solutions pour permettre à Git de choisir la bonne clef SSH lors d'une connexion à un serveur distant. Ainsi, les commandes git clone git@github.com:*/*.git ou git clone git@gitlab.com:*/*.git peuvent être diffenciées et utiliser des informations de sécurité différentes.

A l'issue de cet article, vous pourrez utiliser plusieurs clefs SSH pour :

  • l'administration de serveurs,
  • le développement sur GitLab,
  • le développement sur GitHub,
  • d'autres cas d'usage !
Nous avons fait le choix de ne présenter que la solution qui nous semble la plus simple et fiable : cette dernière est applicable pour Linux / Unix et Windows.

Préparation

Si ce n'est pas déjà fait, générez une clef privée et publique spécifique pour vos accès SSH à GitLab et/ou GitHub (Compatible Linux / Unix et Windows) : ssh-keygen -t rsa

La commande vous posera plusieurs questions. Elle vous permettra de changer le nom et l'emplacement des clefs (recommandé pour réussir notre objectif de clef SSH dédiée à un serveur Git) :

Generating public/private rsa key pair.
Enter file in which to save the key (/home/example/.ssh/id_rsa): /home/synchro/.ssh/id_rsa_github
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/example/.ssh/id_rsa_github.
Your public key has been saved in /home/example/.ssh/id_rsa_github.pub.
The key fingerprint is:
SHA256:iFyfoLGy5dtMcflsgdFJJCTGtGmzSOonK3ThzDFGpns example@debian-admin
The key's randomart image is:
+---[RSA 2048]----+
|     o+.o.o      |
|   o ..+ + .     |
|  + o B . o      |
| . O O * =       |
|  O @ + S .      |
| + E   o o .     |
|. * o .   +      |
|.  + =   .       |
| .. . o          |
+----[SHA256]-----+

Sur Linux / Unix

Modifiez / créez le fichier ~/.ssh/config :

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/id_rsa_github
    
Host gitlab.com
    HostName gitlab.com
    IdentityFile ~/.ssh/id_rsa_gitlab

Protéger l'accès au fichier de configuration avec chmod 600 ~/.ssh/config.
Vérifier les droits d'accès aux clefs avec chmod 400 ~/.ssh/id_rsa_github et/ou chmod 400 ~/.ssh/id_rsa_gitlab.

Sur Windows

Modifiez / créez le fichier %USERPROFILE%\.ssh\config :

Host github.com
    HostName github.com
    IdentityFile %USERPROFILE%/.ssh/id_rsa_github
    
Host gitlab.com
    HostName gitlab.com
    IdentityFile %USERPROFILE%/.ssh/id_rsa_gitlab

Autres solutions

Si la solution proposée ne correspond pas à votre cas d'usage et que vous cherchez des alternatives, voici quelques pistes possibles :

  • Utilisez une variable d'environnement (depuis Git 2.3.0) GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" git clone git@YOUR_GIT_REPO
  • Fixez l'information dans la configuration git du projet lors du clone (depuis Git 2.10.0) git clone -c "core.sshCommand=ssh -i ~/.ssh/id_rsa_example -F /dev/null" git@YOUR_GIT_REPO. Cette configuration peut être changée a postériori avec la commande git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"

Mots clés

Etineo

Accompagnement des professionnels sur l'édition de logiciels, la mise en œuvre d'infrastructures, et la sécurité informatique.