Aller au contenu
Développement medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Protocoles Git : HTTP, SSH et Git

8 min de lecture

Git supporte quatre protocoles de transport : HTTPS, SSH, Git et Local. Dans la pratique, vous choisirez entre HTTPS et SSH. Ce guide explique chaque protocole, ses avantages et ses limites, pour que vous fassiez le bon choix.

Prérequis : Remotes fondamentaux.

  • Comprendre les 4 protocoles Git : local, SSH, HTTP/HTTPS et Git
  • Distinguer HTTPS et SSH pour choisir selon votre environnement
  • Évaluer les implications de sécurité et de performance de chaque protocole
  • Configurer le protocole adapté sur GitHub, GitLab ou un serveur interne
ProtocoleURL typePortAuthentification
HTTPShttps://github.com/user/repo.git443Token / mot de passe
SSHgit@github.com:user/repo.git22Clé SSH
Gitgit://github.com/user/repo.git9418Aucune
Local/srv/git/repo.gitSystème de fichiers

Le protocole le plus courant. Depuis Git 1.6.6, Git utilise le Smart HTTP qui négocie le transfert de manière intelligente (comme SSH).

Fenêtre de terminal
git clone https://github.com/user/project.git

Depuis 2021, GitHub (et d’autres plateformes) n’acceptent plus les mots de passe en HTTPS. Vous devez utiliser un Personal Access Token (PAT) :

Fenêtre de terminal
# Git demandera vos identifiants — utilisez le PAT comme mot de passe
git push origin main
Username: votre-username
Password: ghp_xxxxxxxxxxxx # le PAT, pas votre mot de passe

Pour éviter de retaper le token à chaque fois, configurez un credential helper :

Fenêtre de terminal
# Cache en mémoire (15 min par défaut)
git config --global credential.helper cache
# Cache avec durée personnalisée (1h)
git config --global credential.helper 'cache --timeout=3600'
# Stockage sur disque (attention : en clair)
git config --global credential.helper store
# Git Credential Manager (recommandé sur Windows/macOS)
git config --global credential.helper manager
AvantageInconvénient
Fonctionne partout (pare-feux, proxies)Token à gérer
Pas de configuration côté serveurMoins pratique que SSH pour le quotidien
Authentification par URL possibleCredential helper nécessaire

Le protocole préféré des développeurs pour le quotidien. Une fois la clé configurée, aucune saisie de mot de passe.

Fenêtre de terminal
git clone git@github.com:user/project.git
  1. Générez une clé SSH (si vous n’en avez pas) :

    Fenêtre de terminal
    ssh-keygen -t ed25519 -C "votre@email.com"

    Préférez ed25519 (plus court, plus sûr) à RSA.

  2. Ajoutez la clé à l’agent SSH :

    Fenêtre de terminal
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_ed25519
  3. Copiez la clé publique :

    Fenêtre de terminal
    cat ~/.ssh/id_ed25519.pub
  4. Ajoutez-la sur GitHub (Settings → SSH and GPG keys) ou GitLab (Preferences → SSH Keys)

  5. Testez la connexion :

    Fenêtre de terminal
    ssh -T git@github.com
    Hi username! You've successfully authenticated, but GitHub does not provide shell access.
AvantageInconvénient
Pas de mot de passe après configurationConfiguration initiale requise
Sûr (chiffrement asymétrique)Bloqué par certains pare-feux (port 22)
Rapide pour les push/pull quotidiensClé privée à protéger

Un protocole léger, sans authentification ni chiffrement. Il écoute sur le port 9418.

Fenêtre de terminal
git clone git://github.com/user/project.git
  • Le plus rapide pour le transfert (pas de surcharge SSL/SSH)
  • Aucune authentification : lecture seule uniquement
  • Pas de chiffrement : les données transitent en clair
  • Utilisé principalement pour les miroirs de dépôts publics en lecture

Git peut travailler directement sur le système de fichiers :

Fenêtre de terminal
# Chemin absolu
git clone /srv/git/project.git
# Avec le préfixe file://
git clone file:///srv/git/project.git

La différence : sans file://, Git utilise des hardlinks et copies directes (plus rapide). Avec file://, Git utilise le transport réseau (plus lent mais plus propre pour un transfert minimal).

  • Dépôts sur un NFS ou partage réseau monté
  • Tests locaux : simuler un remote avec un bare repository
  • Sauvegardes sur un autre disque
CritèreHTTPSSSHGitLocal
SécuritéTLSChiffrement asymétriqueAucuneSystème de fichiers
AuthentificationToken/PATClé SSHNonPermissions FS
Pare-feuPasse partout (443)Parfois bloqué (22)Souvent bloqué (9418)N/A
PerformanceBonneBonneMeilleureMeilleure
Écriture (push)OuiOuiNon (lecture seule)Oui
ConfigurationFaibleMoyenneCôté serveurAucune
SituationProtocole recommandé
Développeur quotidienSSH (confort + sécurité)
CI/CD, scripts automatisésHTTPS avec token (pas d’agent SSH)
Derrière un proxy/pare-feu strictHTTPS (port 443)
Miroir public en lectureHTTPS (Git protocol déprécié)
Tests locaux / bare reposLocal
SymptômeCause probableSolution
Permission denied (publickey)Clé SSH non configurée ou non ajoutéessh-add, vérifiez la clé sur la plateforme
fatal: Authentication failedToken expiré ou mauvaisRégénérez le PAT sur la plateforme
Connection refused (port 22)Pare-feu bloque SSHUtilisez HTTPS ou SSH sur le port 443
SSL certificate problemCertificat auto-signégit config http.sslVerify false (temporaire) ou ajoutez le CA
  • HTTPS : fonctionne partout, token requis, idéal pour la CI/CD
  • SSH : confort au quotidien, clé à configurer une fois, préférez ed25519
  • Le protocole Git (git://) est déprécié — pas d’authentification ni de chiffrement
  • Local : pour les tests et les bare repos sur le système de fichiers
  • La plupart des développeurs utilisent SSH pour le quotidien et HTTPS pour la CI/CD

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn