Introduction
Dans ce laboratoire, vous allez acquérir les compétences essentielles pour vous connecter à un serveur Linux distant et le gérer à l'aide du protocole SSH (Secure Shell). Vous commencerez par préparer l'environnement distant, ce qui implique l'installation et la configuration du paquet serveur OpenSSH. Une fois le serveur prêt à accepter des connexions, vous apprendrez à obtenir son adresse IP, une étape cruciale pour établir une connexion depuis une machine cliente.
Une fois le serveur configuré, vous pratiquerez deux méthodes principales d'interaction à distance via SSH. Premièrement, vous établirez une session shell entièrement interactive, vous donnant un accès complet en ligne de commande à la machine distante. Deuxièmement, vous apprendrez à exécuter une commande unique et spécifique sur le serveur distant sans démarrer de session interactive complète, une technique extrêmement efficace pour les tâches de scripting et 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. SSH, ou 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 essentiels 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 dernière version du logiciel. L'utilisateur labex dispose des privilèges sudo, nécessaires pour la gestion des paquets à l'échelle du système.
Exécutez la commande suivante pour mettre à jour l'index des paquets :
sudo apt-get update
Vous verrez une sortie similaire à la suivante, 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 en utilisant apt-get. L'option -y répond automatiquement "yes" à toutes les invites, rendant l'installation non interactive.
sudo apt-get install -y openssh-server
Dans certains environnements LabEx, Ubuntu peut afficher une boîte de dialogue de redémarrage de service pendant l'installation. Si cela se produit, ne redémarrez pas vncserver, car cela pourrait déconnecter le bureau du navigateur et laisser la page grise. Utilisez plutôt l'une de ces options sûres :
- Appuyez sur
Tabpour sélectionner<Cancel>, puis appuyez sur Entrée. - Ou appuyez sur
Spacepour décocher la sélectionvncserver, puis sélectionnez<Ok>.
Si le bureau du navigateur devient gris, actualisez la page LabEx pour vous reconnecter à la session et poursuivre le laboratoire.
Une fois la commande terminée, vous devriez voir une sortie confirmant l'installation et la configuration de openssh-server 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 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 un outil permettant de contrôler le gestionnaire de système et de services systemd.
Vérifiez l'état du service SSH :
sudo systemctl status ssh
La sortie doit 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 d'état et revenir à l'invite de commande.
Parfait ! Le serveur OpenSSH est maintenant installé et en cours d'exécution sur votre système. Dans l'étape suivante, vous créerez un nouvel utilisateur pour la démonstration SSH, puis apprendrez à trouver l'adresse IP du serveur et à 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. Étant donné que l'utilisateur par défaut labex dispose des privilèges sudo mais que nous ne connaissons pas son mot de passe pour l'authentification SSH, nous devons 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 en utilisant la commande adduser. Cette commande créera le compte utilisateur et vous demandera de définir un mot de passe et d'autres détails.
sudo adduser sshuser
Vous serez invité à saisir et confirmer un mot de passe pour le nouvel utilisateur. Pour ce laboratoire, utilisez password123 comme mot de passe. On vous demandera également des informations supplémentaires comme le nom complet, le 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 été créé avec succès en consultant le fichier /etc/passwd :
grep sshuser /etc/passwd
Vous devriez voir une sortie similaire à :
sshuser:x:1000:1000:,,,:/home/sshuser:/bin/bash
Cela confirme que le compte sshuser a été créé avec un répertoire personnel situé dans /home/sshuser et qu'il utilise le shell bash. Les numéros UID (identifiant utilisateur) et GID (identifiant de groupe) exacts peuvent varier en fonction des utilisateurs existants 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
La sortie devrait afficher 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
Notez que le répertoire personnel a des permissions restreintes (drwxr-x---), ce qui signifie que seul le propriétaire (sshuser) et les utilisateurs du même groupe peuvent y accéder. C'est pourquoi sudo est requis pour lister son contenu.
Parfait ! Vous disposez maintenant d'un compte utilisateur sshuser avec le mot de passe password123 que vous pouvez utiliser pour les connexions SSH dans les étapes suivantes.
Obtenir l'adresse IP du serveur SSH
Dans cette étape, vous apprendrez à trouver 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 la communication. 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 typique avec deux machines distinctes, vous utiliseriez cette adresse IP pour vous connecter depuis le client. Cependant, pour ce laboratoire, vous travaillez sur une seule machine virtuelle qui agira à la fois comme serveur SSH et comme client SSH. Pour vous connecter au serveur SSH s'exécutant sur votre propre machine, vous pouvez utiliser une adresse IP spéciale, 127.0.0.1, également connue sous le nom de localhost. Cette adresse fait toujours référence à la machine locale elle-même.
Même ainsi, il est essentiel de savoir comment trouver l'adresse IP de votre machine sur le réseau. La commande moderne pour cela sous Linux est ip.
Pour afficher des informations sur toutes les interfaces réseau de votre système, utilisez la commande ip addr :
ip addr
La sortie listera toutes les interfaces réseau, telles que lo (l'interface de bouclage), eth0 (l'interface Ethernet principale) et éventuellement docker0 (l'interface de pont Docker). Vous recherchez l'entrée inet sous votre interface réseau principale, qui est 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 pour l'interface eth0 est 172.16.50.114. Vous pouvez également voir une interface docker0 si Docker est installé sur le système.
Une commande plus simple pour afficher uniquement les adresses IP de la machine est hostname -I.
hostname -I
Cette commande affichera une liste séparée par des espaces des adresses IP de la machine.
172.16.50.114 172.17.0.1
La sortie montre plusieurs adresses IP : l'adresse IP de l'interface réseau principale (172.16.50.114) et l'adresse IP du pont Docker (172.17.0.1).
Maintenant, vous savez 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 s'exécutant sur cette même machine.
Établir une session SSH interactive vers le serveur distant
Dans cette étape, vous utiliserez le client ssh pour établir une session interactive avec le serveur OpenSSH que vous avez configuré. Une session interactive vous donne 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, vous utilisez la commande ssh suivie du nom d'utilisateur et de l'adresse du serveur, au format ssh <utilisateur>@<nom_hôte_ou_ip>. Puisque vous vous connectez au serveur s'exécutant 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 SSH 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 empêcher les attaques de type "homme du milieu". 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, vous serez invité à saisir le mot de passe de l'utilisateur sshuser sur le serveur distant. Entrez le mot de passe password123 que vous avez défini lors de la création de l'utilisateur.
sshuser@127.0.0.1's password:
Une fois le mot de passe correct saisi, vous serez connecté et accueilli par le message de bienvenue du serveur ainsi qu'une nouvelle invite de commande. Remarquez comment 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 dans une session distante, vous pouvez exécuter une commande comme pwd pour afficher le répertoire de travail actuel.
pwd
La sortie 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 que la connexion est fermée, et votre invite de commande d'origine réapparaîtra.
logout
Connection to 127.0.0.1 closed.
Vous avez maintenant établi et fermé avec succès une session SSH interactive.
Exécuter une commande unique à distance via SSH
Dans cette étape, vous apprendrez à exécuter une seule commande sur un serveur distant sans démarrer de session interactive complète. Il s'agit d'une fonctionnalité puissante de SSH, largement utilisée dans les scripts et pour l'automatisation, car elle vous permet de récupérer rapidement des informations ou d'effectuer une tâche sur une machine distante, puis de vous 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é de mettre la commande distante entre 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"
Vous serez invité à saisir le mot de passe (password123) comme précédemment. Après l'avoir saisi, la commande hostname s'exécutera sur le serveur distant, sa sortie sera imprimée 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 en utilisant ls -l /.
ssh sshuser@127.0.0.1 "ls -l /"
Encore une fois, entrez le mot de passe password123 lorsque vous y êtes invité. La sortie sera une longue liste 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 manières principales d'utiliser SSH : pour les sessions interactives et pour l'exécution de commandes uniques.
Résumé
Dans ce laboratoire, vous avez appris les étapes fondamentales pour activer et utiliser SSH (Secure Shell) pour la gestion de serveurs distants. Vous avez commencé par préparer le serveur Linux distant, ce qui impliquait la mise à jour de l'index des dépôts de paquets à l'aide de sudo apt-get update, puis l'installation du paquet openssh-server. Ce processus a configuré le système pour accepter de manière sécurisée les connexions SSH entrantes, en démarrant automatiquement le service sshd.
Ensuite, vous avez créé un compte utilisateur dédié (sshuser) avec un mot de passe connu (password123) à des fins d'authentification SSH, car l'utilisateur par défaut labex dispose des privilèges sudo mais ne possède pas de mot de passe pour les connexions SSH. Vous avez vérifié la création de l'utilisateur et confirmé que le répertoire personnel était correctement établi.
Avec le serveur et le compte utilisateur prêts, vous avez appris à obtenir l'adresse IP du serveur, une information cruciale pour que tout client puisse initier une connexion. Vous avez ensuite pratiqué les deux manières principales d'utiliser SSH : établir une session en ligne de commande complète et interactive pour travailler directement sur le serveur distant, et exécuter une commande unique et non interactive à distance, ce qui est très efficace pour les tâches de scripting et d'automatisation.



