La Connexion Sécurisée À Distance Avec SSH
La Connexion Sécurisée À Distance Avec SSH
La Connexion Sécurisée À Distance Avec SSH
Tutoriel 29 commentaires
Nous entrons probablement maintenant dans l'un des chapitres les plus Auteur : M@teo21
intéressants de ce cours. Nous allons découvrir comment se connecter à
Difficulté :
distance à une machine équipée de Linux. Note : 19 / 20 (9 votes)
Visualisations : 4 181
Je vous en ai déjà un peu parlé au début du cours : toutes les machines sous
Linux peuvent être configurées pour qu'on s'y connecte à distance, pour peu Plus d'informations
qu'elles restent allumées.
Prenons un cas concret : votre ordinateur chez vous est sous Linux, vous le
laissez allumé. Pendant la journée au boulot, vous avez besoin de lancer un téléchargement ou de récupérer un document. Vous vous connectez
à distance sur votre machine et vous ouvrez une console comme si vous êtiez en face de votre PC ! Tout ce que vous avez appris à faire dans
une console, vous pouvez le faire à distance depuis n'importe quelle machine dans le monde.
Nous n'allons pas seulement découvrir comment se connecter à distance. Nous allons aussi essayer de comprendre comment ça fonctionne et
comment les données sont sécurisées grâce au protocole SSH. Ce chapitre sera donc mi-théorique, mi-pratique. Vous apprendrez très
certainement de nouvelles choses sur le monde passionnant des réseaux et de la sécurité (cryptographie).
Ce chapitre intéressera en particulier ceux qui ont besoin d'apprendre à gérer un serveur dédié (et ils sont de plus en plus
nombreux). Sur le Site du Zéro par exemple, j'ai été obligé d'apprendre tout cela lorsque le site a commencé à grossir et qu'il a fallu
louer un premier serveur dédié et l'administrer à distance.
On peut donc être amené à gérer un serveur si on a un gros site ou si on souhaite y faire tourner toutes sortes de services, comme un
serveur de jeux.
Sommaire du chapitre :
Se connecter à une console à distance
De Telnet à SSH, pourquoi faut-il sécuriser les échanges ?
Comment sont cryptés les échanges avec SSH ?
Se connecter avec SSH et PuTTY
L'identification automatique par clé
Q.C.M.
Aller
Pourtant, une des grandes forces de Linux est qu'on peut s'en servir même si on est à des
centaines de kilomètres de la machine. Ce fonctionnement date de l'époque d'Unix où il était
nécessaire d'administrer des machines à distance.
Aujourd'hui, si j'habite à Paris je peux très bien contrôler un ordinateur sous Linux situé à
Tokyo au Japon en même temps qu'un autre ordinateur situé au fin fond du Nevada aux
Etats-Unis. Je peux même ordonner à l'ordinateur de Tokyo d'envoyer un fichier à celui du
Nevada.
Ce genre de manipulation est désormais possible grâce à internet, et cela se fait tous les
jours. Les personnes qui travaillent à gérer des machines Linux, souvent à distance, sont
appelés administrateurs système (c'est un métier recherché !).
Heureusement qu'il n'est pas nécessaire d'être présent physiquement à côté de la machine
pour travailler dessus ! Vous imaginez, devoir se payer un billet aller-retour pour Tokyo juste
parce qu'on a besoin d'installer un programme sur un serveur...
Un serveur est un ordinateur qui reste allumé 24h/24, 7j/7. Cet ordinateur est
semblable au vôtre (quoique souvent plus puissant et plus bruyant) : il possède un processeur, un ou des disques durs, etc.
Le principe d'un serveur est de rester allumé et connecté à internet tout le temps. Il offre des services. Par exemple, le Site du Zéro
possède plusieurs serveurs qui sont chargés de vous envoyer les pages web du site à toute heure du jour et de la nuit.
Le PC qui se connecte au serveur est appelé le client. Nous allons les représenter comme ceci dans les prochains schémas :
Actuellement, votre petit PC chez vous n'est pas considéré comme un serveur... mais vous pouvez très facilement le transformer en serveur si
vous le désirez à condition d'installer les bons programmes qui en font un serveur et de les configurer correctement. Et de le laisser allumé
aussi, parce qu'un serveur éteint c'est un serveur qui ne sert à rien.
Il existe de très nombreux protocoles pour que les ordinateurs puissent communiquer entre eux. Il y en a un que vous avez forcément vu, c'est
le HTTP (HyperText Transfer Protocol). Si si, regardez l'adresse par exemple du Site du Zéro : . Le préfixe "http"
signifie que vous communiquez avec les serveurs du Site du Zéro à l'aide du protocole HTTP. C'est le protocole utilisé sur le web pour
s'échanger des pages web.
Mais il existe bien d'autres protocoles ! Par exemple le FTP (File Transfer Protocol, protocole de transfert de fichiers), l'IMAP (Internet
Message Access Protocol, utilisé pour s'échanger des e-mails), etc.
En théorie donc, on peut communiquer avec un serveur à l'aide du protocole Telnet. Le problème de ce protocole... c'est justement qu'il est
trop simple : les données sont transférées en clair sur le réseau. Il n'y a aucun cryptage.
Voici ce qui pourrait se passer. J'exagère les traits mais c'est pour vous donner une idée. Imaginez qu'un PC de l'armée demande à un serveur de
Après tout, il n'y a rien de choquant. Le message n'est envoyé qu'au client qui l'a demandé.
Mais en fait, il est possible pour un pirate d'"écouter" ce qui se passe sur le réseau, et donc d'intercepter les données en chemin :
Vous pouvez difficilement empêcher que quelqu'un intercepte les données. Intercepter les données peut être compliqué à faire, mais c'est
possible (non, ce n'est pas le sujet de ce chapitre de vous expliquer comment faire ). Sachez qu'il existe par exemple des programmes
comme Wireshark (anciennement nommé Ethereal) qui sont capables d'écouter ce qui se passe sur un réseau local notamment, et donc
d'intercepter les données.
Wireshark en action
Euh attends là, moi je veux juste me connecter à distance à ma machine ou à un serveur pour avoir l'accès à la console. Je vais
pas échanger le code de lancement de missiles nucléaires ! Je vois pas en quoi c'est un problème que quelqu'un sache que je suis en
train de faire un "grep" sur ma machine par exemple...
Rien que pour ça, il faut que les données soient cryptées. Vous ne voulez pas que quelqu'un récupère votre mot de passe !
Mais tout cela est plus compliqué que ça en a l'air. Comment crypter les données ?
Si on ne peut pas connaître tous les algorithmes de cryptage, il faut par contre savoir qu'on peut les classer dans 2 catégories : les cryptages
symétriques et les cryptages asymétriques.
Le cryptage symétrique
C'est la méthode de cryptage la plus simple. Cela ne veut pas dire qu'elle n'est pas robuste (il existe des cryptages symétriques très sûrs). Cela
veut plutôt dire que le fonctionnement est simple à comprendre.
Avec cette méthode, pour crypter un message on utilise une clé (un mot de passe secret). Par exemple, imaginons que cette clé soit
" ":
Il faut donc que la personne qui crypte et la personne qui décrypte connaissent toutes les deux cette clé qui sert à crypter et décrypter.
Si le pirate intercepte un message crypté, il ne peut rien en faire s'il ne connaît pas la clé secrète !
Ah c'est bien ça ! Mais il faut que le client et le serveur connaissent tous les deux la clé de cryptage.
Il faut donc que le client envoie d'abord au serveur la clé pour que celui-ci puisse décrypter ses futurs messages...
En effet, pour que le schéma qu'on vient de voir puisse fonctionner, il faut que le client et le serveur se soient communiqués auparavant la clé
magique qui sert à crypter et décrypter. Mais comment font-ils pour se l'échanger ? S'ils l'envoient en clair, le pirate va pouvoir l'intercepter et
il sera ensuite capable de décrypter tous les messages cryptés qui passeront sur le réseau !
Le cryptage symétrique est donc un cryptage puissant, mais il a un gros défaut : il faut communiquer "discrètement" la clé de cryptage... mais
c'est impossible : il faut bien envoyer la clé en clair au début !
...
A moins de... non...
Et pourquoi pas ? Si on cryptait la clé de cryptage lors de son envoi ?
Pour crypter la clé de cryptage symétrique, on va utiliser une autre méthode : le cryptage asymétrique. Avec cette autre méthode on ne risque
pas de retrouver le même problème qu'on vient de rencontrer.
Le cryptage asymétrique
Il y a donc 2 clés :
La clé publique ne sert qu'à crypter. Avec ce type d'algorithme, on ne peut décrypter un message que si on connaît la clé privée.
On demande à l'ordinateur de générer une paire de clés : une privée et une publique. Elles vont ensemble. Ne me demandez pas comment il
les génère et pourquoi elles vont ensemble, c'est trop compliqué à expliquer. Acceptez juste que l'ordinateur est capable de générer
aléatoirement un couple de clés qui vont ensemble.
Pour décrypter, la clé publique ne marche pas. Il faut obligatoirement utiliser la clé privée :
Voilà pourquoi on dit que c'est un cryptage asymétrique : il faut 2 clés différentes. L'une d'elle permet de crypter le message, l'autre de le
décrypter. Il n'y a pas d'autre moyen.
La clé publique peut être transmise en clair sur le réseau (elle est "publique"). Ce n'est pas grave si un pirate l'intercepte. Par contre la clé
privée qui permet de décrypter doit rester secrète.
L'algorithme de cryptage asymétrique le plus connu s'appelle RSA. Si vous voulez savoir comment RSA fonctionne et pourquoi il
faut une clé différente pour crypter et pour décrypter, lisez ce tutoriel sur RSA. Attention je vous préviens, il faut aimer les maths.
SSH utilise les 2 cryptages : asymétrique et symétrique. Cela fonctionne dans cet ordre :
1. On utilise d'abord le cryptage asymétrique pour s'échanger discrètement une clé secrète de cryptage symétrique.
2. Puis ensuite on utilise tout le temps la clé de cryptage symétrique pour crypter les échanges.
Ce serait possible mais il y a un défaut : le cryptage asymétrique demande beaucoup trop de ressources au processeur. Le cryptage
asymétrique est 100 à 1000 fois plus lent que le cryptage symétrique !
Les ordinateurs s'échangent donc la clé de cryptage symétrique de manière sécurisée (grâce au cryptage asymétrique ) et ils peuvent
ensuite communiquer plus rapidement en utilisant tout le temps du cryptage symétrique.
Le cryptage asymétrique est donc utilisé seulement au début de la communication, afin que les ordinateurs s'échangent la clé de cryptage
symétrique de manière sécurisée. Ensuite, ils ne communiquent que par cryptage symétrique.
Je résume en images. On veut s'échanger une clé de cryptage symétrique, mais on ne peut pas le faire en clair sinon le pirate peut
l'intercepter. On va donc crypter la clé grâce au cryptage asymétrique.
Le serveur envoie la clé publique en clair au client pour qu'il puisse crypter :
Le client génère une clé de cryptage symétrique (par exemple ) qu'il crypte grâce à la clé publique qu'il a reçue :
Le client envoie la clé symétrique cryptée au serveur. Le pirate peut l'intercepter mais il ne peut pas la décrypter car il faut pour cela la clé
privée (connue seulement du serveur) :
Le serveur décrypte la clé reçue grâce à sa clé privée qu'il a gardée bien au chaud chez lui :
Le client et le serveur connaissent maintenant tous les deux la clé symétrique , et à aucun moment ils ne se la sont échangée en clair
sur le réseau !
Ils peuvent donc s'envoyer des messages cryptés de manière symétrique en toute tranquillité. Ce cryptage est plus rapide, et il est tout aussi
sûr que le cryptage asymétrique car le pirate ne connaît pas la clé !
Voilà comment SSH fonctionne pour créer un canal d'échange sécurisé. Tout est crypté grâce à la clé symétrique que le client et le serveur se
sont astucieusement communiquée.
Eh bien seulement maintenant, le client peut se logger sur le serveur : il peut donner son login et son mot de passe pour se connecter au
serveur sans craindre de se les faire voler par le pirate !
Non, en fait tout se fait automatiquement. Vous allez juste avoir à rentrer un login et un mot de passe pour vous connecter à votre machine à
distance.
Mais j'estime que c'était l'occasion idéale de vous expliquer comment fonctionne le protocole SSH. Ce système est utilisé partout dans le
monde ! Plus personne n'envisage de se connecter en Telnet aujourd'hui.
A partir de maintenant :
Soit vous louez déjà un serveur dédié (ce qui devrait être le cas d'une minorité d'entre vous). Celui-ci est déjà configuré pour faire
serveur SSH, vous n'avez donc rien à faire pour le "transformer" en serveur.
Si vous voulez louer votre serveur dédié, sachez qu'il existe de très nombreux hébergeurs qui le proposent, comme par
exemple OVH. Comme vous pouvez le voir, ça coûte cher (en même temps c'est un ordinateur à part entière que vous louez !).
Sachez qu'il existe aussi des serveurs low cost moins chers (moins puissants mais ils peuvent suffire), comme Kimsufi et
Dedibox.
Je vous recommande d'attendre un peu avant de louer un serveur dédié, ça coûte de l'argent et il vaut mieux être sûr d'en
avoir vraiment besoin.
Soit vous n'avez pas de serveur dédié, ce qui je suppose est le cas de la plupart d'entre vous. Dans ce cas, nous allons voir comment
transformer votre PC en serveur dans les prochains paragraphes.
Code : Console
Lors de l'installation, vous devriez voir certaines étapes intéressantes s'effectuer automatiquement :
Code : Console
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
* Restarting OpenBSD Secure Shell server sshd [ OK ]
RSA et DSA sont 2 algorithmes de cryptage asymétrique. Comme je vous l'ai dit plus tôt, SSH peut travailler avec plusieurs algorithmes de
cryptage différents.
Ce que vous voyez là est l'étape de la création d'une paire de clés publiques et privées pour chacun des 2 algorithmes (RSA et DSA).
Normalement, le serveur SSH sera lancé à chaque démarrage. Si ce n'est pas le cas, vous pouvez le lancer à tout moment avec la commande
suivante :
Code : Console
Code : Console
Normalement vous ne devriez pas avoir besoin de configurer quoi que ce soit, mais sachez au besoin que le fichier de configuration se trouve
dans /etc/ssh/ssh_config. Il faudra recharger SSH avec la commande sudo /etc/init.d/ssh reload pour que les changements soient pris
en compte.
Voilà, votre machine est désormais un serveur SSH ! Vous pouvez vous y connecter depuis n'importe quelle machine Linux ou Windows dans le
monde.
Nous commencerons dans un premier temps par voir comment accéder à votre PC à distance depuis une machine Linux.
A partir d'ici, je suppose que vous avez installé openssh-server et que votre machine est allumée. L'idéal serait d'aller chez un
ami qui a Linux (ou d'utiliser un autre PC de chez vous équipé de Linux).
Ouvrez une console sur le PC de votre ami, et utilisez la commande ssh comme ceci :
Code : Console
ssh login@ip
Il faut remplacer "login" par votre login (mateo21 dans mon cas) et "ip" par l'adresse IP de votre ordinateur.
Si vous vous connectez depuis chez un ami, il vous faut entrer l'IP internet de votre PC que vous pouvez obtenir en allant sur
http://www.whatismyip.com par exemple.
Si vous vous connectez depuis un autre PC chez vous (sur le même réseau local), il vous faut entrer l'IP locale que vous devriez voir en
tapant la commande ifconfig (par exemple 192.168.0.3).
Si vraiment vous n'avez ni ami sous Linux ni second PC dans la maison, vous pouvez simuler une connexion réseau en vous connectant
de votre PC vers votre PC. Utilisez pour cela l'IP 127.0.0.1 (ou le mot localhost), ça marche toujours.
Si je suis chez un ami et que l'IP internet de mon ordinateur est 87.112.13.165, je vais taper :
Code : Console
Si, faute de mieux, vous voulez tester en vous connectant chez vous depuis chez vous, vous pouvez taper :
Code : Console
ssh mateo21@localhost
Cette seconde méthode marche toujours, mais c'est moins impressionnant parce que vous ne faites que simuler une connexion réseau.
Normalement, le serveur devrait répondre au bout d'un moment et vous devriez voir quelque chose comme :
Code : Console
Si vous n'avez pas de réponse du serveur, vérifiez que vous ne vous êtes pas trompé d'IP. Vérifiez aussi que le port 22 n'est pas
bloqué par un firewall, car c'est celui utilisé par SSH par défaut.
Si le serveur tourne sur un autre port, il faudra préciser le numéro de ce port comme ceci :
ssh [email protected] -p 12451 (si le serveur fonctionne sur le port 12451 au lieu du port 22).
Que se passe-t-il ? On vous dit que le fingerprint (empreinte) du serveur est : 49:d9:2d:2a:df:fd:80:ab:e9:eb:59:37:58:34:de:f7. C'est un
numéro unique qui vous permet d'identifier le serveur. Si demain quelqu'un essaie de se faire passer pour le serveur, le fingerprint changera
forcément et vous saurez qu'il se passe quelque chose d'anormal. Ne vous inquiétez pas, SSH vous avertira de manière très claire si cela arrive.
En attendant, tapez "yes" pour confirmer que c'est bien le serveur auquel vous voulez vous connecter. Le serveur et le client vont alors
s'échanger une clé de cryptage comme je vous l'ai expliqué un peu plus tôt. Normalement, au bout de quelques secondes le serveur devrait
vous demander votre mot de passe :
Code : Console
mateo21@localhost's password:
Vous pouvez entrer votre mot de passe en toute sécurité, la communication est cryptée.
Si vous rentrez le bon mot de passe, la console du PC de votre ami (ou votre propre console) devrait vous afficher un message de bienvenue
puis un prompt qui correspond à la console de votre PC. Bravo, vous êtes connecté !
Code : Console
mateo21@mateo21-desktop:~$
Si on ne vous affiche pas d'erreur, c'est que vous êtes bien loggé et que vous travaillez désormais sur votre machine à distance ! Vous pouvez
effectuer toutes les opérations que vous voulez comme si vous êtiez chez vous.
Essayez de parcourir les dossiers pour voir que ce sont bien les vôtres, et amusez-vous (pourquoi pas) à créer un fichier (avec nano). Lorsque
vous reviendrez sur votre PC vous l'y retrouverez.
Vous pouvez aussi commander l'exécution d'un programme, d'une recherche, etc. Vous savez déjà comment lancer un programme en tâche de
fond pour qu'il continue même quand vous n'êtes pas connecté à la machine (vous vous souvenez de nohup et de screen ?).
Pour vous déconnecter, tapez "logout" ou son équivalent : la combinaison de touches Ctrl + D.
Je sais, vous devez vous dire que ce n'est pas très clair et que vous ne voulez pas chercher sur quel lien cliquer sur cette page.
Repérez la section "Binaries". C'est un tableau. Vous avez le choix entre :
Cliquer sur "putty.exe" pour télécharger le programme principal. Il ne nécessite pas d'installation.
Cliquer sur le programme d'installation (par exemple "putty-0.60-installer.exe"). Celui-ci installera PuTTY et d'autres utilitaires dont
vous aurez besoin dans quelques minutes.
Putty.exe suffit, mais je vous recommande donc de prendre le package complet en récupérant le programme d'installation.
Une fois que c'est fait et installé, lancez Putty. Une fenêtre comme celle-ci devrait s'afficher :
Il y a beaucoup de pages d'options, comme vous pouvez le voir au niveau de la section "Category" sur le côté. Pour le moment, pas de panique,
vous avez juste besoin de remplir le champ en haut "Host Name (or IP address)". Entrez-y l'adresse IP de votre ordinateur sous Linux.
J'ai donné quelques explications à propos de l'adresse IP un peu plus haut lorsque j'ai parlé de la connexion SSH depuis Linux.
Lisez donc les paragraphes précédents si vous voulez plus d'informations à ce sujet.
Dans mon cas, je vais rentrer l'adresse IP de mon PC sous Linux situé sur mon réseau local (192.168.1.5) :
Vous pouvez changer le numéro du port si ce n'est pas 22, mais normalement c'est 22 par défaut.
Ensuite, vous n'avez plus qu'à cliquer sur le bouton tout en bas "Open" pour lancer la connexion. Rien d'autre !
Si vous voulez sauvegarder l'IP et les paramètres pour ne pas retaper ça à chaque fois, donnez un nom à cette connexion (par
exemple le nom de votre ordinateur) dans le champ sous "Saved Sessions", puis appuyez sur le bouton Save. La prochaine fois, vous
n'aurez qu'à double-cliquer sur le nom de votre PC dans la liste pour vous y connecter directement.
La première fois que vous vous connectez à votre serveur, PuTTY devrait vous demander une confirmation comme ceci :
C'est la même chose que sous Linux : on vous donne l'empreinte (fingerprint) de votre serveur. Vous devez confirmer que c'est bien chez lui que
vous voulez vous connecter. Cliquez sur Oui pour confirmer.
A l'avenir, on ne vous reposera plus la question. Par contre, si le fingerprint change, un gros messsage d'avertissement s'affichera. Cela
signifiera soit que le serveur a été réinstallé, soit que quelqu'un est en train de se faire passer pour le serveur (c'est ce qu'on appelle une
attaque man-in-the-middle). Cela ne devrait fort heureusement pas vous arriver, du moins on l'espère.
Rappelez-vous qu'il est normal que les caractères ne s'affichent pas quand vous tapez votre mot de passe. Il n'y a même pas
d'étoiles pour des raisons de sécurité, afin que quelqu'un ne soit pas tenté de compter le nombre de caractères en regardant derrière
votre épaule !
Et voilà, vous êtes chez vous ! Vous pouvez faire ce qui vous chante : lire vos fichiers, écrire des fichiers, lancer une recherche, exécuter un
programme, bref vous êtes chez vous.
Pour vous déconnecter, tapez "logout" ou son équivalent : la combinaison de touches Ctrl + D.
Nous avons pour le moment vu uniquement l'authentification par mot de passe (le serveur vous demandait votre mot de passe).
Il est possible d'éviter que l'on vous demande votre mot de passe à chaque fois grâce à une authentification spéciale par clés. Cette méthode
d'authentification est plus complexe à mettre en place, mais elle est ensuite plus pratique.
Avec cette nouvelle méthode d'authentification, c'est le client qui va générer une clé publique et une clé privée. Les rôles sont
un peu inversés.
L'avantage est qu'on ne vous demandera pas votre mot de passe à chaque fois pour vous connecter. Si vous vous connectez très
régulièrement à un serveur, c'est vraiment utile. Si vous faites bien les choses, cette méthode est tout aussi sûre que
l'authentification par mot de passe.
Il faut tout d'abord vous rendre sur la machine du client et taper la commande suivante pour générer une paire de clés publique/privée :
Code : Console
ssh-keygen -t rsa
(Vous pouvez remplacer rsa par dsa si vous voulez utiliser l'autre algorithme de cryptage, mais ça n'a pas vraiment d'importance ici)
Lorsque vous tapez cette commande, vous allez voir plusieurs messages s'afficher et on va vous demander quelques petites précisions :
Code : Console
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mateo21/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mateo21/.ssh/id_rsa.
Your public key has been saved in /home/mateo21/.ssh/id_rsa.pub.
The key fingerprint is:
b7:22:94:aa:8c:fb:d3:ef:53:86:df:b9:37:40:bd:4d mateo21@mateo21-laptop
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . |
| . . . E |
| o.S.. + |
| o. o.... . |
| .. .+...o |
| o... ....o o |
|oo+. oo. .o . |
+-----------------+
Dans un premier temps, le client génère une paire de clés ("Generating public/private rsa key pair").
Il doit ensuite sauvegarder ces clés dans des fichiers (un pour la clé publique, un pour la clé privée). On vous propose une valeur par défaut : je
vous conseille de ne rien changer et de taper simplement Entrée.
Ensuite, on vous demande une passphrase. C'est une phrase de passe qui va servir à crypter la clé privée pour une meilleure sécurité. Là vous
avez 2 choix :
Soit vous tapez Entrée directement sans rien écrire, et la clé ne sera pas cryptée sur votre machine.
Soit vous tapez un mot de passe de votre choix, et la clé sera cryptée.
Tout le monde ne met pas une phrase de passe. En fait ça dépend le risque que vous avez que quelqu'un d'autre utilise la machine du client et
puisse lire le fichier contenant la très secrète clé privée. Si le PC du client est votre PC chez vous et que personne d'autre ne l'utilise, il y a
assez peu de risque (à moins d'avoir un virus, un spyware...). Si c'est en revanche un PC public, je vous recommande vivement de mettre une
passphrase pour chiffrer la clé qui sera enregistrée.
Si vous hésitez entre les 2 méthodes, je vous recommande de rentrer une passphrase : c'est quand même la méthode la plus sûre.
Il faut maintenant envoyer au serveur votre clé publique pour qu'il puisse vous crypter des messages.
Votre clé publique devrait se trouver dans ~/.ssh/id_rsa.pub (pub comme public). ~ correspond à votre home (/home/mateo21/ dans mon
cas). Notez que .ssh est un dossier caché.
Votre clé privée, elle, se trouve dans ~/.ssh/id_rsa. Ne la communiquez à personne ! Elle est normalement cryptée si vous avez entré une
passphrase, ce qui constitue une sécurité de plus.
Vous pouvez vous rendre dans le dossier .ssh déjà pour commencer :
Code : Console
cd ~/.ssh
Code : Console
$ ls
id_rsa id_rsa.pub known_hosts
: votre clé privée, qui doit rester secrète. Elle est cryptée si vous avez rentré une passphrase.
: la clé publique que vous pouvez communiquer à qui vous voulez, et que vous devez envoyer au serveur.
: c'est la liste des fingerprint que votre PC de client tient à jour. Ca lui permet de se souvenir de l'identité des serveurs et
de vous avertir si, un jour, votre serveur est remplacé par un autre (qui pourrait être celui du pirate !). Je vous en ai déjà parlé un peu
plus tôt.
L'opération consiste à envoyer la clé publique (id_rsa.pub) au serveur et à l'ajouter à son fichier "authorized_keys" (clés autorisées). Le serveur
y garde une liste des clés qu'il autorise à se connecter.
Le plus simple pour cela est d'utiliser la commande spéciale ssh-copy-id . Utilisez-la comme ceci :
Code : Console
Code : Console
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Si vous devez vous connecter au serveur par un autre port que celui par défaut, basez-vous sur la commande suivante :
ssh-copy-id -i id_rsa.pub "-p 14521 [email protected]" .
On vous demande votre mot de passe (celui de votre compte, pas la passphrase). En fait vous vous connectez par mot de passe encore une
fois, pour pouvoir ajouter sur le serveur votre clé publique.
La clé est ensuite automatiquement ajoutée à ~/.ssh/authorized_keys sur le serveur. On vous invite à vérifier si l'opération s'est bien déroulée
en ouvrant le fichier authorized_keys, ce que vous pourrez faire plus tard si vous le voulez.
Se connecter !
Code : Console
ssh login@ip
Par exemple :
Code : Console
$ ssh [email protected]
Enter passphrase for key '/home/mateo21/.ssh/id_rsa':
On vous demande la phrase de passe pour décrypter votre clé privée. Rentrez-la.
Ou je suis le dernier des nuls, ou alors c'est ce système qui est nul. Auparavant on me demandait mon mot de passe.
Maintenant on me demande une phrase de passe pour décrypter la clé privée. Où est le progrès ???
L'agent SSH
L'agent SSH est un programme qui tourne en arrière-plan en mémoire. Il retient les clés privées pendant toute la durée de votre session.
Tout ce que vous avez à faire est de lancer le programme ssh-add sur le PC du client :
Code : Console
$ ssh-add
Enter passphrase for /home/mateo21/.ssh/id_rsa:
Identity added: /home/mateo21/.ssh/id_rsa (/home/mateo21/.ssh/id_rsa)
Il va automatiquement chercher votre clé privée. Pour la décrypter, il vous demande la passphrase. Rentrez-la.
Maintenant que c'est fait, à chaque fois que vous vous connecterez à un serveur, vous n'aurez plus besoin de rentrer la passphrase. Essayez de
L'intérêt de l'agent SSH est qu'il ne vous demande la passphrase qu'une seule fois au début. Ensuite, vous pouvez vous connecter
plusieurs fois au même serveur, ou même à plusieurs serveurs différents, le tout sans avoir besoin de retaper votre passphrase !
Le principe est le même que sous Linux : il faut d'abord qu'on génère une paire de clés sur le PC du client, puis qu'on les envoie au serveur.
Nous retrouverons aussi un équivalent de l'agent SSH pour éviter d'avoir à rentrer une passphrase à chaque fois.
Normalement, vous devriez avoir installé un programme appelé Puttygen (il se trouvait dans l'installeur de Putty). Lancez-le :
En bas de la fenêtre vous pouvez choisir vos paramètres : algorithme de cryptage et puissance du cryptage. Les valeurs par défaut ici (RSA
1024 bits) sont tout à fait convenables. Vous pouvez les changer, mais sachez qu'elles sont sûres et que vous pouvez donc vous en contenter.
Cliquez sur le bouton "Generate". Le programme va générer une paire de clés (publique et privée).
Pour aider le programme à générer cette paire, il vous propose quelque chose d'assez amusant : vous devez bouger la souris
dans la fenêtre. Comme vous allez le faire aléatoirement, cela aidera Puttygen à générer des clés aléatoires.
Sous Linux, on utilise d'autres méthodes pour générer des clés aléatoirement (il faut dire qu'en console on n'a pas de souris ).
(Comme vous le voyez, ça ne me dérange pas que tout le monde voie ma clé publique. Le principe c'est justement que tout le monde peut
voir cette clé, mais on ne peut rien en faire. Par contre la clé privée doit rester secrète.)
Vous pouvez choisir d'entrer une passphrase ou non. Comme je vous l'ai expliqué plus tôt, cela renforce la sécurité en cryptant la clé privée.
Saisissez la passphrase dans les champs "Key passphrase" et "Confirm passphrase".
Ensuite, enregistrez la clé publique dans un fichier en cliquant sur "Save public key". Vous pouvez nommer ce fichier comme vous voulez, par
exemple cle.pub. Enregistrez-le où vous voulez.
Puis, enregistrez la clé privée en cliquant sur "Save private key". Donnez-lui l'extension .ppk : cle.ppk par exemple.
Comme sous Linux tout à l'heure, il faut envoyer la clé publique au serveur pour qu'il nous autorise à nous connecter par clé. Le problème, c'est
qu'il n'y a pas de commande pour le faire automatiquement depuis Windows. Il va falloir ajouter la clé à la main dans le fichier
authorized_keys. Heureusement ce n'est pas très compliqué.
Ouvrez Putty et connectez-vous au serveur comme auparavant (en rentrant votre mot de passe habituel). Rendez-vous dans ~/.ssh :
Code : Console
cd ~/.ssh
Rajoutez votre clé publique à la fin du fichier authorized_keys (s'il n'existe pas il sera créé). Vous pouvez utiliser la commande suivante :
Code : Console
Rappel : votre clé publique est affichée dans Puttygen, que vous ne devriez pas avoir fermé. Pour coller la clé dans la console,
utilisez la combinaison de touches Shift + Inser plutôt que Ctrl + V.
Par exemple :
Code : Console
Déloggez-vous, et relancez Putty. On va maintenant le configurer pour qu'il se connecte à l'aide de la clé.
Une fois Putty ouvert, rendez-vous dans la section "Window > Translation" pour commencer. Ca n'a pas de rapport direct avec les clés, mais
cela vous permettra de régler le problème des accents qui s'affichent mal dans la console si vous l'avez rencontré.
La plupart des serveurs encodent désormais les caractères en UTF-8, cela devrait donc vous éviter des soucis d'affichage.
Maintenant, rendez-vous dans "Connection > SSH > Auth". Cliquez sur le petit bouton "Browse" pour sélectionner votre clé privée :
Je vous recommande aussi d'aller dans "Connection > Data" et de rentrer votre login dans "Auto-login username" :
Retournez à l'accueil en cliquant sur la section "Session" tout en haut. Rentrez l'ip du serveur.
Ensuite, je vous recommande fortement d'enregistrer ces paramètres.
Rentrez un nom à votre serveur (par exemple MonServeur) sous "Saved Sessions". Cliquez ensuite sur Save.
A l'avenir, vous n'aurez qu'à double-cliquer sur le nom de votre serveur dans la liste pour vous y connecter directement avec les bons
paramètres.
Vous devriez voir Putty utiliser automatiquement votre pseudo, puis vous demander votre passphrase. Rentrez-la pour vérifier que ça marche :
Euh, et si je veux pas avoir à rentrer la passphrase à chaque fois ? Non parce que c'est pareil que de rentrer un mot de passe
là...
En effet, et ma réponse sera la même que pour ceux qui se connectent depuis Linux : il faut utiliser un agent SSH. Ce programme va rester en
mémoire et retenir votre clé privée. Il ne vous demandera la passphrase qu'une fois au début, puis ensuite vous pourrez vous connecter autant
de fois que vous voulez à autant de serveurs que vous voulez sans avoir à rentrer quoi que ce soit.
L'agent SSH installé avec Putty s'appelle "Pageant". Je vous recommande de le lancer au démarrage de l'ordinateur automatiquement (il ne
prend que 4 Mo en mémoire), en le plançant dans le dossier "Démarrage" du menu Démarrer.
Lorsque vous lancez Pageant, une petite icône d'un ordinateur avec un chapeau s'ajoute dans la barre des tâches à côté de l'horloge :
Faites un clic droit dessus, puis cliquez sur "Add key". On vous demande où se trouve la clé privée (cle.ppk). Rentrez ensuite la passphrase.
C'est bon. Vous avez juste besoin de le faire une fois. Maintenant, vous pouvez vous connecter au serveur que vous voulez en cliquant droit sur
l'icône puis en sélectionnant "Saved Sessions" :
Notez que si l'agent SSH Pageant est pratique, il vaut mieux l'arrêter si vous devez vous absenter de votre ordinateur un long
moment et que quelqu'un risque de l'utiliser. Sinon, n'importe qui peut se connecter à vos serveurs sans avoir à rentrer de mot de
passe.
Retenez bien : l'agent SSH est un compromis entre la sécurité et le côté pratique. Il retient les clés pour vous (du moins tant que le
programme tourne). Si vous êtes un utilisateur intensif de SSH, cela vous fera gagner beaucoup de temps.
Vous pouvez modifier le raccourci qui lance Pageant pour que celui-ci charge votre clé privée automatiquement dès son lancement. Faites un
clic-droit sur l'icône de Pageant, allez dans "Propriétés".
Dans le champ "Cible", rajoutez à la fin en paramètre le chemin de la clé à charger. Par exemple :
. La clé sera alors chargée dès que vous lancerez Pageant.
Q.C.M.
Asymétrique
Symétrique
Les deux sont aussi sûres
A quoi cela sert-il de rentrer une passphrase lorsqu'on a généré une paire de clés ?
Correction !
Ouf !
Au terme de ce chapitre, vous devriez avoir engrangé une quantité importante de nouvelles connaissances à la fois théoriques et pratiques.
Vous savez désormais comment fonctionne l'échange de clés entre le serveur et le client. Ca paraît bête mais beaucoup d'utilisateurs de SSH ne
savent pas vraiment comment ça marche. Par contre, ils savent que ça crypte les échanges, et ça c'est déjà l'essentiel.
La possibilité de se connecter à distance à une machine Linux est vraiment un de ses points forts. Vous pouvez retrouver ainsi une console dans
laquelle vous pouvez faire tout ce que vous voulez, exactement comme si vous êtiez en face de la machine.
Enfin, si Windows ne propose pas de fonctionnalité serveur dans ses éditions "classiques" (familiale et professionnelle), il faut savoir tout de
même qu'il existe une version spéciale de Windows appelée "Windows Server" qui concurrence Linux sur le marché des serveurs.
Aller
Retour en haut