Git et GitHub sont des outils essentiels pour tout développeur. Ils sont largement utilisés dans presque tous les types de projets de développement de logiciels.

Il existe d’autres services d’hébergement Git comme Gitlab et Bitbucket, mais GitHub est le choix le plus populaire auprès des développeurs. Vous pouvez même modifier votre profil pour paraître plus attrayant aux yeux des recruteurs.

Vous pouvez utiliser Git et GitHub pour organiser vos projets, collaborer avec d’autres développeurs et – bien sûr – sur Kinsta.

Mais comme Git et GitHub sont des outils similaires mais différents, vous devez constamment mettre à jour votre flux de travail avec chacun d’eux.

Nous vous recommandons d’utiliser des clés SSH pour chacune de vos machines. Ainsi, dans ce tutoriel, vous apprendrez ce qu’elles sont, certains de leurs avantages, et comment générer et configurer les clés SSH de GitHub.

C’est parti !

Que sont les clés SSH ?

En termes simples, les clés SSH sont des informations d’identification utilisées pour le protocole SSH (Secure Shell) afin de permettre un accès sécurisé à des ordinateurs distants via Internet. Habituellement, cette authentification se fait dans un environnement de ligne de commande.

Ce protocole est basé sur une architecture client-serveur, ce qui signifie que vous, en tant qu’utilisateur (ou « client »), devez utiliser un logiciel spécial, appelé client SSH, pour vous connecter à un serveur distant et exécuter des commandes. C’est essentiellement ce que vous faites lorsque vous vous authentifiez à GitHub via un terminal.

Push Git.
Push Git.

Mais SSH n’est pas seulement utilisé pour GitHub. Il est largement utilisé par d’autres plateformes comme Kinsta, Google Cloud et Amazon Web services pour créer un canal sécurisé d’accès à leurs services.

Maintenant, pour savoir comment les clés SSH fonctionnent réellement, vous devez comprendre les différences entre les clés publiques et privées.

Clés publiques et privées

Commençons par les bases.

Le protocole SSH utilise une technique de cryptographie appelée cryptage asymétrique. Ce terme peut sembler compliqué et bizarre, mais rien n’est moins vrai.

Fondamentalement, le cryptage asymétrique est un système qui utilise une paire de clés, à savoir des clés publiques et privées.

Comme vous pouvez le deviner, la clé publique peut être partagée avec n’importe qui. Son principal objectif est de chiffrer les données, en convertissant le message en code secret ou en texte chiffré. Cette clé est généralement envoyée à d’autres systèmes – par exemple, des serveurs – pour crypter les données avant de les envoyer sur Internet.

D’autre part, la clé privée est celle que vous devez garder pour vous. Elle est utilisée pour décrypter les données cryptées avec votre clé publique. Sans elle, il est impossible de décoder vos informations cryptées.

Cette méthode vous permet, ainsi qu’au serveur, de conserver un canal de communication sûr pour transmettre les informations.

Voici ce qui se passe en arrière-plan lorsque vous vous connectez à un serveur via SSH :

  1. Le client envoie la clé publique au serveur.
  2. Le serveur demande au client de signer un message aléatoire crypté avec la clé publique en utilisant la clé privée.
  3. Le client signe le message et transmet le résultat au serveur.
  4. Une connexion sécurisée est établie entre le client et le serveur.

Il est important de garder vos clés privées en sécurité et de ne les partager en aucun cas avec personne. Elles sont littéralement la clé de toutes les informations qui vous sont envoyées.

Utilisation des clés SSH avec GitHub

Depuis le 13 août 2021, Github n’accepte plus l’authentification par mot de passe pour l’accès à la ligne de commande. Cela signifie que vous devez désormais vous authentifier via un jeton d’accès personnel ou utiliser une clé SSH (un peu plus pratique).

Voici ce qui se passe lorsque vous essayez de vous authentifier avec votre mot de passe GitHub par HTTP dans un terminal :

Username for 'https://github.com': yourusername

Password for 'https://[email protected]':

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.

fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'

GitHub a besoin de votre clé publique pour vous autoriser à modifier l’un de vos dépôts via SSH.

Voyons comment vous pouvez générer des clés SSH localement.

Comment générer des clés SSH localement

Maintenant que vous comprenez un peu le protocole SSH et les différences entre les clés publiques et privées, il est temps de configurer le canal SSH sécurisé entre votre machine et vos dépôts GitHub.

Avant d’aller plus loin, vous devriez déjà avoir un compte GitHub et un terminal/une invite de commande avec Git installé sur votre système. Si vous êtes sous Windows, assurez-vous d’avoir installé Git bash, qui intègre tous les outils dont vous aurez besoin pour suivre ce tutoriel.

