logo telecom ipp

Chapitre 2 : SSH

SSH: Histoire

Quand je me connecte à l’école depuis chez moi, je rentre dans un système où j’ai besoin de m’authentifier pour avoir accès à certaines données sensibles. Le moyen habituel d’authentification est le login et mot de passe. Quand je me connecte, mes informations de connexion transitent sur ma machine, sur la connexion réseau entre ma machine et celle de l’école et sur la machine de l’école. Si un pirate écoute ma machine, le réseau ou la machine de l’école, il peut se faire passer pour moi.

Je suppose que l’école est protégée contre les pirates par le travail de la DSI. Ma machine est protégée des pirates par divers logiciels. Par contre, le réseau entre chez moi et l’école est un espace que je ne contrôle pas. Il pourrait y avoir une machine qui écoute tout ce qui passe sur le réseau pour détecter ce qui ressemble à un login et mot de passe. Par exemple, il est facile de faire cela dans l’école en installant WireShark sur ma machine. Si pendant que j’écoute, quelqu’un se logge sans sécurité, je peux capturer son login et mot de passe.

SSH est un moyen de sécuriser ses communications.

SSH: Principe

Je vais laisser les explications techniques à une UE réseau future. Ce que vous avez besoin de savoir sur SSH est :

  • C’est un moyen d’établir une connexion sécurisée entre deux machines
  • Même si un écouteur reçoit tous les paquets y compris lors de la connexion initiale, il ne peut rien en faire
  • Cette sécurité est fondée sur une clef secrète qui ne doit jamais quitter votre machine et qui doit être en lecture seule pour votre compte et non lisible par les autres comptes de votre machine s’il y en a. Il ne faut pas échanger cette clef secrète même par une clef USB pour la mettre sur plusieurs machines.
  • Vous avez une clef publique, qui va avec la clef secrète, et que vous installerez sur toutes les machines où vous voulez vous connecter depuis votre machine.

SSH: Installation

Pour installer une communication SSH, il faut donc :

  • Créer une paire de clefs, clef privée et clef publique
  • Déposer la clef privée dans votre dossier .ssh avec les bonnes permissions
  • Ajouter la clef publique dans le fichier .ssh/authorized_keys sur toutes les machines où vous voulez vous connecter
  • Sur votre machine, faire ssh suivi de l’adresse de la machine cible
  • Et voilà.

SSH: Clefs

Pour créer une paire de clefs, la meilleure option est ED25519 (pas DSA, pas RSA, pas ECDSA). La clef obtenue est plus courte et beaucoup plus solide.

Lors de la création de la clef, vous avez le choix de mettre un mot de passe sur la clef privée. Je vous recommande de mettre un mot de passe, même si ce n’est pas obligatoire. Si votre machine est volée ou piratée, sans mot de passe, le pirate peut se connecter partout.

Quand vous ajoutez une clef publique dans le fichier authorized_keys, attention à ne pas ajouter de ligne vide avant ou après votre clef publique, à coller une clef publique entière et rien d’autre… Si le fichier authorized_keys n’est plus de la bonne forme, la connexion ssh ne fonctionnera plus sur cette machine.

SSH Mac

SSH Windows

SSH Linux

Commande

Dans tous les cas la commande est :

ssh-keygen -o -a 100 -t ed25519 -f .ssh/id_ed25519 -C "you@telecom-paris.fr"

Ne pas utiliser putty qui génère des fichiers dans un autre format.

Plutôt lancer cette commande ci-dessus directement au bon endroit, à savoir votre dossier .ssh.

SSH: Se connecter

Pour se connecter à une machine, par exemple ssh.enst.fr, il faut exécuter dans le terminal, avec nom-23 votre login ecole (il y a parfois la première lettre de votre prénom devant votre nom ou votre nom peut être abrégé) :

ssh nom-23@ssh.enst.fr

Dans ce cas, il vous demande votre mot de passe. La premiere fois, vous devez utiliser le mot de passe.

Si vous installez votre clef publique dans .ssh/authorized_keys sur la machine sur laquelle vous vous connectez (raspberry PI), alors la prochaine fois, vous pourrez faire :

ssh -i .ssh/id_ed25519 nom-23@ssh.enst.fr

Cette instruction dit à ssh d’aller chercher la clef privée dans .ssh/id_ed25529, à remplacer par le nom de votre clef privée. Dans ce cas, il ne demande pas votre mot de passe du compte et vous connecte directement. Si vous avez mis un mot de passe sur la clef privée, il vous demande votre mot de passe pour la clef.

Pour quitter une session ssh, faites logout ou tapez controle-D

SSH: Fluidifier

Il est possible de grandement fluidifier l’usage de ssh en ajoutant un fichier texte nommé config dans le dossier .ssh.

Contenu du fichier config :

Host *
  AddKeysToAgent yes
  IdentitiesOnly yes

Host gitlab.enst.fr
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/<le nom de votre clef privée>

Ce fichier dit:

  • de demander le mot de passe de la clef la premiere fois qu’elle est utilisée puis de la conserver dans le ssh-agent
  • pour gitlab.enst.fr, utiliser la clef privée citée

Donc au premier clone, push ou pull, ça vous demande le mot de passe, puis plus jamais jusqu’au prochain reboot de votre machine.

ForwardAgent

Pour utiliser vos clefs depuis une machine distante à laquelle vous vous connectez avec ssh, vous avez le choix:

  • de créer une paire de clefs sur cette machine distante et de refaire le process précédent
  • de configurer le ForwardAgent

Si vous ajoutez au fichier config dans votre dossier .ssh sur votre machine les lignes :

Host robotpi-XX.enst.fr
     ForwardAgent yes

Alors, quand vous êtes connecté sur robotpi-XX.enst.fr depuis votre machine configurée comme cela, alors la machine robotpi-XX.enst.fr fonctionne comme si elle était configurée en SSH comme votre machine. git clone ... ou git pull vont fonctionner comme si depuis votre machine.