Se connecter en SSH à son serveur ou son Repository Git sans mot de passe

Selon vos taches à faire, vous aurez peut-être besoin de vous connecter régulièrement à votre serveur ou à votre Repository Github ou Gitlab. Le problème qui se pose alors est de devoir entrer son mot de passe à chaque connexion. Il existe une solution pour vous en passer : se connecter à son serveur ou son Repository avec une clé SSH.

Niveau : Débutant

Prérequis :

  • Avoir un Terminal
  • Avoir un contrat avec un hébergeur permettant d’utiliser le SSH

Le mécanisme d’utilisation des clés SSH a toujours été une de mes bêtes noires… Je l’ai toujours utilisé sans vraiment le comprendre jusqu’au jour où j’ai eu besoin de l’expliquer. J’ai alors pris le temps de regarder concrètement son fonctionnement. Cela m’a permis de réaliser que des mécanismes qui paraissent compliqués peuvent être démystifier lorsqu’on prend le temps de les comprendre et de tester leur fonctionnement. C’est ce que j’ai fait avec la connexion via les clés SSH.

Mais avant d’aborder ce point, définissons le SSH.

Image de cover de l'article Se connecter à son serveur ou son Repository Git sans mot de passe avec le SSH

Qu’est-ce que le SSH ?

Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole SSH existe en deux versions majeures : la version 1.0 et la version 2.0, cette dernière palie à des problèmes de sécurité et est maintenant largement utilisée dans le monde. Cette version est beaucoup plus sûre au niveau cryptographique, et possède en plus un protocole de transfert de fichiers complet, le SSH file transfer protocol, le fameux SFTP.*

Avec le SSH, l’authentification peut se faire sans l’utilisation de mot de passe ou de phrase secrète en utilisant la cryptographie asymétrique.*

Source* : Wikipédia

La clé SSH est une application du principe de cryptographie asymétrique. Elle repose sur l’utilisation de 2 clés :

  • Une clé publique : permet de chiffrer le message
  • Une clé secrète / privée : permet de déchiffrer le message

Prenons un exemple :

  • Bob veut envoyer un message à Alice.
  • Alice fournie sa clé publique à Bob.
  • Bob écrit son message et utilise la clé publique d’Alice pour le chiffrer avant de l’envoyer.
  • Alice reçoit le message et utilise sa clé privée pour le décrypter.

Image de l'article Se connecter à son serveur ou son Repository sans mot de passe avec le SSH

Se connecter à son serveur en SSH

Se connecter en SSH est possible uniquement si le contrat que vous avez souscrit avec votre hébergeur le permet. Si tel n’est pas le cas, il existe d’autres manières de se connecter à un serveur comme le protocole SFTP.

Un logiciel comme FileZilla vous permet de vous connecter à votre serveur en SFTP. Cela vous donnera accès à une interface visuelle similaire à celle sur votre ordinateur.

Pour vous connecter en SSH depuis votre ordinateur, vous aurez besoin des éléments suivants :

  • Un Terminal : aussi appelé invite de commandes.
  • Le nom de domaine du serveur sur lequel vous aurez besoin de vous connecter : cette information apparaît dans le tableau de bord de votre compte chez votre hébergeur.
  • Un accès SSH : sa disponibilité dépend du contrat auquel vous avez souscrit avec votre hébergeur.
  • Un identifiant SSH.
  • Un mot de passe SSH : Nous vous recommandons d’utiliser un générateur de mots de passe aléatoire pour renforcer la sécurité de votre serveur.
  • Une clé SSH : elle sera générée et stockée sur votre ordinateur. Elle permettra de faire le lien entre votre machine et votre ordinateur. Nous verrons comment générer cette clé à la prochaine étape.

Générer une pair de clés SSH personnalisées

Ces clés SSH se situeront dans un dossier .ssh localisé à la racine de votre ordinateur.

Commençons par créer ce dossier en entrant la commande suivante dans votre Terminal :

mkdir ~/.ssh

Puis, créons ces clés en entrant les commandes suivantes :

cd .ssh
ssh-keygen -t ed25519 -a 256 

Cela va générer le prompt ci-dessous, vous pouvez choisir de renommer ou non les fichiers générés. Dans notre cas, nous laissons les noms par défaut.

Laisser la saisie de la passphrase vide à cette étape pour ne pas avoir à la ressaisir à chaque utilisation du fichier lors d’une connexion en SSH.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
  • 2 fichiers seront générés :
    • id_ed25519 : contiendra votre clé privée qui restera confidentiellement stockée sur votre machine
    • id_ed25519.pub : contiendra votre clé publique qu’il faudra copier par la suite sur votre serveur pour établir la connexion avec votre machine.
  • ainsi que le prompt suivant :
Your identification has been saved in /home/user/.ssh/id_ed25519.
Your public key has been saved in /home/user/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:MRk+Y0zCOoOkferhkTvMpcMsYspj212lK7sEauNap user@hostname
The key's randomart image is:
+---[RSA 4096]----+
|     .. o        |
|    . .= o       |
|   o o  X        |
|. . . .          |
|. .=.o .S.       |
| =o.o.  .   .    |
|o +   .  . o ..  |
|.. .  .   oEoo . |
|o.        .o+oo  |
+----[SHA256]-----+

Il vous faut maintenant récupérer votre clé publique en utilisant le code suivant depuis le dossier .ssh dans votre Terminal :

cat id_ed25519.pub

# Affichera une clé aléatoire comme celle ci-dessous : 
ssh-ed25519 JJJJC3NzgC1lRDI1NTE5EEEEIPL31DfzT8eBMiSLCzSi2u4YThdABoxE6qP8OjuCg0ah votre@email.com

Ajouter la clé SSH à son serveur

Il vous faudra ensuite vous connecter à votre serveur une première fois. Pour se faire, munissez-vous :

  • du nom de domaine du serveur
  • de votre identifiant SSH
  • de votre mot de passe SSH

Une fois connecté, si le dossier .ssh n’existe pas, il faudra le créer ainsi que le fichier authorized_keys à l’aide des commandes suivantes :

# 1- se connecter à votre serveur
ssh votre-identifiant@le-domaine-du-serveur
# Le Terminal vous demandera d'entrer votre mot de passe

# 2- Créer le dossier .ssh et le fichier authorized_keys
mkdir ~/.ssh
cd ~/.ssh
touch authorized_keys

Une fois le fichier authorized_keys créé, éditez-le pour y copier votre clé SSH publique avec la commande suivante :

nano authorized_keys

# copier votre clé puis fermer le fichier en appuyant sur les touches "ctrl + x", saisissez "Yes" puis faites "Entrée".

Activer la mécanique de reconnaissance SSH

La dernière étape consistera à clore et relancer la connexion à votre serveur pour activer la mécanique de reconnaissance SSH. Une empreinte (Fingerprint) sera posée sur votre machine pour établir le lien entre cette dernière et votre serveur.

The authenticity of host 'your-domaine-host (2001:9d9:3011:f315:a682:389e:nka8:k220)' can't be established.
ECDSA key fingerprint is SHA256:M7uPM+2g8jZWBI5DolFH1e5vdILrG7841kKH14/slsQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

Cette étape ajoute l’empreinte (Fingerprint) du serveur dans un fichier known_hosts qui se trouve dans votre dossier .ssh.

Vous pouvez maintenant vous reconnecter en utilisant la commande suivante et le Terminal ne vous redemandera plus votre mot de passe 🙂

# se connecter à votre serveur
ssh votre-identifiant@le-domaine-du-serveur
# Le Terminal ne vous demandera PAS d'entrer votre mot de passe

Se connecter à son Repository en SSH

Que ce soit sur Gitlab ou Github, le principe de connexion en SSH sans mot de passe est le même.

Vous aurez besoin d’une clé publique et d’une clé privée. Si vous ne l’avez pas déjà fait, il vous faudra les générer dans votre dossier .ssh à la racine de votre ordinateur avec les commandes suivantes :

mkdir .ssh
cd .ssh
ssh-keygen -t ed25519 -a 256 

Cela va générer le prompt ci-dessous, vous pouvez choisir de renommer ou non les fichiers générés. Dans notre cas, nous laissons les noms par défaut.

Laisser la saisie de la passphrase vide à cette étape pour ne pas avoir à la ressaisir à chaque utilisation du fichier lors d’une connexion en SSH.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
  • 2 fichiers seront générés :
    • id_ed25519 : contiendra votre clé privée qui restera confidentiellement stockée sur votre machine
    • id_ed25519.pub : contiendra votre clé publique qu’il faudra copier par la suite sur votre serveur pour établir la connexion avec votre machine.
  • ainsi que le prompt suivant :
Your identification has been saved in /home/user/.ssh/id_ed25519.
Your public key has been saved in /home/user/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:MRk+Y0zCOoOkferhkTvMpcMsYspj212lK7sEauNap user@hostname
The key's randomart image is:
+---[RSA 4096]----+
|     .. o        |
|    . .= o       |
|   o o  X        |
|. . . .          |
|. .=.o .S.       |
| =o.o.  .   .    |
|o +   .  . o ..  |
|.. .  .   oEoo . |
|o.        .o+oo  |
+----[SHA256]-----+

Il vous faudra ensuite récupérer la clé publique dans le fichier id_ed25519.pub et le copier dans votre compte Github ou Gitlab :

  • Github : votre profile > settings > dans la colonne de gauche : SSH and GPG keys puis en haut à droite cliquer sur New SSH Key
  • Gitlab : votre profile > préférences > SSH Keys puis ajouter votre clé publique.

Aller plus loin avec la documentation Gitlab ou celle de Github.

Happy coding 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.