Le client OpenSSH est le logiciel open source le plus populaire utilisé pour se connecter via SSH. Vous n’aurez pas à vous soucier de votre système d’exploitation car il est installé par défaut sur Linux, macOS et Windows 10.

Vous devez lancer une invite de commande sur Windows ou un terminal sur les systèmes basés sur Unix pour générer des clés SSH locales. En général, vous pouvez le faire en recherchant « terminal », « cmd » ou « powershell » dans votre panneau d’applications, puis en cliquant sur l’icône qui s’affiche.

Recherche de l'application Terminal.
Recherche de l’application Terminal.

Après avoir fait cela, vous devriez avoir une fenêtre similaire à l’image suivante.

Application Terminal.
Application Terminal.

Exécutez la commande suivante pour générer une paire de clés SSH locales :

ssh-keygen -t ed25519 -C "[email protected]"

Il est temps de vous dire un secret : Personne ne peut vraiment se souvenir de cette commande ! La plupart des développeurs doivent la chercher sur Google à chaque fois car :

  1. Il s’agit d’une commande vraiment longue, avec des chiffres oubliables et aléatoires.
  2. Nous l’utilisons rarement, donc cela ne vaut pas la peine de la mémoriser la plupart du temps.

Cependant, il est important de comprendre chaque commande que nous introduisons dans nos terminaux, alors voyons ce que signifie chaque partie de celle-ci.

  • ssh-keygen : L’outil en ligne de commande utilisé pour créer une nouvelle paire de clés SSH. Vous pouvez voir ses drapeaux avec ssh-keygen help
  • t ed25519 : L’indicateur -t est utilisé pour indiquer l’algorithme utilisé pour créer la signature numérique de la paire de clés. Si votre système le prend en charge, ed25519 est le meilleur algorithme que vous pouvez utiliser pour créer des paires de clés SSH.
  • -C « email » : Le drapeau -C est utilisé pour fournir un commentaire personnalisé à la fin de la clé publique, qui est généralement l’email ou l’identification du créateur de la paire de clés.

Après avoir saisi la commande dans votre terminal, vous devrez saisir le fichier dans lequel vous souhaitez enregistrer les clés. Par défaut, il est situé dans votre répertoire personnel, dans un dossier caché nommé « .ssh », mais vous pouvez le changer pour ce que vous voulez.

Il vous sera ensuite demandé une phrase de passe à ajouter à votre paire de clés. Cela ajoute une couche supplémentaire de sécurité si, à tout moment, votre appareil est compromis. Il n’est pas obligatoire d’ajouter une phrase de passe, mais c’est toujours recommandé.

Voici à quoi ressemble l’ensemble du processus :

Commande ssh-keygen.
Commande ssh-keygen.

Comme vous pouvez le voir, cette commande génère deux fichiers dans le répertoire que vous avez sélectionné (généralement ~/.ssh) : la clé publique avec l’extension .pub, et la clé privée sans extension.

Nous vous montrerons plus tard comment ajouter la clé publique à votre compte GitHub.

Ajouter la clé SSH à ssh-agent

Le programme ssh-agent fonctionne en arrière-plan, conserve vos clés privées et vos phrases de passe en toute sécurité, et les tient prêtes à être utilisées par ssh. C’est un excellent utilitaire qui vous évite de saisir votre phrase de passe à chaque fois que vous voulez vous connecter à un serveur.

Pour cette raison, vous allez ajouter votre nouvelle clé privée à cet agent. Voici comment :

  1. Assurez-vous que ssh-agent fonctionne en arrière-plan.
    eval `ssh-agent`
    # Agent pid 334065

    Si vous obtenez un message similaire à celui-ci, tout va bien. Cela signifie que ssh-agent s’exécute sous un identifiant de processus (PID) particulier.

  2. Ajoutez votre clé privée SSH (celle sans extension) à ssh-agent.
    ssh-add ~/.ssh/kinsta_keys

    Remplacez kinsta_keys par le nom de votre clé SSH. Si c’est la première clé que vous avez créée, elle doit être nommée « id_algorithm_used » par exemple, id_ed25519.

Ajouter la clé SSH au compte GitHub

