ssh01 Print
ssh01 Print
ssh01 Print
2
SSH - Secure Shell I
[cf. rr1RnLYN]
Objectif
Se familiariser avec le protocole SSH (Secure SHell).
Mise en situation
SSH est une application d'Internet qui n'est pas aussi connue que le Web ou le mail.
Mais elle est très utile dans le monde du développement informatique car elle permet de se connecter
à un serveur à distance, puis d'exécuter des commandes sur ce serveur. C'est aujourd'hui le mode de
contrôle privilégié des informaticiens sur les serveurs qui font fonctionner Internet.
Le terminal (aussi appelé invite de commande ou console) est le moyen le plus naturel pour interagir
avec un ordinateur. Ce programme offre un shell (une interface système) donnant accès aux
programmes de l'ordinateur. Il suffit d'un écran et d'un clavier pour utiliser ce shell.
Terminal et shell (cf. p.12)
Le programme SSH (Secure Shell) permet d'interagir de manière sécurisée avec un ordinateur distant
via un shell. C'est le programme de référence pour effectuer des opérations à distance.
Toutes les commandes tapées depuis un clavier d'ordinateur à un emplacement A sont exécutées dans
le shell d'un ordinateur à un emplacement B. Les informations qui transitent sur Internet via SSH sont
les chaînes de caractères représentant les commandes à exécuter et les chaînes de caractères
représentant les résultats de ces exécutions.
SSH est aussi le nom du protocole de communication utilisé par le programme SSH. Ce protocole
fonctionne sur une architecture client-serveur ; l'ordinateur qui fournit les commandes est le client et
l'ordinateur qui exécute les commandes sur son système est le serveur.
SSH repose généralement sur TCP pour le transport et est par défaut associé au port 22.
L'établissement d'une connexion SSH se fait en deux étapes :
l'établissement d'une communication sécurisée,
l'authentification du client.
3
SSH - Secure Shell
Le chiffrement symétrique repose sur le chiffrement et le déchiffrement de messages par une seule
clé appelée clé symétrique. Ainsi, si deux ordinateurs veulent protéger leurs communications, ils
peuvent se mettre d'accord sur une clé symétrique à utiliser et veiller à ce qu'ils soient les seuls à la
détenir. Le chiffrement symétrique est rapide mais nécessite un canal sécurisé pour échanger la clé.
Le chiffrement asymétrique repose sur le chiffrement et le déchiffrement de messages par deux clés
différentes (l'une chiffre les messages et l'autre déchiffre). Dans ce système, une clé est connue de
tous : on parle de clé publique ; l'autre clé est gardée secrètement : on parle de clé privée. Le
chiffrement asymétrique est plus lent mais ne nécessite par de canal sécurisé préalable.
Au début de la session et avant de commencer toute interaction entre le client et le serveur, c'est-à-dire
avant même que le serveur vérifie que le client est légitime, les deux ordinateurs doivent se mettre
d'accord sur un moyen de sécuriser leur communication.
Pour cela, le client et le serveur se mettent d'accord via le protocole de transport (TCP) sur la version du
protocole SSH à utiliser et sur une méthode de chiffrement symétrique de leur communication.
Les deux ordinateurs vont utiliser des méthodes de chiffrement asymétrique pour échanger une clé
symétrique. Cette clé leur permettra donc de protéger toutes les communications suivantes de la
session.
À la fin de cette étape, une connexion sécurisée est établie entre le client et le serveur.
Une fois une connexion sécurisée établie, le serveur doit authentifier l'utilisateur qui cherche à se
connecter. Il existe deux méthodes d'authentification :
Méthode 1 : Par mot de passe
Puisque le but est ici d'ouvrir un shell à distance, le client cherche à se connecter à un utilisateur
de la machine distante. Le serveur peut ainsi demander au client le mot de passe de l'utilisateur
via lequel il veut se connecter.
Méthode 2 : Par clé
Chaque utilisateur présent sur le serveur possède une liste de clés publiques de clients de
confiance, présentes dans un fichier authorized_keys.
1. Le client envoie une des clés publiques de l'utilisateur avec lequel il veut se connecter.
2. Le serveur vérifie le fichier authorized_keys de l'utilisateur pour s'assurer que cette
clé publique existe.
4
SSH - Secure Shell
3. Si oui, le serveur chiffre un nombre aléatoire avec ladite clé publique et envoie le résultat
au client.
4. Le client utilise sa clé privée pour déchiffrer le nombre et y appliquer un certain
traitement avant de le renvoyer au serveur.
5. Le serveur applique le même traitement au nombre qu'il a envoyé et vérifie que le résultat
du client est le même que le sien.
6. Si le résultat est correct, et comme l'utilisateur est le seul à posséder la clé privée et
déchiffrer le nombre envoyé par le serveur, il est authentifié.
Complément
La méthode d'authentification par clé nécessite qu'une paire de clés publique/privée soit générée au
préalable, et que le serveur ait stocké la clé publique du client dans le fichier authorized_keys de
l'utilisateur.
Pour rendre un serveur accessible à distance, il faudra installer et lancer un serveur SSH.
L'implémentation de référence est OpenSSH que l'on peut installer et activer ainsi sur des serveurs
GNU/Linux de la famille Debian.
1 sudo apt update
2 sudo apt install openssh-server
3 sudo systemctl start ssh
À retenir
Le protocole SSH permet à un client d'ouvrir un shell sur un serveur distant.
Ce protocole sécurise les communications en employant plusieurs méthodes de chiffrement, de
l'authentification au transfert de données.
[cf. lcDRZYLi]
5
Exercice : Appliquer la notion II
Question 1
Se connecter à cette machine en utilisant une authentification par mot de passe.
Indice :
Il faut utiliser la commande ssh depuis un shell local.
Indice :
Une connexion ssh nécessite :
L'adresse IP du serveur,
Le nom d'un utilisateur,
Le mot de passe de l'utilisateur.
Question 2
Pour la première connexion, pourquoi le terminal a demandé si vous faisiez confiance au serveur ?
Indice :
La clé SSH d'un serveur est unique et sert à la fois à l'identifier et à chiffrer les communications.
Question 3
Vérifier que la clé SSH du serveur a bien été ajoutée aux hôtes connus (known_hosts)
Indice :
La commande suivante permet de vérifier qu'un hôte est connu.
1 ssh-keygen -F votre_serveur
6
Exercice : Agir sur un serveur comme à
la maison III
Pour réaliser cet exercice, connectez-vous à un VPS en SSH en tant que root.
Testez ensuite chacun des commande suivantes.
Regarder le nom de votre machine : hostname
Regarder qui vous êtes : whoami
Regarder où on est : pwd
Regarder quel est le système installé : lsb_release -a
Aller dans le dossier /tmp : cd /tmp
Créer un fichier avec votre lieu de naissance : nano doujeviens
Regarder ses processus : top
Regarder l'état de son disque : df -h
Regarder qui est connecté au serveur : who
Regarder l'état du service (daemon) SSH : systemctl status ssh
Regarder les logs du service SSH :
journalctl -u ssh
journalctl -n 20 -u ssh
Trouver votre IP : curl https://ifconfig.me && echo
7
Exercice : Échanger des fichiers avec
un serveur IV
Pour réaliser cet exercice vous devez être connecté à votre VPS.
On appellera sara le user connecté.
Question 1
Créez un dossier shared dans le répertoire /home/sara.
Indice :
sara doit être un user autorisé à se connecté en SSH au serveur.
Question 2
Copiez un fichier contenant le nom de votre artiste préféré depuis votre PC vers votre VPS (dans le dossier
shared) : rsync -v tmp.txt [email protected]:/sara/shared
Question 3
Créer un dossier partagé avec SFTP et l'explorateur de fichier :
sftp://[email protected]/home/sara/shared.
Ajoutez une liste d'œuvres de votre artiste préféré.
Question 4
Créer un espace d'échange avec SFTP et Filezilla
installer Filezilla
configurer une connexion SFTP vers votre VPS
déposer une image de votre artiste préféré dans shared
Question 5
Copiez le contenu de votre dossier shared dans un dossier accessible à un serveur web sur votre VPS.
8
Exercice : [exercice optionnel] Se
connecter à un serveur avec une clé V
L'objectif est :
1. de générer une paire de clé (publique et privée)
2. puis de transférer la clé publique au serveur
3. et de se connecter en utilisant l'authentification par clé
Question 1
Questions préliminaires :
pourquoi transfère-t-on la clé publique ?
pourquoi ne transfère-t-on pas la clé privée ?
Indice :
La clé publique sert à chiffrer les donner et la clé privée sert à déchiffrer les données.
Indice :
Comprendre le chiffrement par clé : Gépégix (cf. Gépégix)
Pour générer une paire de clé il suffit de taper la commande suivante :
1 ssh-keygen
Il vous sera demandé une passphrase (mot de passe) qui chiffrera la clé sur votre machine. Ce n'est pas
obligatoire mais il s'agit d'une sécurité supplémentaire au cas où quelqu'un d'autre que vous utiliserait
votre machine.
Votre paire de clé sera enregistrée dans le dossier caché∗ .ssh accessible depuis votre home.
Question 2
Utilisez le terminal pour vous rendre dans le répertoire ssh de votre machine et affichez la paire de clés
qui s'y trouve.
Question 3
En utilisant la commande cat ~/.ssh/id_rsa.pubaffichez le contenu de votre clé publique.
9
Exercice : [exercice optionnel] Se connecter à un serveur avec une clé
Question 4
L'objectif est à présent de transférez votre clé publique SSH sur votre serveur afin de s'y connecter sans
mot de passe.
On suppose ici le user concerné est admin.
Configurer l'accès SSH :
se connecter en tant que admin : su admin
créer le dossier caché∗ /home/admin/.ssh
créer le fichier .ssh/authorized_keys
copier la clé publique dans le fichier .ssh/authorized_keys
ajuster les droits :
700 pour le dossier .ssh
644 pour la clé publique et le fichier authorized_keys
Indice :
Vous pouvez désormais vous connecter sans mot de passe. La passphrase de votre clé vous sera
demandée à la place.
Question 5
NB : le dossier .ssh et le fichier authorized_keys doivent appartenir à jack (si ce n'est pas le cas on utilise
chown)
10
Exercice : [exercice optionnel] Donner
accès au serveur à des tiers VI
L'objectif est de donner accès à votre serveur à une autre personne en ajoutant sa clé sur votre serveur.
On appellera cet utilisateur jack dans le cadre de cet exercice.
Question 1
Créer un nouvel utilisateur sur le serveur : adduser jack
Question 2
Configurer l'accès SSH pour Jack
se connecter en tant que jack : su jack
créer le dossier /home/jack/.ssh
créer le fichier .ssh/authorized_keys
ajouter la clé à .ssh/authorized_keys
ajuster les droits :
700 pour le dossier .ssh
644 pour la clé publique et le fichier authorized_keys
NB : le dossier .ssh et le fichier authorized_keys doivent appartenir à jack (si ce n'est pas le cas on utilise
chown)
11
Contenus annexes
1. Terminal
[cf. dDk35Kj1]
Objectif
Savoir ouvrir un terminal et exécuter une commande.
Mise en situation
On a l'habitude d'interagir avec les ordinateurs en mode graphique, c'est-à-dire en utilisant
essentiellement la souris pour cliquer sur des éléments d'interface pour effectuer des actions. Mais il
existe une autre manière d'interagir avec un ordinateur, très utilisée en informatique : le mode texte ou
interface en ligne de commande (CLI en anglais).
Ce mode d'interaction est très utile pour pouvoir utiliser un ordinateur à distance, ce qui est
généralement le cas lorsque l'on souhaite administrer un serveur web.
À travers ce module vous allez découvrir le shell qui permet de dialoguer avec le système
d'exploitation d'une machine. Il existe beaucoup de shells, le plus connu vient du monde Linux et se
nomme bash. Vous allez découvrir les commandes de base pour parcourir des répertoires ou éditer des
fichiers.
Un terminal, ou interface en ligne de commande (CLI en anglais), est une interface homme-machine
dans laquelle l'utilisateur interagit avec la machine en mode texte. L'utilisateur écrit des lignes de
commande, la machine les exécute et affiche le résultat des commandes.
Le terme terminal est très général : un terminal peut servir à dialoguer avec un programme
informatique, à donner des ordres à un ordinateur, ou à exécuter d'autres programmes.
Shell Définition
Un shell est une interface en ligne de commande permettant de dialoguer avec le système
d'exploitation de la machine. On dit qu'il interprète les commandes.
Il existe au moins autant de shells que de systèmes d'exploitation. Chaque shell propose des
commandes spécifiques. Le choix d'un shell se fait surtout par rapport à des critères pratiques (de quoi
ai-je besoin ?) et des critères subjectifs (quel shell me semble le plus ergonomique ?).
12
Contenus annexes
Sur Linux, le shell le plus connu et installé par défaut sur la plupart des systèmes s'appelle bash
(pour "Bourne Again Shell").
Sur Windows, il existe trois shells :
cmd, le shell historique,
powershell, une version plus moderne,
et il est possible d'utiliser bash avec le sous-système Linux.
Sur macOS, le shell installé par défaut s'appelle zsh. Il partage de grandes similarités avec
bash.
Le shell historique cmd de Windows n'est presque plus utilisé. powershell utilise une syntaxe assez
différente de la plupart des autres shells. Il est possible d'installer bash sous Windows depuis peu,
mais il n'est pas inclus par défaut dans les installations.
La plupart des shells adhèrent à des standards communs, mais ce n'est pas le cas des shells
disponibles sur Windows. Pour suivre les exemples et exercices qui suivent, il est recommandé
d'activer le sous-système Linux pour Windows 10 et d'utiliser bash, en suivant la partie "Installer le
sous-système Windows pour Linux" de cette documentation : docs.microso .com/fr-
fr/windows/wsl/install-win101
Cette image montre quelques commandes de base, exécutées par un shell bash sur un système Linux.
1
https://docs.microso .com/fr-fr/windows/wsl/install-win10
13
Contenus annexes
cd /tmp/test se rend dans le dossier test qui se trouve dans le dossier racine /tmp.
pwd affiche le dossier où on est situé dans le système de fichier.
ls -al affiche la liste des fichiers dans le dossier courant.
cat memo affiche le contenu du fichier memo.
En général (et en particulier sur les systèmes Ubuntu), le raccourci Ctrl+Alt+T ouvre un terminal.
Une alternative consiste à chercher Terminal dans la liste des applications.
Ouvrir la fenêtre Exécuter à l'aide du raccourci Super+R (la touche Super est en général
représentée par un logo Windows sur le clavier). Entrer :
cmd ou powershell dans la fenêtre qui s'est ouverte pour démarrer un terminal Windows
bash pour ouvrir un shell Bash s'il a été installé
Ces commandes sont des commandes Bash qui fonctionnent également sous macOS et avec la plupart
des autres shells Linux.
ls -al : lister les fichiers dans le répertoire courant
pwd : afficher le répertoire courant
cat fichier : afficher le contenu d'un fichier
cd dossier : se rendre dans un dossier fils du dossier courant
cd .. : se rendre dans le dossier parent
echo message : afficher un message
man commande : afficher la documentation détaillée d'une commande
14
Contenus annexes
Les actions « copier » et « coller » sont accessibles en effectuant un clic droit sur la fenêtre d'un
terminal. Il est plus rapide d'utiliser des raccourcis clavier pour copier et coller, respectivement :
Sur Bash et la plupart des shells Linux :Ctrl+Shift+C et Ctrl+Shift+V
Sur macOS : Command+C et Command+V
Sur Windows (powershell) : Ctrl+C et Ctrl+V
À retenir
Un shell, ou par abus de langage un terminal, permet de dialoguer avec le système
d'exploitation d'une machine.
Il existe beaucoup de shells. Le plus connu vient du monde Linux et se nomme bash.
Un shell permet de se passer du mode graphique, ce qui est souvent indispensable pour
travailler sur une machine à distance.
[cf. miuW2Iyd]
2. VPS Linux
[cf. E3FULqcd]
Objectifs
Savoir ce qu'est un VPS
Savoir créer un VPS chez un hébergeur
Savoir se connecter à distance sur un VPS avec SSH
Serveur Définition
Un serveur est un ordinateur accessible depuis Internet, qui rend des services aux utilisateurs. Il
s'oppose aux ordinateurs personnels que l'on ne peut pas contacter depuis Internet.
Lorsque je me rends sur le site wikipedia.org1, je demande en réalité aux serveurs de Wikipédia
de m'envoyer le contenu de la page que je veux afficher.
Un ami ne peut pas accéder aux fichiers de mon ordinateur personnel : pour les partager, je dois
les téléverser sur un serveur (envoyer un mail, utiliser un service partage de fichiers, etc.).
VPS Définition
Un VPS (serveur dédié virtuel, ou Virtual Private Server) peut s'envisager comme un serveur réservé à
son usage personnel. En réalité, il s'agit d'une partie d'un serveur physique isolée du reste du système :
un serveur virtuel.
1
Wikipédia
15
Contenus annexes
Remarque
Le VPS est contactable par son adresse IP, qui est unique sur Internet et est l'équivalent d'une adresse
postale.
On peut utiliser la commande ping pour vérifier qu'un serveur répond bien.
1
https://www.gandi.net/fr/cloud
16
Contenus annexes
Pour travailler sur un VPS, il faut un moyen de s'y connecter et d'y ouvrir un shell. SSH (Secure SHell) est
un outil standard qui remplit cette fonction : une fois la connexion établie, on travaille sur un VPS
comme on travaille sur un shell local.
Dans un shell local, copier la commande reçue par mail pour ouvrir un shell distant sur le VPS.
1 ssh <super-utilisateur>@<adresse-IP>
17
Contenus annexes
Windows n'intègre pas SSH par défaut. Il y plusieurs possibilités pour l'installer :
1
Suivre le tutoriel de Microso pour activer l'utilisation de SSH dans powershell.
Installer un logiciel tiers, comme PuTTY.
Utiliser SSH dans un shell Bash, en installant le sous système Linux2.
Les VPS répondent à un problème classique : louer un serveur physique impose de choisir des
composants adaptés à la puissance voulue. Si les besoins augmentent, il faut changer de machine, ce
qui peut être très coûteux.
Les fournisseurs de serveurs ont trouvé une astuce : séparer un serveur physique en plusieurs serveurs
virtuels, dont la puissance peut être adaptée en fonction des besoins. Pour les utilisateurs, le coût est
moindre, et pour les fournisseurs, l'utilisation d'un serveur physique est optimisée.
À retenir
Un VPS est l'équivalent d'un serveur que l'on peut louer pour son usage personnel. Il est
accessible depuis Internet.
SSH permet de se connecter à distance sur son VPS, et d'y exécuter des commandes.
Il existe plusieurs fournisseurs de VPS français, comme Gandi, OVH ou Scaleway.
1
Installation d'OpenSSH sous Windows 10
2
https://docs.microso .com/fr-fr/windows/wsl/install-win10
18
Glossaire
dossier caché
Dossier invisible symbolisé par un point devant le nom du dossier. Exemple : .ssh
Les dossiers cachés sont visibles via la commande ls -a (a pour all) et sont accessibles par leur
chemins comme les dossiers normaux. Exemple de chemin : /~/ .ssh
Il existe également des fichiers cachés sur le même principe.
Fichier caché
Sous Linux les fichiers et dossiers cachés sont matérialisés par un point devant leur nom.
Exemple : .ssh
Les fichiers et dossiers cachés sont visibles via la commande ls -a (a pour all) et sont accessibles
par leur chemins comme les dossiers normaux. Exemple de chemin : ~/.ssh
19
Crédits des ressources
lcDRZYLi p. 5
Kyâne Pichou (réalisation : https://www.studi.fr/Studi)
E3FULqcd p. 15
http://creativecommons.org/licenses/by-sa/4.0/fr/, https://stph.crzt.frStéphane Crozat (texte),
https://www.studi.frStudi (Réalisation)
20