Introduction
Dans cet atelier, vous allez acquérir les compétences essentielles pour vous connecter à un serveur Linux distant et le gérer à l'aide du protocole Secure Shell (SSH). Vous commencerez par préparer l'environnement distant, ce qui implique l'installation et la configuration du paquet serveur OpenSSH. Après vous être assuré que le serveur est prêt à accepter des connexions, vous apprendrez à obtenir son adresse IP, une étape cruciale pour établir une liaison depuis une machine cliente.
Une fois le serveur configuré, vous pratiquerez les deux méthodes principales d'interaction à distance via SSH. Tout d'abord, vous établirez une session shell entièrement interactive, vous offrant un accès complet à la ligne de commande de la machine distante. Ensuite, vous apprendrez à exécuter une commande spécifique unique sur le serveur distant sans démarrer de session complète, une technique particulièrement efficace pour les scripts et les tâches d'automatisation.
Installer et configurer le serveur OpenSSH
Dans cette étape, vous allez installer le paquet serveur OpenSSH, qui permet à votre système d'accepter les connexions SSH entrantes. Le protocole SSH (Secure Shell) est un protocole réseau cryptographique permettant d'exploiter des services réseau de manière sécurisée sur un réseau non sécurisé. Le paquet openssh-server contient les composants de base pour héberger un serveur SSH.
Tout d'abord, il est recommandé de mettre à jour la liste des paquets de votre système pour vous assurer d'obtenir la version la plus récente du logiciel. L'utilisateur labex dispose des privilèges sudo, nécessaires pour la gestion des paquets au niveau du système.
Exécutez la commande suivante pour mettre à jour l'index des paquets :
sudo apt-get update
Vous verrez un résultat similaire au suivant, indiquant que les listes de paquets sont récupérées depuis les dépôts :
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...
Fetched 1,845 kB in 2s (1,040 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up-to-date.
Maintenant, vous pouvez installer le paquet openssh-server via apt-get. L'option -y répond automatiquement "oui" à toutes les invites, rendant l'installation non interactive.
sudo apt-get install -y openssh-server
Une fois la commande terminée, vous devriez voir un message confirmant l'installation et la configuration d'OpenSSH et de ses dépendances :
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
ncurses-term openssh-sftp-server ssh-import-id
...
Setting up openssh-server (1:8.9p1-3ubuntu0.1) ...
...
Creating SSH2 ECDSA key; this may take some time ...
Creating SSH2 ED25519 key; this may take some time ...
...
Le service du serveur OpenSSH, nommé sshd, devrait démarrer automatiquement après l'installation. Vous pouvez vérifier son état à l'aide de la commande systemctl, qui est l'outil de contrôle du gestionnaire de système et de services systemd.
Vérifiez le statut du service SSH :
sudo systemctl status ssh
Le résultat devrait indiquer que le service est active (running). Cela confirme que le serveur SSH est prêt à accepter des connexions.
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-10-30 10:30:00 UTC; 5s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1234 (sshd)
Tasks: 1 (limit: 4617)
Memory: 1.2M
CPU: 8ms
CGroup: /system.slice/ssh.service
└─1234 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
...
Appuyez sur la touche q de votre clavier pour quitter la vue du statut et revenir à l'invite de commande.
Parfait ! Le serveur OpenSSH est maintenant installé et opérationnel sur votre système. Dans l'étape suivante, vous créerez un nouvel utilisateur pour la démonstration, puis vous apprendrez à trouver l'adresse IP du serveur pour vous y connecter.
Créer un nouvel utilisateur pour la démonstration SSH
Dans cette étape, vous allez créer un nouveau compte utilisateur qui sera utilisé pour les connexions SSH. Bien que l'utilisateur par défaut labex possède les privilèges sudo, nous ne connaissons pas son mot de passe pour l'authentification SSH. Nous devons donc créer un utilisateur dédié avec un mot de passe connu pour cette démonstration.
Tout d'abord, créez un nouvel utilisateur nommé sshuser à l'aide de la commande adduser. Cette commande créera le compte et vous invitera à configurer un mot de passe ainsi que d'autres détails.
sudo adduser sshuser
Il vous sera demandé de saisir et de confirmer un mot de passe pour le nouvel utilisateur. Pour cet atelier, utilisez password123. D'autres informations vous seront demandées (nom complet, numéro de bureau, etc.), mais vous pouvez appuyer sur Entrée pour ignorer ces champs.
Adding user `sshuser' ...
Adding new group `sshuser' (1001) ...
Adding new user `sshuser' (1001) with group `sshuser' ...
Creating home directory `/home/sshuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for sshuser
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
Vérifiez maintenant que l'utilisateur a bien été créé en consultant le fichier /etc/passwd :
grep sshuser /etc/passwd
Vous devriez voir un résultat similaire à :
sshuser:x:1000:1000:,,,:/home/sshuser:/bin/bash
Cela confirme que le compte sshuser a été créé avec un répertoire personnel dans /home/sshuser et utilise le shell bash. Les numéros UID (ID utilisateur) et GID (ID de groupe) exacts peuvent varier selon les utilisateurs déjà présents sur le système.
Vous pouvez également vérifier que le répertoire personnel de l'utilisateur a été créé. Notez que vous avez besoin des privilèges sudo pour accéder au répertoire personnel d'un autre utilisateur :
sudo ls -la /home/sshuser
Le résultat affichera le contenu du répertoire personnel de l'utilisateur :
total 20
drwxr-x--- 2 sshuser sshuser 4096 Jun 30 09:26 .
drwxr-xr-x 5 root root 4096 Jun 30 09:26 ..
-rw-r--r-- 1 sshuser sshuser 220 Jun 30 09:26 .bash_logout
-rw-r--r-- 1 sshuser sshuser 3771 Jun 30 09:26 .bashrc
-rw-r--r-- 1 sshuser sshuser 807 Jun 30 09:26 .profile
Remarquez que le répertoire personnel a des permissions restreintes (drwxr-x---), ce qui signifie que seuls le propriétaire (sshuser) et les membres de son groupe peuvent y accéder. C'est pourquoi sudo est nécessaire pour en lister le contenu.
Excellent ! Vous disposez maintenant d'un compte utilisateur sshuser avec le mot de passe password123 prêt pour les connexions SSH des étapes suivantes.
Obtenir l'adresse IP du serveur SSH
Dans cette étape, vous allez apprendre à identifier l'adresse IP de votre serveur SSH. Une adresse IP est une étiquette numérique unique attribuée à chaque appareil connecté à un réseau informatique utilisant le protocole Internet. Pour établir une connexion SSH, la machine cliente doit connaître l'adresse IP du serveur auquel elle souhaite se connecter.
Dans un scénario classique avec deux machines distinctes, vous utiliseriez cette adresse IP pour vous connecter depuis le client. Cependant, pour cet atelier, vous travaillez sur une seule machine virtuelle qui fera office à la fois de serveur et de client SSH. Pour vous connecter au serveur SSH tournant sur votre propre machine, vous pouvez utiliser une adresse IP spéciale, 127.0.0.1, également appelée localhost. Cette adresse fait toujours référence à la machine locale elle-même.
Néanmoins, savoir identifier l'adresse IP réseau de votre machine est une compétence indispensable. Sous Linux, la commande moderne pour cela est ip.
Pour afficher les informations de toutes les interfaces réseau de votre système, utilisez la commande ip addr :
ip addr
Le résultat listera toutes les interfaces, telles que lo (l'interface de bouclage ou loopback), eth0 (l'interface Ethernet principale), et éventuellement docker0. Vous devez chercher l'entrée inet sous votre interface réseau principale, généralement eth0.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:01:82:ae brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.16.50.114/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
valid_lft 1892159625sec preferred_lft 1892159625sec
inet6 fe80::216:3eff:fe01:82ae/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:86:fe:f0:88 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
Dans l'exemple ci-dessus, l'adresse IP principale de l'interface eth0 est 172.16.50.114.
Une commande plus simple pour afficher uniquement les adresses IP de la machine est hostname -I.
hostname -I
Cette commande affichera une liste des adresses IP de la machine séparées par des espaces.
172.16.50.114 172.17.0.1
Le résultat montre plusieurs adresses : celle de l'interface réseau principale (172.16.50.114) et celle du pont Docker (172.17.0.1).
Vous savez maintenant comment trouver l'adresse IP de votre machine. Dans l'étape suivante, vous utiliserez l'adresse localhost (127.0.0.1) pour vous connecter au serveur SSH hébergé sur cette même machine.
Établir une session SSH interactive vers le serveur distant
Dans cette étape, vous allez utiliser le client ssh pour établir une session interactive avec le serveur OpenSSH que vous avez configuré. Une session interactive vous donne accès à une invite de commande sur le serveur distant, vous permettant d'exécuter des commandes comme si vous y étiez physiquement connecté.
Pour vous connecter, utilisez la commande ssh suivie du nom d'utilisateur et de l'adresse du serveur, au format ssh <utilisateur>@<nom_hote_ou_ip>. Puisque vous vous connectez au serveur tournant sur votre propre machine (localhost) en tant qu'utilisateur sshuser, vous utiliserez l'adresse IP 127.0.0.1.
Ouvrez un terminal et exécutez la commande suivante :
ssh sshuser@127.0.0.1
La première fois que vous vous connectez à un nouveau serveur SSH, votre client affichera l'empreinte de la clé publique du serveur et vous demandera de confirmer son authenticité. Il s'agit d'une mesure de sécurité pour prévenir les attaques de type "homme du milieu" (man-in-the-middle). Vous devez taper yes et appuyer sur Entrée pour continuer.
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '127.0.0.1' (ED25519) to the list of known hosts.
Après avoir confirmé la clé de l'hôte, le mot de passe de l'utilisateur sshuser sur le serveur distant vous sera demandé. Saisissez password123.
sshuser@127.0.0.1's password:
Une fois le mot de passe correct saisi, vous serez connecté et verrez le message de bienvenue du serveur ainsi qu'une nouvelle invite de commande. Notez que l'invite peut changer pour indiquer que vous êtes sur l'hôte distant.
Welcome to Ubuntu 22.04.x LTS (GNU/Linux x.x.x-xx-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
sshuser@ubuntu:~$
Pour confirmer que vous êtes bien dans une session distante, vous pouvez exécuter une commande comme pwd pour afficher le répertoire de travail actuel.
pwd
Le résultat affichera votre répertoire personnel sur la machine distante.
/home/sshuser
Pour fermer la session SSH interactive et revenir au shell de votre machine locale, tapez simplement exit et appuyez sur Entrée.
exit
Vous verrez un message confirmant la fermeture de la connexion, et votre invite de commande d'origine réapparaîtra.
logout
Connection to 127.0.0.1 closed.
Vous avez réussi à établir et à fermer une session SSH interactive.
Exécuter une commande unique à distance via SSH
Dans cette étape, vous apprendrez à exécuter une commande unique sur un serveur distant sans démarrer de session interactive complète. C'est une fonctionnalité puissante de SSH, largement utilisée dans les scripts et pour l'automatisation, car elle permet de récupérer rapidement une information ou d'effectuer une tâche sur une machine distante avant de se déconnecter immédiatement.
La syntaxe consiste simplement à ajouter la commande que vous souhaitez exécuter à la fin de votre chaîne de connexion ssh habituelle. Il est recommandé d'entourer la commande distante de guillemets pour éviter que le shell local ne l'interprète.
Essayons d'exécuter la commande hostname sur le serveur distant. Cette commande affiche le nom d'hôte du système.
ssh sshuser@127.0.0.1 "hostname"
Le mot de passe (password123) vous sera demandé comme précédemment. Après l'avoir saisi, la commande hostname s'exécutera sur le serveur distant, son résultat s'affichera dans votre terminal, et la connexion SSH se fermera automatiquement.
sshuser@127.0.0.1's password:
iZrj91w6gb8osv0mra83hdZ
Remarquez que vous revenez immédiatement à votre invite de commande locale sans avoir besoin de taper exit.
Vous pouvez également exécuter des commandes plus complexes. Par exemple, listons le contenu du répertoire racine (/) sur le serveur distant avec ls -l /.
ssh sshuser@127.0.0.1 "ls -l /"
Saisissez à nouveau le mot de passe password123. Le résultat sera une liste détaillée des fichiers et répertoires du système de fichiers racine du serveur distant.
sshuser@127.0.0.1's password:
total 72
lrwxrwxrwx 1 root root 7 Apr 21 2022 bin -> usr/bin
drwxr-xr-x 4 root root 4096 May 30 2023 boot
drwxr-xr-x 19 root root 4080 Jun 30 09:23 dev
drwxr-xr-x 137 root root 12288 Jun 30 09:26 etc
drwxr-xr-x 5 root root 4096 Jun 30 09:26 home
lrwxrwxrwx 1 root root 7 Apr 21 2022 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Apr 21 2022 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Apr 21 2022 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Apr 21 2022 libx32 -> usr/libx32
drwx------ 2 root root 16384 Dec 28 2022 lost+found
drwxr-xr-x 2 root root 4096 Apr 21 2022 media
drwxr-xr-x 2 root root 4096 Apr 21 2022 mnt
drwxr-xr-x 5 root root 4096 Feb 27 2023 opt
dr-xr-xr-x 231 root root 0 Jun 30 09:22 proc
drwx------ 8 root root 4096 Jun 30 09:26 root
drwxr-xr-x 35 root root 1060 Jun 30 09:30 run
lrwxrwxrwx 1 root root 8 Apr 21 2022 sbin -> usr/sbin
drwxr-xr-x 10 root root 4096 Feb 18 2023 snap
drwxr-xr-x 2 root root 4096 Apr 21 2022 srv
dr-xr-xr-x 13 root root 0 Jun 30 09:22 sys
drwxrwxrwt 18 root root 4096 Jun 30 09:30 tmp
drwxr-xr-x 14 root root 4096 Apr 21 2022 usr
drwxr-xr-x 13 root root 4096 Apr 21 2022 var
Cette méthode est incroyablement efficace pour gérer plusieurs serveurs ou pour intégrer des opérations distantes dans vos scripts shell locaux. Vous avez maintenant appris les deux façons principales d'utiliser SSH : pour des sessions interactives et pour l'exécution de commandes uniques.
Résumé
Dans cet atelier, vous avez appris les étapes fondamentales pour activer et utiliser Secure Shell (SSH) pour la gestion de serveurs distants. Vous avez commencé par préparer le serveur Linux distant, ce qui a impliqué la mise à jour de l'index des dépôts de paquets avec sudo apt-get update, puis l'installation du paquet openssh-server. Ce processus a configuré le système pour accepter les connexions SSH entrantes de manière sécurisée, en démarrant automatiquement le service sshd.
Ensuite, vous avez créé un compte utilisateur dédié (sshuser) avec un mot de passe connu (password123) pour les besoins de l'authentification SSH, car l'utilisateur par défaut labex possède des privilèges sudo mais n'a pas de mot de passe défini pour les connexions SSH. Vous avez vérifié la création de l'utilisateur et confirmé que son répertoire personnel était correctement établi.
Une fois le serveur et le compte utilisateur prêts, vous avez appris à obtenir l'adresse IP du serveur, une information indispensable pour qu'un client puisse initier une connexion. Vous avez ensuite pratiqué les deux modes d'utilisation principaux de SSH : l'établissement d'une session en ligne de commande interactive complète pour travailler directement sur le serveur distant, et l'exécution d'une commande unique non interactive à distance, ce qui est extrêmement efficace pour les tâches de script et d'automatisation.



