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.
Je vais laisser les explications techniques à une UE réseau future. Ce que vous avez besoin de savoir sur SSH est :
Pour installer une communication SSH, il faut donc :
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.
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.
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
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:
Donc au premier clone, push ou pull, ça vous demande le mot de passe, puis plus jamais jusqu’au prochain reboot de votre machine.
Pour utiliser vos clefs depuis une machine distante à laquelle vous vous connectez avec ssh, vous avez le choix:
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.