L’étape finale consiste à ajouter votre clé publique à votre compte GitHub. Suivez simplement ces instructions :

  1. Copiez votre clé publique SSH dans votre presse-papiers. Vous pouvez ouvrir le fichier où elle se trouve avec un éditeur de texte et la copier, ou utiliser le terminal pour afficher son contenu.
    cat ~/.ssh/kinsta_keys.pub
    # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
  2. Connectez-vous à GitHub et allez dans la section supérieure droite de la page, cliquez sur votre photo de profil, et sélectionnez Settings

    Réglages GitHub.
    Réglages GitHub.

  3. Ensuite, dans vos réglages de profil, cliquez sur SSH and  GPG keys.

    Clés SSH et GPG.
    Clés SSH et GPG.

  4. Cliquez sur le bouton New SSH key.

    Bouton de nouvelle clé SSH.
    Bouton de nouvelle clé SSH.

  5. Donnez un titre à votre nouvelle clé SSH sur GitHub – généralement, l’appareil à partir duquel vous utiliserez cette clé. Puis collez la clé dans la zone Key.

    Formulaire d'ajout d'une nouvelle clé SSH
    Formulaire d’ajout d’une nouvelle clé SSH

  6. Ajoutez votre clé SSH.

    Bouton Ajouter une clé SSH.
    Bouton Ajouter une clé SSH.

Tester la connexion SSH avec un Repo Push

Il est temps de tester tout ce que vous avez fait jusqu’à présent. Vous allez modifier, commiter et pousser vers l’un de vos dépôts existants en utilisant SSH pour vous assurer que votre connexion est correctement configurée.

Pour notre exemple, nous allons modifier le site HTML simple que nous avons créé dans notre tutoriel Git pour le développement web.

Tout d’abord, nous devrons cloner le dépôt sur notre machine locale. Nous pouvons nous rendre sur la page du dépôt sur GitHub et copier l’adresse SSH qu’elle fournit.

Commande SSH clone.
Commande SSH clone.

Ensuite, clonez le repo en utilisant le terminal :

git clone [email protected]:DaniDiazTech/HTML-site.git

Maintenant, ajoutons une simple balise <h1> dans le fichier index.html:

...
<div class="container my-2">
    <h1 class="text-center">A new title!<h1>
</div>

<div class="container my-3">
...
Le site HTML simple.
Le site HTML simple.

Nous ne touchons à aucun JavaScript ou CSS pour garder ce montage simple. Mais si vous êtes habile avec JavaScript, vous pourriez trouver une place chez Kinsta. Vérifiez les compétences de code dont vous avez besoin pour faire partie de l’équipe Kinsta.

Après avoir fait cela, livrez les changements :

git commit -am "Added a simple title"

Et poussez-les dans GitHub comme vous le feriez normalement.

git push

Si tout s’est bien passé, félicitations ! Vous venez de configurer une connexion SSH entre votre machine et GitHub.

Gérer plusieurs clés SSH pour différents comptes GitHub

Si vous avez plusieurs comptes GitHub – disons un pour vos projets personnels et un pour votre travail – il est difficile d’utiliser SSH pour les deux. Vous auriez normalement besoin de machines séparées pour vous authentifier à différents comptes GitHub.

Mais ce problème peut être résolu facilement en configurant le fichier de configuration SSH.

Entrons dans le vif du sujet.

  1. Créez une autre paire de clés SSH, et ajoutez-la à votre autre compte GitHub. Gardez à l’esprit le nom du fichier auquel vous attribuez la nouvelle clé.
    ssh-keygen -t ed25519 -C "[email protected]"
  2. Créez le fichier de configuration SSH. Le fichier de configuration indique au programme SSH comment il doit se comporter. Par défaut, le fichier de configuration peut ne pas exister, alors créez-le dans le dossier .ssh/ :
    touch ~/.ssh/config
  3. Modifiez le fichier de configuration SSH. Ouvrez le fichier de configuration et collez le code ci-dessous :
    #Your day-to-day GitHub account
    
    Host github.com
      HostName github.com
      IdentityFile ~/.ssh/id_ed25519
      IdentitiesOnly yes
    
    # Work account
    Host github-work
      HostName github.com
      IdentityFile ~/.ssh/work_key_file
      IdentitiesOnly yes

Maintenant, chaque fois que vous devez vous authentifier via SSH en utilisant votre compte professionnel ou secondaire, vous modifiez un peu l’adresse SSH du repo, de :

[email protected]:workaccount/project.git

…à :

git@github-work:workaccount/project.git

Résumé

Félicitations – vous avez appris la plupart des connaissances pratiques dont vous avez besoin pour vous connecter à GitHub via SSH !

Ce tutoriel a abordé la nécessité du protocole SSH, les différences entre les clés publiques et privées, la façon de générer des clés, de les ajouter à GitHub, et même de gérer plusieurs clés SSH pour différents comptes GitHub. Gardez à l’esprit qu’à moins que vous ne vouliez perdre l’accès à tout, votre clé privée doit rester ainsi : privée.

Avec ces connaissances, vous êtes maintenant prêt à développer un flux de travail sans faille avec Git et GitHub. Continuez à coder !

Daniel Diaz

Daniel is a self-taught Python Developer, Technical Writer, and long-life learner. He enjoys creating software from scratch and explaining this process through stunning articles. Follow him on Twitter: @DaniDiazTech