Il est grand temps de mettre à jour mes billets sur la configuration d'un Raspberry Pi en tant que serveur. Les modifications apportées aux systèmes d'exploitation basés sur Debian tel que Raspberry Pi OS (anciennement nommé Raspbian) sont généralement incrémentielles, de sorte que le guide en trois parties de la fin de 2019 commençant par le billet intitulé Installation et la configuration de Raspbian Buster Lite reste valide dans l'ensemble. Cependant, il y a quelques changements. Le plus important est l'arrivée de l'utilitaire Raspberry Pi Imager qui simplifie grandement l'installation du système d'exploitation sur un Pi sans tête dès le départ. C'est-à-dire que les périphériques habituels, moniteur, clavier et souris, ne seront jamais branchés au Raspberry Pi. Le billet est principalement centré sur Linux, mais il contient également des indications pour les utilisateurs de Windows 10 et même quelques informations pour les utilisateurs macOS. Bien entendu, ces systèmes d'exploitation se trouvent sur un ordinateur de bureau ou portable depuis lequel se fait la configuration du Raspberry Pi dont le système d'exploitation est Raspberry Pi OS (Buster).
La première section de cet article est pour les malheureux qui ne n'ont pas visité ce site auparavant. Il explique comment sont présentées les procédures et démarches décrites dans ces billets. C'est très basique, probablement évident dès le début et il peut être ignoré par la grande majorité des lecteurs. Il en va de même pour la deuxième section, à moins que « ordinateur sans tête » ou « serveur » ne soient des termes qui ne veulent rien dire. Cette deuxième section contient une deuxième partie avec une description sommaire de ce qu'est une session distante. Parce qu'il s'adresse aux débutants avec un minimum de connaissances sur l'environnement Linux, il est présenté comme un volet (en fait un bloc de texte déroulant) dans l'espoir qu'il n'interfère pas trop avec le flux du texte principal. Il y a d'autres volets similaires plus tard dans le billet. Les sections 3, 4 et 5 sont considérablement différentes du billet de 2019 en tirant pleinement parti de Raspberry Pi Imager. Je propose également différentes stratégies pour trouver l'adresse IP du Raspberry Pi. Pour les utilisateurs de Windows 10 qui ne disposent peut-être pas de la toute dernière version du système d'exploitation, il existe une nouvelle méthode de secours. Le reste de l'article est à peu près le même qu'auparavant, à l'exception de l'ajout d'une approche moins fréquemment utilisée pour protéger le Pi contre les attaques de connexion par force brute.
Table des matières
- Préambule pour les nouveaux visiteurs du site
- Le Raspberry Pi comme ordinateur sans tête
- Obtenir l'utilitaire Raspberry Pi Imager
- Copier le système d'expoitation Raspberry Pi OS vers une carte SD
- Démarrage initial
- Modifier le mot de passe et le nom d'utilisateur
- Mettre à niveau le système d'exploitation
- Adresses IP statiques
- Suppléments
Préambule pour les nouveaux visiteurs du site
Cet article, ainsi que la plupart des autres sur ce site, tente de fournir des informations dans un format que les aspirants adeptes du bricolage électronique numérique pourront facilement suivre en espérant qu'il contient un heureux mélange d'instructions et d'explications. Cet arbitrage sera pénible à la fois pour l'impatient qui ne veut qu'une courte liste d'étapes pour arriver au résultat souhaité et pour l'abstracteur qui veut parvenir à une compréhension complète avant de s'engager dans l'action. Tel est l'écueil du compromis.
Ouvrir un terminal
Les démarches présentées ici sont pour la plupart des commandes entrées à l'aide du clavier à une invite de l'interpréteur de commandes dans un terminal. Donc il faut savoir comment un terminal depuis votre ordinateur de bureau ou portable.
Sous Linux
Sur de nombreux systèmes Linux, le raccourci clavier AltCtrlT, c'est-à-dire la frappe simultanée des trois touches du clavier, ouvre une nouvelle instance d'un émulateur de terminal (on dit aussi un terminal pour faire plus simple). Sur mon système Mint 20.1 Mate, il y a une icône de terminal sur la barre d'outils. Le terminal est aussi un choix dans les sous menus Outils système
duu menu principal. De plus, le gestionnaire de fichiers intégré, Caja, et le gestionnaire de fichiers DoubleCommander que j'installe sur tous mes ordinateurs ont des options de menu pour démarrer un terminal dans un répertoire donné.
Sous Windows 10
Il existe au moins deux terminaux différents dans Windows 10 :
- Commande: utilisez le raccourci clavier WindowR puis tapez
cmd
and la boîte de saisieOuvrir
, - Power Shell: cliquez sur l'icône du menu démarrer avec le bouton droit de la souris et sélectionnez
Windows PowerShell
dans le menu.
On peut même ouvrir un terminal Linux sousWindows 10 si WSL est activé sur la machine. Cependant, si vous êtes au courant de cela, vous n'avez pas besoin de lire ceci.
Sous macOS
Il existe de nombreuses façons de démarrer le terminal sous macOS, la plus simple est peut-être d'utiliser le raccourci clavier cmd<espace>, puis de taper terminal
dans le champ de recherche Spotlight. Si le terminal doit être utilisé régulièrement, il peut être plus simple de l'ajouter au dock pour qu'il reste à portée de clic.
Présentation des sessions
Voici un exemple, repris plus loin dans l'article, de la présentation d'une session ou d'une partie de session sur ce site. Il montre comment utiliser la commande ping
sur une machine de bureau Linux pour trouver un Raspberry Pi situé sur le réseau local.
Lorsque la sortie d'une commande est trop longue, des parties de celle-ci seront supprimées et remplacées par une seule ligne contenant des points de suspension. Ci-dessus, seul le résultat du premier ping
est affiché et les trois autres sont remplacés par des points de suspension.
Les versions non modifiées de l'interpréteur de commande bash
affichent le nom de l'utilisateur, le nom d'hôte de l'ordinateur et le répertoire de travail actuel avant l'invite. Donc dans michel@hp:~$
on retrouve :
- michel mon nom d'utilisateur sur mon ordinateur de bureau,
- hp le nom de l'ordinateur hostname,
- ~ le répertoire de travail. Le tilde
~
est un raccourci pour le répertoire personnel de l'utilisateur soit/home/michel
- $ l'invite qui est # si l'utilisateur est
root
.
La commande affichée sur un fond verdâtre est la partie que j'ai saisie à l'aide du clavier. À chaque frappe d'une touche, le shell imprime le caractère correspondant à l'écran. Malheureusement, il y a une frappe de touche implicite à la fin de la commande. La touche Entrée doit être enfoncée sur le clavier pour signaler que la saisie de texte est terminée et que le shell doit alors essayer de donner un sens à ce qui a été entré. J'aurais peut-être dû adopter une représentation plus complète de la commande comme celle-ci
Malheureusement, il n'y a pas d'étiquette ou de symbole universel pour la touche Entrée, je n'ai donc jamais trouvé de moyen satisfaisant d'indiquer cette frappe. En outre, je suis trop paresseux pour taper la chaîne de 56 caractères pour engendrer l'indication de l'activation de la touche qu'on peut voir ci-dessus, soit <span class="key" style="background: gray">Entree</span>
.
Voici comment faire la même commande dans un terminal Windows 10 (PowerShell
ou non). Il n'est pas rare de trouver des utilitaires de ligne de commande très similaires dans Windows 10, Linux et macOS, parfois avec des paramètres de ligne de commande légèrement différents (comme dans ce cas) ou parfois avec des noms différents tels que findstr
et grep
.
Indice
Si vous suivez les instructions présentées dans ce billet, il n'est pas nécessaire de taper les commandes affichées. Les images d'écran présentées ci-dessus ne sont pas des captures d'écran et il est possible de copier n'importe quelle commande avec un fond vert dans le presse-papiers, puis de la coller à l'invite dans une fenêtre de terminal. En supposant que je n'aie commis aucune erreur lors de l'enregistrement de la commande de mon terminal dans le fichier source de cet article, vous éviterez les fautes de frappe en utilisant le copier-coller. Cependant, il faut utiliser son jugement. Ci-dessus j'ai fait un ping du Pi auquel j'avais donné le nom damus
. Si le nom d'hôte de votre Pi est demeter
, il faut ajuster la commande qui alors devrait être ping demeter.local. Les noms d'hôte, d'utilisateurs, de répertoires créés par l'utilisateur et les adresses IP sur le réseau local devront vraisemblablement être ajustés de façon semblable. De plus, n'oubliez pas d'appuyer sur la touche Entrée après avoir saisi chaque commande afin que le shell sache que vous avez terminé et qu'il est temps qu'il fasse son travail.
Le Raspberry Pi comme ordinateur sans tête
Étant donné que le coût combiné d'un moniteur, d'un clavier et d'une souris peut être un multiple du coût d'un Raspberry Pi, il est logique de renoncer à ces périphériques si possibe. Bien sûr, leur absence limite les utilisations possibles du Pi, mais il existe de nombreuses tâches qui se prêtent à un tel agencement. Voici quelques serveurs sans tête que j'ai crées.
- Un serveur d'impression CUPS qui a transformé une ancienne imprimante HP qui n'est plus prise en charge par Windows en une imprimante réseau accessible depuis n'importe quel ordinateur du réseau local.
- Un serveur domotique basé sur Domoticz.
- Un serveur MQTT qui fait le pont entre Domoticz et mes appareils IdO.
- Un serveur HTTP utilisé pour télécharger les mises à jour du micrologiciel des appareils IdO.
- Un serveur de journaux système centralisé.
- Un serveur de média audio basé sur MPD ou MOC.
Une fois la décision prise de créer un ordinateur sans tête, il s'ensuit qu'on veut le configurer sans y connecter un moniteur, un clavier et une souris. Dans ce cas, le contrôle du Raspberry Pi devra se faire à distance en utilisant le protocole SSH. Cela signifie que le Pi doit être connecté au même réseau local (LAN) que l'ordinateur de bureau et que SSH doit être activé sur le Raspberry Pi. Si le Pi ne peut être branché au réseau local qu'avec le Wi-Fi, il doit connaître le nom et le mot de passe du réseau Wi-Fi dès le départ. Tout cela peut maintenant être fait très facilement comme expliqué ci-dessous.
Obtenir l'utilitaire Raspberry Pi Imager
Tel que proposé sur la page Installing the Operating System (provenant du site de documentation de la Fondation Raspberry grandement amélioré depuis août 2021), j'ai utilisé Raspberry Pi Imager pour copier l'image du système d'exploitation sur une carte SD. Dans le passé, j'utilisais balenaEtcher (anciennement Etcher) et, avant cela, l'utilitaire dd
. Cependant, le Raspberry Pi Imager, introduit récemment, simplifie grandement cette tâche, en particulier lors de la création d'un système sans tête.
Utilisez le lien ci-dessus pour télécharger le fichier Imager
approprié pour la machine qui sera utilisé pour écrire le système d'exploitation sur une carte SD. Une fois le paquet téléchargé, il devra être installé selon les modalités du système d'exploitation de l'ordinateur de bureau utilisé.
Linux
Cliquez avec le bouton droit de la souris sur le fichier
.deb
téléchargé (actuellement nomméimager_1.6.2_amd64.deb
pour Ubuntu x86) dans un navigateur de fichiers et choisissez l'optionOuvrir avec Installateur de paquets GDebi
Comme on peut le voir, l'installateur s'occupera de toutes les dépendances. En d'autres termes, il installera tout autre paquet nécessaire à Imager qui n'est pas en place.
Cliquez sur le bouton Installer le paquet.
En fait, en utilisant exactement cette procédure, la version 1.6 déjà présente sur mon ordinateur de bureau a été remplacée par la version 1.6.2 de l'Imager.
Windows 10
Double-cliquez sur le fichier téléchargé dans le navigateur de fichiers (actuellement le fichier est
imager_1.6.2.exe
), puis cliquez sur le bouton Installer. Cliquez sur le bouton Terminer une fois l'installation terminée.macOS
L'utilitaire Installer qu'on télécharge est fichier qui contient une image disque au format DMG. Lorsqu'on double-clique sur le fichier, une fenêtre surgira où il y a un icône représentant l'utilitaire qui faut glisser vers l'icône du dossier
Applications
pour compléter l'installation.
Qu'importe le système d'exploitation, on peut supprimer le fichier téléchargé depuis raspberrypi.org
quand l'installation est terminée.
Copier le système d'expoitation Raspberry Pi OS vers une carte SD
La première étape consiste à lancer l'utilitaire Raspberry Pi Imager
.
Linux
Dans Mint 20.1 Mate, l'utilitaire se trouve dans les
Accessoires
du menu principal. On peut aussi saisirimager
dans la zone de recherche du menu principal. Dans tous les systèmes Linux, il devrait être possible de démarrer l'application à partir d'un terminal avec la commande rpi-imager.Windows 10
Dans Windows 10, le programme, assez curieusement appelé
Raspberry Pi Imager
, se trouve dans le menu de démarrage sous la lettre R. Il est également possible de le démarrer à partir de l'utilitairerun
(cliquer avec le bouton droit de la souris sur le menu Démarrer et choisir l'optionrun
ou appuyez sur le raccourci clavier WindowR) puis entrezrpi-imager
dans la boîte de saisieOuvrir
. Il faudra probablement autoriser l'application à apporter des modifications à l'appareil.macOS
On lance
Imager
dans macOS à peu près comme on ouvre un terminal. Utilisez le raccourci clavier cmd<espace>, puis taperImager
dans le champ de recherche Spotlight. Il suffit de sélectionnerRaspberry Pi Imager
.
Peu importe comment le programme est lancé, voici son écran de démarrage.
Bien qu'il semble que la copie du système d'exploitation soit une procédure en trois étapes, la définition de certaines options dans une quatrième étape permettra d'ouvrir des sessions SSH avec le Raspberry Pi sans tête connecté au réseau local avec Wi-Fi.
Choisir le système d'exploitation
Le moyen le plus simple de copier l'image de Raspberry Pi OS Lite sur une carte SD est de sélectionner l'option Raspberry Pi OS (other)
.
puis de sélectionner le système d'exploitation Lite
dans l'écran suivant.
De cette manière, Imager obtiendra la plus récente version de l'image compressée depuis le site Raspberry Pi, puis procédera à son installation à la volée sur une carte SD lors de la dernière étape décrite ci-dessous.
Quand je rédigeais ces notes en septembre 2021, j'installais
Raspberry Pi OS Lite Date de sortie: 7 mai 2021 Version du noyau: 5.10 Taille: 444 MBqui est basé sur Debian Buster. Imager ne peut plus télécharger directement cette version comme montré ci-dessus. En effet, de nouvelles versions de Raspberry Pi OS (Lite or Desktop) basées sur Debian 11
(bullseye)
sont disponibles depuis octobre 2021 et fin janvier 2020.
Comme j'avais prévenu dans la troisième partie (en anglais) de ce guide, « ... raspistill
et raspivid
sont tous deux basés sur l'ancienne pile de caméras Raspicam qui pourrait bientôt être obsolète » (source). Or ces utilitaires n'étaient plus dans la version d'octobre du système d'exploitation. Ils sont de retour dans la version courante qui date du 28 janvier 2020, mais il faut activer cette option. On rencontrera des complications quant à la configuration de WireGuard car iptables
a été remplacé par le paquet nftables
.
Je préfère télécharger l'image du système d'exploitation, puis utiliser Imager pour copier le fichier image téléchargé sur une carte SD. Si vous êtes prêt à jouer avec le feu, téléchargez la version du 28 janvier 2022 de Raspberry Pi OS Lite sur votre ordinateur de bureau (veuillez lire les paragraphies précédents pour savoir pourquoi vous ne voudrez peut-être pas le faire). Si vous souhaitez reproduire ce qui est fait dans ce guide, téléchargez la version du 7 mai de Raspberry Pi OS Lite. Il est fort probable que la version « patrimonial » du système d'exploitation du 28 janvier 2020 (version Legacy
qui reste basée sur Debian Buster
) pourrait probablement être utilisée et l'on peut la téléverser vers une carte SD directement depuis Rasberry Pi Imager v1.7. 1.
Pour utiliser une image de système d'exploitation déjà téléchargée, sélectionnez la dernière option (Utiliser image personnalisée
) dans l'écran initial CHOOSE OS
.
L'image désirée peut alors être spécifiée avec un dialogue de sélection de fichiers dont l'apparence dépendra du système d'exploitation de l'ordinateur de bureau. Notons que la plupart sinon toutes les images du système d'exploitation publiées par la Fondation Raspberry Pi sont disponible ici : https://downloads.raspberrypi.org/
Bien entendu, la version complète (Desktop
) de Raspberry Pi OS pourrait être installée plutôt que la version « allégée » (c'est-à-dire Lite
) et il sera possible de faire tout ce qui est décrit dans ce guide. Cependant, le guide montrera toujours comment procéder avec une session SSH qui est en fait un terminal distant, il ne fournira donc aucune instruction pour les opérations qui pourraient être effectuées dans l'interface utilisateur graphique.
Choisir le périphérique de stockage
Le lecteur contenant la carte SD sur laquelle le système d'exploitation sera installé doit être identifié. Cliquez sur le bouton CHOISIR LE STOCKAGE dans l'écran initial du fichier Imager
. Il affichera alors une liste de lecteurs cibles.
Dans mon cas, il était particulièrement facile de trouver le lecteur puisqu'un seul était affiché. Soyez prudent dans cette étape, car quel que soit le lecteur choisi, son contenu sera effacé lors de l'écriture du système d'exploitation.
Définir les options avancées
Si un clavier et un moniteur doivent être connectés au Raspberry Pi qui sera connecté au réseau local avec un câble Ethernet, alors cette étape peut être ignorée, car tout ce qui est fait dans cette étape peut être fait avec l'utilitaire raspi-config
sur le Raspberry Pi une fois qu'il est en cours d'exécution. Cependant, le Raspberry Pi qui héberge mon système domotique n'est pas facilement accessible et ne peut être connecté au réseau local que par Wi-Fi. Il est beaucoup plus logique de faire fonctionner ce Pi comme une machine sans tête dès le début. Dans ce cas, il est nécessaire de définir les identifiants WiFi avant son premier démarrage.
Pour accéder au options avancées
(advanced options), appuyez sur la combinaison de touches CtrlShiftx (sur un MAC, utilisez la combinaison cmdShiftx). Cela fera apparaître une nouvelle fenêtre avec une liste d'options (qui est en anglais seulement).
Comme on peut le voir ci-dessus, les options suivantes ont été définies.
- hostname (nom d'hôte)
- SSH
- Wi-Fi
- locale (fuseau horaire uniquement)
Les noms d'hôtes doivent être uniques sur un réseau, il est donc préférable de les changer dès le début, d'autant plus que nous comptons sur le nom d'hôte pour nous connecter au Raspberry Pi. Je suppose que le fuseau horaire n'a pas strictement besoin d'être défini, mais mon serveur domotique, Domoticz, est plutôt pointilleux sur le temps, donc encore une fois, cela vaut la peine de définir cette valeur correctement. Trouvez simplement une ville qui se trouve dans le bon fuseau horaire. Puisqu'un clavier ne sera jamais connecté au Pi, il était inutile de changer la disposition du clavier même si je n'utilise pas la disposition QWERTY.
Si le Pi peut être connecté au réseau local avec un câble Ethernet, il n'est pas nécessaire de configurer l'interface Wi-Fi à ce stade. Cependant, dans mon cas, il est beaucoup plus simple d'activer le Wi-Fi avant le premier démarrage. Bien entendu, le nom du réseau Wi-Fi (SSID
) et le mot de passe corrects doivent être saisis si vous utilisez une connexion sans fil. N'oubliez pas de définir le champ Wifi country
. Ce code définit les canaux (fréquences radio) à utiliser qui ne sont pas tous les mêmes dans tous les pays.
Enfin, il est essentiel que SSH soit activé dans un système sans tête, sinon il n'y aura aucun moyen d'accéder au Pi. Gardez une trace du mot de passe, car le Pi sera un presse-papiers s'il est perdu.
Écrire le système d'exploitation
Une fois le système d'exploitation et le périphérique de stockage définis dans Imager, l'option ÉCRIRE est activée. Cliquez sur ce bouton, confirmez qu'il faut continuer (et ainsi perdre tout contenu déjà enregistré sur le périphérique de stockage) et attendez que l'utilitaire ait terminé de copier l'image sur la carte SD.
Démarrage initial
Il est maintenant possible de démarrer le Pi avec son nouveau système d'exploitation. Éjectez en toute sécurité la carte SD du lecteur de système bureau, puis placez-la dans le lecteur SD du Raspberry Pi. Si la connexion au réseau local n'est pas sans fil, il faut brancher l'appareil au réseau avec un câble Ethernet. Allumez le Pi et laissez-le terminer sa séquence de démarrage. N'oubliez pas que le premier démarrage prendra plus de temps que d'habitude, car le Pi effectuera des tâches de maintenance ponctuelles, telles que l'extension du système de fichiers. Il est donc préférable d'attendre que la DEL verte ne soit plus continuellement active et que la LED rouge soit allumée en continu avant d'essayer de se connecter à l'appareil.
Si vous utilisez un ordinateur de bureau ou un portable Linux ou MAC, il sera possible d'obtenir une réponse du Pi avec un ping
adressée à nom d'hôte local. Si vous utilisez une version récente de Windows 10, vous pouvez faire presque la même chose, mais consultez la discussion ci-dessous pour plus de détails sur ce système d'exploitation.
Ce ping réussi prouve que le Pi s'est connecté au réseau local (qu'importe qu'il s'agisse d'une connexion filaire ou sans-fil) et révèle son adresse IP. Par conséquent, il est désormais possible d'ouvrir une session SSH avec le PI en utilisant soit l'adresse IP, soit, comme indiqué ci-après, en utilisant le nom d'hôte.
Dans les versions récentes de Windows 10 Pro, la procédure est presque exactement la même, la seule différence est que l'option -c
danse le commande count ne doit pas être définie.
Quel mot de passe faut-il donner ? Si le Raspberry Pi est connecté par Wi-Fi au réseau local, le mot de passe doit être celui explicitement entré dans les options avancées d'Imager. Si le Wi-Fi n'a pas été activé et que le Pi est connecté au réseau local avec un câble Ethernet, le mot de passe par défaut doit être utilisé, soit raspberry
.
On appréciera grandement Raspberry Pi Imager pour cette démarche tellement simple comparée aux nombreuses approches longues et pas entièrement satisfaisantes pour faire le même type de chose comme décrit dans mes billets précédents. Parfois, les choses tournent mal. Les deux sections suivantes fournissent des informations sur ce qui pourrait être la cause des problèmes.
Anciennes versions de Windows 10
Si vous utilisez un ordinateur de bureau ou portable Windows 10 et que ping
ne trouve pas le Raspberry Pi comme indiqué ici :
alors le système d'exploitation doit être mis à jour. La prise en charge native du protocole Multicast DNS (mDNS) n'a été ajoutée à Windows que très récemment, dans la version 10.0.19041 je crois. D'ailleurs, je ne sais pas si la version la plus récente de Windows 10 Home supporte mDNS, je n'ai testé qu'avec Windows Pro.
S'il n'est pas possible ou pratique de mettre à jourWindows, alors il faudra se connecter au Raspberry Pi avec son adresse IP au lieu de son nom d'hôte. Il existe plusieurs façons d'obtenir cette adresse IP, telles que la vérification du site d'administration Web du routeur pour obtenir la liste des appareils connectés ou l'utilisation d'un scanneur IP. Notez que les 3 premiers octets de l'adresse MAC du Raspberry Pi Ethernet et des interfaces sans fil sont toujours b8:27:eb
. Le fichier batch suivant exploite ce fait lorsqu'il tente d'afficher l'adresse IP de tous les Raspberry Pi connectés à un réseau local.
Le script batch peut être téléchargé avec le lien suivant : findrpis.bat.
Puisque le routeur attribue des adresses IP dynamiques dans la plage 192.168.1.100 à 192.168.1.200 sur mon réseau local, il est plus rapide d'analyser que cette plage, puis afficher tous les périphériques entrés dans la table ARP avec une adresse MAC qui correspond à un Raspberry Pi.
Selon le script, seuls deux appareils devaient faire l'objet d'une enquête. Sachant que 192.168.1.114
correspondait à un Pi déjà en place, il ne restait qu'à se connecter au Pi en utilisant l'autre adresse IP.
La discussion sur le mot de passe correct s'applique également ici : utilisez raspberry
si le Pi est câblé au réseau local ou utilisez le mot de passe défini si la connexion se fait via un point d'accès Wi-Fi. Même si l'adresse IP correcte est utilisée, il peut ne pas être possible d'ouvrir une session SSH ou il peut y avoir des complications lors de la connexion initiale, comme expliqué dans les deux sous-sections suivantes.
Complications possibles lors de la connexion
Si une connexion SSH a déjà été établie avec la même adresse IP que celle du Pi, le client ssh
se plaindra et demandera confirmation comme indiqué ci-dessous.
Quittez et ouvrez une nouvelle session SSH à l'aide de l'adresse IP : ssh pi@192.168.1.139 et suivez une procédure similaire pour que la clé associée à l'adresse corresponde à celle qui est dorénavant associée au nom d'hôte. Lisez attentivement le message affiché, car il peut suggérer d'utiliser ssh-keygen
pour supprimer du fichier d'hôtes connus (~./ssh/known_hosts
)l'ancienne clé associée à l'adresse IP.
Si une autre machine était nommée damus
, le client ssh
se plaindra encore plus et il sera nécessaire de supprimer l'ancienne clé avec ssh-keygen
avant qu'une session SSH puisse être ouverte. En tout cas, le long message affiché par ssh
dira précisément ce qu'il faut faire.
Une fois résolus ces problèmes de conflits de clés SSH, l'ouverture d'une session SSH consistera simplement à saisir le mot de passe.
Échecs possibles
Si ping
a rejoint le Pi, mais qu'il était impossible d'ouvrir une session SSH, alors SSH n'était probablement pas correctement activé dans les options avancées
d'Imager. Si le Pi a demandé le mot de passe de l'utilisateur, mais que la connexion a échoué, alors le nom d'utilisateur a été mal saisi (il doit être pi
en minuscule) ou le mot de passe saisi ne correspond pas à la valeur donnée dans les options avancées
. Selon toute vraisemblance, la solution la plus simple consiste à recopier le système d'exploitation sur la carte SD, en faisant très attention à activer SSH et à enregistrer le mot de passe utilisateur pour pi
.
Si ping
ne peut obtenir de réponse du Raspberry Pi, vérifiez le nom d'hôte. N'oubliez pas que s'il existe déjà un dispositif sur le réseau local avec le même nom d'hôte, le nom d'hôte du nouveau Raspberry Pi sera modifié pour éviter un conflit de nom. En d'autres mots, si damus
est le nom d'hôte d'un autre appareil déjà branché au réseau local, le Raspberry Pi se verrait attribué un nom semblable à damus-2.local
. Malheureusement, le Raspberry Pi ne s'annonce pas, ce qui signifie qu'il ne pourra pas être retrouvé avec la commande avahi-browse --all
.
Il se peut que ping
ne fonctionne pas parce que les informations d'identification Wi-Fi ont été incorrectement spécifiées dans les options avancées
d'Imager de sorte que le Raspberry Pi ne s'est jamais connecté au réseau Wi-Fi. Dans ce cas, essayez de le connecter au réseau local avec un câble Ethernet. En supposant que SSH soit correctement activé dans les options avancées, il devrait alors être possible d'ouvrir une session SSH et de corriger les informations d'identification Wi-Fi avec l'utilitaire raspi-config
. Je n'ai aucune idée du mot de passe qui fonctionnera dans ce cas.
Si un adaptateur USB Wi-Fi est utilisé sur un Raspberry Pi qui n'a pas de capacité Wi-Fi intégrée, il est alors possible que la nouvelle version de Raspberry Pi OS ne prenne pas en charge celui-ci. La seule solution dans ce cas est d'essayer avec un adaptateur plus récent en espérant qu'il soit pris en charge par le système d'exploitation ou de connecter le Pi au réseau local avec un câble Ethernet. Dans ce dernier cas, il est possible que les pilotes de l'ancien adaptateur puissent être obtenus sur Internet (voir USB Wi-Fi Dongle dans mon billet intitulé Various Hardware with Raspbian Buster Lite disponible en anglais seulement).
Enfin n'écartez pas la possibilité que la carte SD soit défectueuse. Essayez de copier l'image du système d'exploitation sur une autre carte SD. Il est possible de tester des cartes SD (voir Cartes micro SD dans mon billet intitulé Nouveau matériel: cartes micro SD, HAT Pi ReSpeaker 2-Mics et routeur Xiaomi 3G.
Modifier le mot de passe et le nom d'utilisateur
La première chose à faire devrait être de changer le mot de passe de l' utilisateur pi
s'il est actuellement défini sur la valeur par défaut raspberry
. Cela peut être fait avec l' raspi-configutilitaire.
Sélectionnez 1 System Options - Configure system settings
dans le premier menu puis S3 Password -; Change password for 'pi' user
dans le deuxième menu pour changer le mot de passe. Il est en fait tout aussi simple de changer directement le mot de passe.
Pour plus de sécurité, ce n'est pas une mauvaise idée de changer l'utilisateur par défaut. Dans le passé, j'ajoutais simplement un nouvel utilisateur et supprimais éventuellement l'utilisateur par défaut pi
. Mais c'était une approche aléatoire qui signifiait généralement qu'il fallait trouver de quel groupe nécessaire n'était pas membre le nouvel utilisateur lorsque quelque chose de nouveau ne fonctionnait pas. On retrouve dans Changing your Username une procédure pour modifier le nom d'utilisateur. Au lieu de suivre ces étapes recommandées, j'ai suivi les conseils de Jim McDonnell dans l'article How to Rename the Default Raspberry Pi User. Notez la description qui suit comporte des modifications pour éviter quelques messages d'erreur qui se produisent dans la version Lite du système d'exploitation Raspberry Pi OS. Voici donc les étapes dans les moindres détails.
Créer un nouvel utilisateur (temporaire)
Connectezs-vous en tant que safeuser
et vérifiez son identifiant
Créer une sauvegarde des fichiers sur le point d'être modifiés
Changer le nom d'utilisateur par défaut pi
à nostra
dans tous les fichiers pertinents
Renommez le répertoire personnel de pi
et créez un lien symbolique vers /home/pi
Ce lien symbolique de home/pi
vers home/nostra
est juste pour éviter un problème avec les scripts téléchargés qui s'attendent à trouver quelque chose dans le fichier /home/pi
.
Connectez-vous avec le nouveau nom d'utilisateur
Il est possible de supprimer l'utilisateur safeuser
si ce compte n'est pas utilisé.
J'ai préféré laisser le compte en place dans l'éventualité qu'il devienne impossible d'ouvrir une session SSH en tant que nostra
. Peut-être qu'en ouvrant une session SSH en tant que safeuser
il serait alors possible de réparer les pots cassés.
Mettre à niveau le système d'exploitation
Le système d'exploitation doit être mis à niveau pour garantir que la dernière version de tous les paquets installés est utilisée.
Adresses IP statiques
Ce n'est pas strictement nécessaire, mais il est fortement recommandé de définir des adresses IP statiques pour les interfaces réseau qui seront utilisées. Rappelons que Raspberry Pi sera un système sans tête hébergeant des services comme Domoticz un système domotique. Or son script d'installation dit :
Domoticz est un SERVEUR donc il a besoin d'une ADRESSE IP STATIQUE pour fonctionner correctement.
Je ferai deux remarques avant de montrer comment affecter des adresses IP statiques.
- Assurez-vous absolument que l'adresse statique sur le point d'être attribuée au Raspberry Pi n'est pas utilisée par un autre appareil connecté au réseau local.
- Assurez-vous absolument que l'adresse statique sur le point d'être attribuée au Raspberry Pi n'est pas utilisée par un autre appareil connecté au réseau local.
Le corollaire, c'est que l'adresse statique doit être choisie en dehors de la plage d'adresses IP dynamiques utilisée par le serveur DHCP qui sera pour la plupart le routeur ou la passerelle fourni par le fournisseur d'accès Internet. Il est préférable de faire tout cela dans le routeur/passerelle. Voici, en gros, comment il faut procéder :
- Assurez-vous qu'il existe une plage d'adresses IP qui ne peuvent pas être attribuées aux dispositifs sur le réseau par le serveur DHCP. Sur mon routeur, cela se fait en définissant l'IP DHCP du début et l'IP de fin sur
192.168.1.100
et192.168.1.200
. Ainsi les adresses IP de192.168.1.1
à192.168.1.99
puis de192.168.1.201
à192.168.1.254
pourront être statiques. - Attribuez une adresse IP statique au PI en utilisant l'adresse MAC de ce dernier. Dans mon routeur, je peux accéder à une page de
réservations DHCP
qui affiche tous les clients connectés. En trouvant le Raspberry Pi dans cette liste, je peux cliquer sur un bouton qui ajoute l'appareil à une liste de clients avec une adresse réservée, puis je peux manuellement édité l'adresse IP réservée en saisissant l'adresse IP statique souhaitée.
Il ne sert à rien d'être plus précis sur la façon de procéder, chaque routeur ayant des procédures différentes. Néanmoins, il faut vraiment essayer de le faire, car c'est totalement transparent. En ce qui concerne le Pi, il obtient une adresse IP dynamique de la manière habituelle chaque fois qu'il démarre. Il se trouve que ce sera toujours la même adresse (statique).
Si, pour une raison quelconque, le serveur DHCP ne peut pas attribué une adresse IP fixe au Raspberry Pi, alors on peut configurer le Raspberry Pi pour utiliser une adresse IP donnée que mon routeur appellera une adresse IP autoattribuée. L'adresse statique d'une interface réseau est définie dans le fichier de configuration du service dhcpcd
. J'ai utilisé l'éditeur nano
du Raspberry Pi pour ajouter quatre lignes à la fin de ce fichier définissant l'adresse statique à attribuer à l'interface Wi-Fi.
Bien entendu, ces valeurs devront être ajustées en fonction du sous-réseau IP du réseau local et de l'adresse IP du routeur/passerelle. Si vous n'êtes pas sûr de l'adresse IP de la passerelle et de la taille du masque de bits de sous-réseau (ce /24
après l'adresse IP statique), essayez d'exécuter la commande suivante
Nous pouvons voir que la route par défaut de l'interface wlan0
(c'est-à-dire l'interface Wi-Fi) est 192.168.1.1
qu'on affecte au champ static routers
dans le fichier de configuration. La ligne suivante indique que le sous-réseau est 192.168.1.0/24
avec un masque de sous-réseau de 24 bits (c'est-à-dire 255.255.255.0).
Les serveurs de noms de domaine à utiliser peuvent être un peu délicat à définir. Comme indiqué ci-dessus, les serveurs DNS publics de Google (principaux et de sauvegarde) sont explicitement sélectionnés. Certains peuvent préférer les serveurs DNS recommandés par leur fournisseur d'accès Internet (FAI). Dans ce cas, l'adresse IP statique attribuée à domain_name_servers
doit être la même que celle attribuée à static routers
. Certaines précautions doivent être prises ici, car l'utilisation de l'adresse IP de la passerelle à des fins DNS peut ne pas fonctionner en fonction des paramètres du routeur. J'ai appris à la dure qu'en modifiant les paramètres du serveur DHCP du routeur pour qu'il fournisse aux clients les adresses des serveurs DNS Google, puis définir le static domain_name_servers
sur l'IP du router, soit 192.168.1.1
ne fonctionnera pas. En y réfléchissant, j'ai réalisé que le routeur transmet les adresses des serveur DNS à un appareil uniquement lorsqu'il demande une adresse IP dynamique. Cela ne se produit pas lorsque le Raspberry PI a une adresse IP statique. Vous saurez très vite qu'il y a un problème de serveur DNS si une requête ping vers Google ne fonctionne pas (c'est-à-dire si aucune réponse n'est obtenue avec la commande suivante : ping google.com).
Si le Pi était connecté par Ethernet au réseau local, il faut changer la première ligne pour identifier cette interface réseau :
et puis le reste de l'entrée pourrait être comme avant.
Il est certainement possible d'attribuer des adresses IP statiques aux interfaces Ethernet et sans fil, bien que les adresses doivent être différentes. Franchement, je ne vois pas de raison de le faire, car si une connexion filaire plus rapide et plus fiable est possible, je l'utiliserais plutôt qu'une connexion Wi-Fi. Ma préférence est de laisser la configuration de l'interface Ethernet inchangée. Par défaut, cela signifie que lorsque le Pi est démarré, une tentative sera effectuée pour obtenir une adresse IP dynamique du serveur DHCP du réseau pour l'interface Ethernet. Si, pour une raison quelconque, le réseau Wi-Fi devenait indisponible, je pourrais toujours déplacer le Raspberry Pi suffisamment près du routeur ou d'un commutateur pour le connecter avec un câble Ethernet. Il sera alors possible d'ouvrir une session SSH filaire, puis réparer le Wi-Fi.
Suppléments
Bien que ce qui précède constitue une configuration minimale pour un système Raspberry Pi sans tête, il y a d'autres étapes que j'aime suivre.
Configuration matérielle
Lancez maintenant l'utilitaire de configuration.
C'est l'écran d'ouverture de la configuration.
Pour sélectionner une option dans le menu, utilisez touches du curseur ↑ et ↓. Sélectionnez le choix en surbrillance en appuyant sur la touche ↲ ou Enter. La sélection peut également être effectuée en sélectionnant <Select>
en bas, puis en appuyant sur la touche Enter ou <espace>Entrée. On naviguez entre le menu d'options en haut de la fenêtre aux choix du bas de la fenêtre avec la touche Tab key (⇥). Je suggère que les modifications suivantes soient apportées.
- 3 Interface Options / P2 SSH:
si ce n'est pas déjà fait avec Imager choisissez <Oui> pour activer le serveur SSH. Bien sûr, si vous avez accédé au Pi à l'aide d'une connexion SSH, celle-ci est déjà activée. Je recommande d'activer SSH même si la version de bureau complète du système d'exploitation est installée et qu'un clavier, un moniteur et une souris sont connectés au Raspberry Pi. - 5 Localisation Options / L2 Timezone:
si ce n'est pas déjà fait avec Imager sélectionnez votre continent ou votre région, puis sélectionnez votre ville ou une ville à proximité dans le même fuseau horaire. Comme il s'agit d'un système sans tête, il n'y a pas de réel avantage à modifier les paramètres régionaux ou la disposition du clavier. Ceci étant dit, si j'avais changé la langue au français (L1 Locale Configure language and regional settings) je pourrais afficher les dialogues avec le Pi en français. - 4 Performance Options / P2 GPU Memory:
si ce Pi sera utilisé comme serveur, il est logique d'allouer le moins de mémoire possible à l'unité de traitement graphique. Donc on devrait diminuer cette mémoire à 16 M d'octets.
On peut également modifier le mot de passe de l'utilisateur, le nom d'hôte et les paramètres Wi-Fi dans 1 System Options, mais tout cela est probablement configuré correctement à ce stade.
Si suggéré, redémarrez, puis reconnectez-vous au Raspberry Pi après un certain temps. Même si un clavier et un moniteur sont connectés au Raspberry Pi, c'est une bonne idée d'apprendre à se connecter via SSH à un Pi qui sera utilisé comme serveur.
Désactiver IPv6
Selon toute vraisemblance, la pile IP version 6 s'exécute sur le Raspberry Pi. Cela se vérifie facilement.
La présence d'adresses sous la rubrique inet6
pour n'importe quelle interface indique qu'IPv6 est activé. Si vous souhaitez utiliser uniquement IP version 4, alors IPv6 doit être désactivé, ce qui se fait facilement en ajoutant la ligne suivante
dans le fichier de configuration de sysctl
. Vous aurez besoin des privilèges root pour cela :
Bien que l'émission de la commande sudo sysctl -p mette immédiatement à jour les paramètres du noyau Linux, je préfère redémarrer le Pi, puis ouvrir une nouvelle session, puis exécuter ifconfig pour vérifier que les adresses inet6
n'apparaissent plus.
Ceci n'est pas un plaidoyer pour désactiver version 6 de IP sur le Pi. C'est simplement le moyen le plus simple que j'ai trouvé pour le faire si cela s'avère utile plus tard. Merci à Andrei Bosco B. Torres (andreibosco) pour Disabling IPv6 un gist
où l'on trouve cette information. Plus de détails sont disponibles dans un article de John sur How to Raspbery intitulé How to Really Disable IPv6 on Raspberry PI.
Signalement mDNS
Ping
a été utilisé pour vérifier l'occurrence du démarrage initial du Raspberry Pi. Sur un système Linux, l'outil Zeroconf avahi-resolve
aurait pu être utilisé.
Répétez la commande pour obtenir l'adresse IPv4 si une adresse IPv6 est affiché.
La même chose peut être effectuée sur un système macOS ou sur un système Windows sur lequel Bonjour est installé.
Comme mentionné précédemment, cela ne fonctionnera pas si le nom d'hôte est incorrect et pourrait ne pas fonctionner s'il existait plusieurs dispositifs avec le même nom d'hôte sur le réseau local. On pourrait essayer de découvrir le Pi à l'aide de l'utilitaire avahi-browse
, cependant, par défaut, le Raspberry Pi ne s'annonce pas. S'il est possible d'ouvrir une session avec le Pi, alors changer une ligne dans le fichier de configuration de avahi
activera le signalement mDNS
.
Après avoir redémarré le service avahi
du Pi
et il signalera sa disponibilité en tant que workstation et pourra donc être trouvé avec avahi-browse
.
Le Pi n'apparaît que comme un poste de travail. Si vous souhaitez qu'il se présente comme un terminal SSH capable de transférer des fichiers avec le protocole SFTP, créez un fichier XML avec les informations nécessaires.
Une fois le fichier créé et avahi-daemon
redémarré, le Pi s'affichera trois fois :
Bien sûr, on peut supprimer le service _ssh._tcp
ou _sftp-ssh._tpc
dans le fichier XML si on le souhaite.
Je ne connais pas d'équivalence à avahi-browse --all
dans l' implémentation AppleApple de mdns, mais la navigation par service est certainement possible.
Encore une fois, ce n'est pas une recommandation. Si ping
et ssh
n'ont aucun problème à atteindre le Pi en utilisant son non d'hôte .local
, il y a peu de raisons de mettre en œuvre le signalement mDNS. Mais s'il existe de nombreux dispositifs sur le réseau local, il peut être judicieux de l'implémenter au cas où des noms d'hôte en double seraient créés.
Serveur de journalisation sur réseau
Le Raspberry Pi peut être utilisé comme serveur de journaux réseau. Je fais cela pour tirer parti des capacités de journalisation de tous les appareils IoT basés sur Tasmota (voir Serveur de journalisation sur Raspbian et journalisation à distance avec Tasmota). Pour ce travail, le module UDP du serveur de log (rsyslog
) doit être activé.
Environnements virtuels Python
Je préfère créer des environnements virtuels Python 3 séparés pour contenir divers scripts Python. Ceci est fait pour éviter de casser un script lors de la mise à jour d'une bibliothèque lorsqu'une version plus récente est requise par un autre script (voir Environnements virtuels Python 3). Quelques paquets doivent être installés pour créer des environnements virtuels.
J'ai écrit un script bash
qui automatise la création d'environnements virtuels qu'on peut facilement télécharger. Après il faut en fera un fichier exécutable.
Créer un environnement virtuel nommé disons penv
sera alors aussi simple que
En fait, maintenant que .local/bin
a été créé, il sera automatiquement ajouté au chemin de recherche à chaque démarrage d'une session. Donc un simple mkvenv penv suffira.
Configuration de l'interpréteur de commandes
Vérifions qu'il est exacte que .local/bin
sera ajouté à la variable d'environnement PATH
lors de l'ouverture d'une session sur le Pi.
Le fichier doit contenir les éléments suivants.
Si ce n'est pas le cas, ajoutez ces lignes au fichier.
Suite à une suggestion d'AndyG, j'ai ajouté une fonction shell et un alias dans mon fichier de configuration de bash
pour simplifier l'activation et la désactivation d'un environnement virtuel Python.
Voici un exemple où deux environnements virtuels sont créés simultanément dans un sous-répertoire nommé test
dans le répertoire personnel de l'utilisateur, puis où chacun a été activé et désactivé à son tour. Notez que le sous-répertoire test
qui n'existait pas a été créé par le script mkvenv
Notez que la macro ve
prend le chemin relatif ou absolu vers l'environnement virtuel qu'on veut activer.
Sécurité additionnelle
/etc/pam.d/common-auth
, causait des problèmes d'autorisation mineurs pour le chien de garde de Domoticz qui sera présenté dans la prochaine partie de ce guide.
Il n'y a pas de recette universellement agréée pour accroitre la sécurité d'un serveur Linux. Certes, la modification du nom d'hôte, du mot de passe et du nom d'utilisateur par défaut (déjà fait ci-dessus) est souvent mentionnée. On suggère aussi l'utilisation de Fail2Ban qui est un utilitaire qui analyse les fichiers journaux pour identifier puis bloquer les adresses IP après trop d'échecs de mot de passe. Fail2Ban est un puissant script Python capable de surveiller l'accès avec les protocoles SSH, HTTP, HTTPS et autres. Cependant, à ce stade, seul sshd
est activé sur le Pi et la fonction de blocage équivalente peut être effectuée avec le gestionnaire de connexion intégré à systemd
.
Il est vraiment très important d'avoir au moins deux comptes d'utilisateurs membres du groupe sudo
avant d'essayer de suivre ce qui suit. Si vous avez modifié l'utilisateur par défaut comme décrit ci-dessus dans la section Modifier le mot de passe et le nom d'utilisateur par défauf et que vous n'avez pas supprimé le compte d'utilisateur temporaire (nommé saveuser
) alors vous pouvez continuer. Sinon, créez à nouveau le compte d'utilisateur et ajouter-le au groupe sudo
comme indiqué ici.
Juste pour prouver qu'il y a plusieurs façons de faire les choses, j'ai utilisé adduser
au lieu de usermod
pour ajouter l'utilisateur au groupe sudo
.
Redémarrez et connectez-vous avec le nouveau compte d'utilisateur et faites des choses qui nécessitent des privilèges root
(comme la mise à niveau du système d'exploitation) pour tester que le nouveau compte fonctionne.
Comme d'habitude, un fichier de configuration doit être modifié pour verrouiller un compte utilisateur après un nombre spécifié d'échecs consécutifs de tentatives de connexion SSH. Le fichier, nommé sshd
, réside dans le répertoire /etc/pam.d/
qui contient de nombreux fichiers de configuration des modules d'authentification enfichables PAM (Pluggable Authentication Modules).
-B
?
Voir
Voici le début du fichier sshd
où l'on peut voir les ajouts à faire en gras.
Apparemment, le redémarrage du service sshd
activera ces modifications lors de l'ouverture d'une session SSH, mais comme d'habitude, je préfère redémarrer pour être sûr que les modifications fonctionneront. Ci-dessous, je vais montrer comment j'ai testé cela. Soyez prudent en suivant cette démarche, il y a trois sessions impliquées. Essayons d'abord de nous connecter en tant que safeuser
, mais avec le mauvais mot de passe, tout comme quelqu'un qui lance une attaque par force brute essaierait de nombreux mots de passe.
Comme on peut le voir, il a été impossible d'ouvrir une session avec le bon mot de passe au troisième essai à cause des deux tentatives précédentes avec le mauvais mot de passe. Le verrouillage durera cinq minutes. Vérifions l'état du compte utilisateur pendant cette période à partir d'un compte utilisateur évidemment.
On peut aussi examiné le journal auth.log
.
L'utilisateur nostra
peut restaurer la possibilité de se connecter immédiatement pour les comptes verrouillés comme safeuser
en réinitialisant le compteur d'échecs de connexion de cet utilisateur.
Tout ceci n'est qu'une mesure temporaire. En fin de compte, une fois le serveur pleinement opérationnel, j'ai l'intention de désactiver l'authentification par mot de passe lors de l'ouverture de sessions SSH et de n'autoriser que l'authentification basée sur les clés des utilisateurs connus (voir Improving SSH Security).
Voici quelques lectures supplémentaires sur la sécurité d'un Pi. Raspberry Pi Hardening Guide de Chris Goff et Security Setup & Hardening of Raspberry Pi OS {Buster} de Bryce W. Bounds. Les deux proposent une installation fail2ban pour empêcher les attaques de connexion par force brute. Si vous décidez d'emprunter cette voie au lieu de ce qui précède, je vous suggère également de lire l'article Installing fail2ban dans la documentation Raspberry Pi.