Comment générer une paire de clés SSH et l’utiliser avec GitLab ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à établir une connexion SSH à un dépôt GitLab, en générant une paire de clés SSH en amont. Grâce à cette connexion, il sera possible de travailler en local sur les fichiers de notre projet hébergé sur GitLab, en utilisant Git.
Grâce à SSH, notre machine locale va pouvoir établir une connexion sécurisée à GitLab pour télécharger et pousser les données de notre projet Git. Ainsi, pour se connecter à GitLab depuis Git, l'authentification s'effectuera par un échange de clés plutôt qu'un couple "identifiant / mot de passe". GitLab accepte différents types de clés SSH, notamment les clés ED25519 (à prioriser vis-à-vis de RSA !).
Avant de commencer, et si vous débutez avec GitLab, vous devez créer un compte sur GitLab et créer un nouveau projet. Ceci est totalement gratuit. En ce qui me concerne, pour cette démonstration je vais utiliser le projet nommé "demo-git" au sein du GitLab IT-Connect.
Vous devez également avoir Git sur votre ordinateur afin de pouvoir utiliser les différentes commandes, que ce soit sous Windows (comme moi) ou Linux. Avant de mettre en ligne ce tutoriel, j'ai publié un premier article d'introduction à Git que je vous invite à lire : Débuter avec Git.
II. Générer les clés SSH
Le client SSH est préinstallé sur plusieurs versions de Windows, notamment Windows 10 et Windows 11, ainsi que Linux et macOS. À partir d'une console ouverte sur ma machine Windows, je peux voir facilement quelle est la version d'OpenSSH installée sur ma machine :
ssh -V
Un résultat semblable à celui ci-dessous sera retourné. Il n'est pas nécessaire d'effectuer une modification, car la version installée par défaut est suffisante.
Qui dit authentification par clés, dis que nous devons disposer d'une paire de clés, à savoir une clé privée qui restera sur notre machine locale, et une clé publique que l'on va déclarer par la suite côté GitLab. Si vous avez déjà utilisé l'authentification par clé SSH sur votre machine, ce n'est pas nécessaire de régénérer une nouvelle paire de clés (même s'il est possible d'avoir plusieurs paires de clés avec des noms différents). Sinon, il faut le faire dès maintenant avec l'utilitaire ssh-keygen.exe, inclus avec le client SSH.
Comment savoir si vous avez déjà des clés SSH ? Pour cela, accédez au répertoire ".ssh" situé dans votre profil utilisateur. Sous Windows, et pour l'utilisateur "Florian", cela donne :
C:\Users\Florian\.ssh
Sous Linux, il faudra regarder le répertoire ".ssh" du home de l'utilisateur. Pour générer une paire de clés, on exécute cette commande :
ssh-keygen -t ed25519
Appuyez sur Entrée pour conserver le nom par défaut, à savoir "id_ed25519". Ensuite, la passphrase est demandée pour sécuriser la clé privée ; elle fait office de mot de passe (que vous devez stocker dans votre gestionnaire de mots de passe favori). Validez.
Dans le répertoire ".ssh" de mon utilisateur, j'ai bien ma paire de clés :
- Fichier id_ed25519 correspondant à la clé privée
- Fichier id_ed25519.pub correspondant à la clé publique (associée à ma clé privée)
Note : la paire de clés est enregistrée dans SSH, car elle est stockée dans le répertoire par défaut dans lequel regarde SSH. Si vous utilisez un autre répertoire, il sera nécessaire d'utiliser la commande "ssh-add" suivi du chemin vers le répertoire où se situe la clé privée afin que SSH le prenne en compte.
Désormais, on va copier dans le presse-papier de Windows le contenu de la clé publique :
cat C:\Users\Florian\.ssh\id_ed25519.pub | clip
Vous pouvez aussi ouvrir le fichier (ou afficher le contenu avec "cat") et copier vous-même le contenu. L'étape suivante se passe sur GitLab.
III. Ajouter une nouvelle clé SSH sur GitLab
Ouvrez un navigateur et connectez-vous sur votre espace GitLab. Ensuite, cliquez sur votre avatar en haut à droite pour ouvrir le menu puis cliquez sur "Preferences".
Sur la gauche, cliquez sur "SSH Keys".
Puis à droite, renseignez la section "Add an SSH key" pour ajouter la clé SSH. Ici, dans la zone "Key", il faut coller le contenu de la clé publique générée précédemment. Vous pouvez également donner un nom (Title). Cliquez sur "Add key" quand c'est fait. Voici un exemple :
Notre clé SSH est déclarée sur notre compte GitLab ! Désormais, il va être possible de s'authentifier sur GitLab avec cette paire de clés SSH.
IV. Se connecter à GitLab via SSH
Retournez dans la console afin d'établir une connexion SSH à GitLab. Exécutez la commande suivante :
ssh -T [email protected]
Lorsque la question "Are you sure you want to continue connecting ?" apparaît, répondez "yes" et appuyez sur Entrée. Au final, le message suivant s'affiche avec votre nom d'utilisateur :
V. Cloner un projet GitLab avec Git
Maintenant, l'objectif va être de cloner le projet "demo-git" de mon espace GitLab pour avoir les données du projet en local. Ensuite, je vais pouvoir travailler en local sur mon projet, et quand j'aurais apporté des modifications, je pourrais les pousser (push) vers GitLab. Le tout via la connexion SSH.
Mon projet est accessible à l'adresse suivante :
https://gitlab.com/it-connect/demo-git/
Avec la commande "git clone", cela va me donner cette syntaxe :
git clone [email protected]:it-connect/demo-git.git
Bien entendu, vous devez adapter le chemin par rapport à votre compte et votre projet. Afin de pouvoir récupérer les données, la passphrase de la clé SSH doit être saisie. Dans l'exemple ci-dessous, on peut voir que j'ai pu récupérer trois éléments.
Sachez également que le projet sera cloné dans un sous-répertoire du répertoire courant, pour ma part dans "C:\Git\GitLab", ce qui donnera "C:\Git\GitLab\demo-git".
En fait, mon projet "demo-git" est vide pour le moment, si ce n'est qu'il y a le fichier "README.md".
Sur l'ordinateur local, j'ai copié-collé le script "Windows-Install-FSRM.ps1" dans le répertoire "demo-git" correspondant à mon projet cloné depuis GitLab. Je vais ajouter ce fichier à mon projet :
git add .\Windows-Install-FSRM.ps1
Puis, regarder le statut :
git status
Git m'indique qu'il y a un changement à commit, en l'occurrence l'ajout de ce fichier (événement "new file"). J'en profite pour réaliser un commit qui sera ma version initiale :
git commit -m "Version initiale"
À partir de ce moment-là, le commit est fait en local. Côté GitLab, il n'y a pas de changement : le nouveau fichier n'est pas présent sur le dépôt GitLab. Pour pousser les modifications vers le dépôt GitLab, dans la branche principale, voici la commande à utiliser :
git push origin main
À partir de là, mon fichier est présent sur le dépôt GitLab. Pour le vérifier, je peux simplement rafraîchir la page dans mon navigateur. Le fichier "Windows-Install-FSRM.ps1" est bien présent et le commentaire de mon commit également, à savoir "Version initiale".
Nous venons de voir comment établir une connexion SSH entre Git et GitLab afin de manipuler les données d'un projet hébergé sur GitLab. Pour approfondir ce sujet, je vous recommande la lecture de cette page de la documentation officielle de GitLab.