SSH : Secure Shell
Objectif
Se familiariser avec le protocole SSH (Secure SHell).
Rappel : Terminal et shell
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.
Définition : Le programme SSH (Secure SHell)
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.
Définition : Le protocole SSH
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.
Méthode : Établir une connexion SSH
On utilise la commande ssh
depuis un terminal :
ssh alice@adresse.ip
La machine se trouvant à l'adresse serveur.exemple.com
doit avoir un utilisateur alice
.
Sur Windows, Putty est un client SSH qui permet d'ouvrir une console sous SSH. Il est téléchargeable sur le site dédié : https://www.putty.org/
Attention :
Si ssh
se connecte pour la première fois au serveur, l'utilisateur devra accepter d'utiliser la clé publique du serveur pour des raisons de sécurité.
Remarque :
Si un serveur est associé à un nom de domaine, on peut utiliser ce domaine à la place de l'IP.
ssh alice@serveur.exemple.com
À 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.
Appliquer la notion
Pré-requis
Disposer d'un VPS chez un hébergeur qui fournit un accès SSH à un serveur.
Se connecter à ce serveur en utilisant une authentification par mot de passe.
Il faut utiliser la commande ssh
depuis un shell local.
Une connexion ssh
nécessite :
L'adresse IP du serveur,
Le nom d'un utilisateur,
Le mot de passe de l'utilisateur.
Exemple :
L'hébergeur a fourni une adresse IPv6 et a créé un utilisateur exemple
.
ssh exemple@2001:4b99:1:1:216:3eff:fe90:63f
Lors de la première connexion, pourquoi le terminal a-t-il demandé si vous faisiez confiance au serveur ?
La clé SSH d'un serveur est unique et sert à la fois à l'identifier et à chiffrer les communications.
Le client ssh
stocke les clés publiques de tous les serveurs auxquels il s'est déjà connecté dans le fichier known_hosts
.
Lors la première connexion à un serveur qui n'est pas encore connu,
ssh
s'assure que vous savez qu'il s'agit d'un nouveau serveur.Si ce message apparaît et que ce n'est pas la première connexion, alors :
soit le serveur a changé de clé publique,
soit il s'est fait usurper son identité.
Vérifier que la clé SSH du serveur a bien été ajoutée aux hôtes connus (known_hosts
).
La commande suivante permet de vérifier qu'un hôte est connu sur votre client SSH :
ssh-keygen -F ip_serveur
La commande renvoie des informations sur le serveur, la méthode de chiffrement utilisée ainsi que la clé publique.
Exemple :
ssh-keygen -F 194.187.168.100
Agir sur un serveur comme à la maison
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
Échanger des fichiers avec un serveur
Pour réaliser cet exercice vous devez être connecté à votre VPS.
On appellera sara
le user connecté.
Créez un dossier shared
dans le répertoire /home/sara
.
sara
doit être un user autorisé à se connecté en SSH au serveur.
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 sara@51.15.235.148:/sara/shared
Créer un dossier partagé avec SFTP et l'explorateur de fichier : sftp://sara@51.15.235.148/home/sara/shared
.
Ajoutez une liste d'œuvres de votre artiste préféré.
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
Copiez le contenu de votre dossier shared
dans un dossier accessible à un serveur web sur votre VPS.
[exercice optionnel] Se connecter à un serveur avec une clé
L'objectif est :
de générer une paire de clé (publique et privée)
puis de transférer la clé publique au serveur
et de se connecter en utilisant l'authentification par clé
Questions préliminaires :
pourquoi transfère-t-on la clé publique ?
pourquoi ne transfère-t-on pas la clé privée ?
La clé publique sert à chiffrer les donner et la clé privée sert à déchiffrer les données.
Comprendre le chiffrement par clé : Gépégix
On communique notre clé publique au serveur afin que le serveur chiffre les données qu'il va nous envoyer avec notre clé publique. Les données seront déchiffrables uniquement grâce à la clé privée allant de paire avec la clé publique.
Si la clé privée est communiquée sur le réseau ou stockée sur le serveur elle risque d'être récupérée. Les données envoyées par le serveur pourront donc être déchiffrées par des tiers. Il est donc primordial de ne jamais communiquer sa clé privée. Elle ne sert qu'à déchiffrer les données que l'on vous envoie (chiffrées avec votre clé publique).
Pour générer une paire de clé il suffit de taper la commande suivante :
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.
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.
Il vous faut taper la commande suivante :
#commandes
ls ~/.ssh
#résultat
id_rsa id_rsa.pub known_hosts
id_rsa est votre clé privée, id_rsa.pub votre clé publique et known_hosts contient la listes serveurs auquel vous vous êtes déjà connecté.
En utilisant la commande cat ~/.ssh/id_rsa.pub
affichez le contenu de votre clé publique.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU6aCD3LJM7KtMPT3xyn8vpuT3X8JrCWCnhD3jaTRRQmN4ZH8ofmqRh3/Czcp9ofhU50mIjmhmwx46bxr+sZI1TmY1EDsx0fClS7zUp1H1vE2zCKz4gRcKdbYFVtakj/3qQE4oKnnNeDTQm9wTlHuT3TE/SyvsI+0xA8VtgeX3lNeqODgyMhOTpoM5hnGlGF4CXIY9HvArl6wwMu/Ii4V5CgMSH/ldCDdRE8/SHOIHZ6IVpJeYjmsBaGYbrphNxNXVuaq9qEtV4o8YXHl8G701OCxIUi1QV0eEQCTCC2AA+Hf88mJCQh5zQ8tthbiO/cnbNrjvXyTZlQAIyvpyGaI/ stc@hal9017
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
Vous pouvez désormais vous connecter sans mot de passe. La passphrase de votre clé vous sera demandée à la place.
NB : le dossier .ssh et le fichier authorized_keys doivent appartenir à jack (si ce n'est pas le cas on utilise chown)
[exercice optionnel] Donner accès au serveur à des tiers
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.
Créer un nouvel utilisateur sur le serveur : adduser jack
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)