Utiliser une clef SSH dédiée pour GitLab et/ou GitHub
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 commandegit config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"