2022-02-17
md
Configuration d'un Raspberry Pi en tant qu'ordinateur sans tête (septembre 2021)
Domotique sur un Raspberry Pi-> <-Installation and Configuration of Raspbian Buster Lite
 Ébauche d'une première partie d'un guide projeté sur plusieurs parties 

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

  1. Préambule pour les nouveaux visiteurs du site
    1. Ouvrir un terminal
    2. Présentation des sessions
  2. Le Raspberry Pi comme ordinateur sans tête
  3. Obtenir l'utilitaire Raspberry Pi Imager
  4. Copier le système d'expoitation Raspberry Pi OS vers une carte SD
    1. Choisir le système d'exploitation
    2. Choisir le périphérique de stockage
    3. Définir les options avancées
    4. Écrire le système d'exploitation
  5. Démarrage initial
    1. Anciennes versions de Windows 10
    2. Complications possibles lors de la connexion
    3. Échecs possibles
  6. Modifier le mot de passe et le nom d'utilisateur
  7. Mettre à niveau le système d'exploitation
  8. Adresses IP statiques
  9. Suppléments
    1. Configuration matérielle
    2. Désactivé IPv6
    3. Signalement mDNS
    4. Serveur de journalisation sur réseau
    5. Environnements virtuels Python
    6. Configuration de l'interpréteur de commandes
    7. Sécurité additionnelle

Préambule pour les nouveaux visiteurs du site toc

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 toc

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 :

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 toc

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.

michel@hp:~$ ping damus.local -c 4 PING damus.local (192.168.1.139) 56(84) bytes of data. 64 octets de 192.168.1.139 (192.168.1.139) : icmp_seq=1 ttl=64 temps=147 ms ... --- statistiques ping damus.local --- 4 paquets transmis, 4 reçus, 0 % paquets perdus, temps 3005 ms rtt min/avg/max/mdev = 4.492/40.304/147.138/61.680 ms

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 :

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

michel@hp:~$ ping damus.local -c 4Entrée

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.

C:\Users\michel>ping damus.local Pinging damus.local [192.168.1.139] with 32 bytes of data: Reply from 192.168.1.139: bytes=32 time=71ms TTL=64 ... Ping statistics for 192.168.1.139: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 5ms, Maximum = 71ms, Average = 22ms

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 toc

É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.

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.

Qu'est-ce qu'une session à distance ? Voir

Obtenir l'utilitaire Raspberry Pi Imager toc

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'option Ouvrir avec Installateur de paquets GDebi

Ouverture du paquet Pi Imager avec l'installateur de paquets GDebi dans le gestionnaire de fichiers Caja

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.

Installation de Pi Imager avec l'installateur de paquets GDebi

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 toc

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 saisir imager 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'utilitaire run (cliquer avec le bouton droit de la souris sur le menu Démarrer et choisir l'option run ou appuyez sur le raccourci clavier WindowR) puis entrez rpi-imager dans la boîte de saisie Ouvrir. 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 taper Imager dans le champ de recherche Spotlight. Il suffit de sélectionner Raspberry Pi Imager.

Peu importe comment le programme est lancé, voici son écran de démarrage.

Écran d'acceuil de Raspberry Pi Imager

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 toc

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).

Menu de sélection du système d'exploitation à installer

puis de sélectionner le système d'exploitation Lite dans l'écran suivant.

Sélection de Raspberry Pi OS Lite pour installation à la volée

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.

AVERTISSEMENT

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 MB
qui 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.

Une décision s'impose : obtenez la dernière version Bullseye de Raspberry Pi OS Lite et acceptez qu'il y aura quelques pépins ou utilisez la version Buster du système d'exploitation pour le moment. Notez que les deux versions sont construites sur le même noyau Linux. Parce que j'attends toujours au moins une première révision avant de passer à une nouvelle version de Raspberry Pi OS (ou Raspbian comme on l'appelait auparavant), je n'ai pas encore beaucoup travaillé avec Bullseye. Il me faudra un certain temps avant de mettre à jour ce guide.

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.

Sélection d'une image d'un système d'exploitation téléchargée pour la copier sur une carte SD avec Pi Imager

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 toc

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.

Sélection du périphérique de stockage sur lequel copier l'iamge du système d'exploitation

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 toc

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).

Options avancées dans Pi Image

Comme on peut le voir ci-dessus, les options suivantes ont été définies.

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 toc

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 toc

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.

michel@hp:~$ ping damus.local -c 4 PING damus.local (192.168.1.139) 56(84) bytes of data. 64 octets de 192.168.1.139 (192.168.1.139) : icmp_seq=1 ttl=64 temps=147 ms 64 octets de 192.168.1.139 (192.168.1.139) : icmp_seq=2 ttl=64 temps=4.49 ms 64 octets de 192.168.1.139 (192.168.1.139) : icmp_seq=3 ttl=64 temps=4.82 ms 64 octets de 192.168.1.139 (192.168.1.139) : icmp_seq=4 ttl=64 temps=4.77 ms --- statistiques ping damus.local --- 4 paquets transmis, 4 reçus, 0 % paquets perdus, temps 3005 ms rtt min/avg/max/mdev = 4.492/40.304/147.138/61.680 ms

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.

michel@hp:~$ ssh pi@damus.local Warning: Permanently added the ECDSA host key for IP address '192.168.1.139' to the list of known hosts. nostra@damus.local's password: ********** Linux damus 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Aug 20 18:56:27 2021 from 192.168.1.100

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.

Microsoft Windows [Version 10.0.19041.1165] (c) Microsoft Corporation. All rights reserved. C:\Windows\system32>ping damus.local Pinging damus.local [192.168.1.139] with 32 bytes of data: Reply from 192.168.1.139: bytes=32 time=1ms TTL=64 Reply from 192.168.1.139: bytes=32 time=4ms TTL=64 Reply from 192.168.1.139: bytes=32 time=5ms TTL=64 Reply from 192.168.1.139: bytes=32 time=6ms TTL=64 Ping statistics for 192.168.1.139: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 1ms, Maximum = 6ms, Average = 4ms C:\Windows\system32>ssh pi@damus.local The authenticity of host 'damus.local (192.168.1.139)' can't be established. ECDSA key fingerprint is SHA256:8oqRJhXo+/kL+Oo7r1KEQXSgmtkSy3UyO2H8K+Ko7bb. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'damus.local,192.168.1.139' (ECDSA) to the list of known hosts. nostra@damus.local's password: ********** Linux damus 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.

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 toc

Si vous utilisez un ordinateur de bureau ou portable Windows 10 et que ping ne trouve pas le Raspberry Pi comme indiqué ici :

C:\Users\michel\Documents>ping damus.local La requête Ping n'a pas pu trouver l'hôpte damus.local. Verfiez le nom et essayez de nouveau.

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.

@echo off IF "%~1"=="-?" GOTO usage IF "%~1"=="?" GOTO usage IF "%~1"=="/?" GOTO usage IF "%~1"=="-h" GOTO usage IF "%~1"=="h" GOTO usage IF "%~1"=="/h" GOTO usage IF "%~3"=="" GOTO defaultsub set sub=%~3 GOTO subdone :defaultsub set sub=192.168.0 :subdone IF "%~2"=="" GOTO defaultlast set /A last=%~2 GOTO lastdone :defaultlast set /A last=254 :lastdone IF "%~1"=="" GOTO defaultfirst set /A first=%~1 GOTO firstdone :defaultfirst set /A first=1 :firstdone FOR /L %%A in (%first%,1,%last%) DO ( ping -n 1 -w 250 %sub%.%%A > NUL @echo pinging %sub%.%%A ) @echo Arp entries for Raspberry Pi's arp -a | findstr b8-27-eb GOTO fini :usage @echo Find Raspberry Pi's connected to a LAN @echo. @echo Syntax @echo %0 [first [last [subnet]]] @echo 'first' and 'last' values of range of IP addresses to ping @echo 'subnet' is the subnet of IP addresses to ping @echo. @echo Examples: @echo %0 @echo Will ping 192.168.0.1 to 192.168.0.254 and then show the relevant arp table @echo In other words the @echo default value of first is 1 @echo default value of last is 254 @echo default value subnet is 192.168.0 @echo. @echo %0 100 200 192.168.1 @echo Will ping 192.168.1.100 to 192.168.1.200 and then show the relevant arp table @echo Note the abscences of a trailing period in the subnet. :fini

Le script batch peut être téléchargé avec le lien suivant : findrpis.bat.

ARP et adresses IP - Comment fonctionne le script Voir

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.

C:\Users\michel\Documents>findrpis 100 200 192.168.1 pinging 192.168.1.100 pinging 192.168.1.101 ... pinging 192.168.1.199 pinging 192.168.1.200 Arp entries for Raspberry Pi's 192.168.1.114 b8-27-eb-11-11-11 dynamic 192.168.1.139 b8-27-eb-22-22-22 dynamic

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.

C:\Users\michel\Documents>ssh nostra@192.168.1.139 nostra@192.168.1.139's password: ********** Linux damus 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Thu Aug 26 20:45:15 2021 from 192.168.1.147

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 toc

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.

michel@hp:~$ ssh pi@damus.local The authenticity of host 'damus.local (192.168.1.139)' can't be established. ECDSA key fingerprint is SHA256:8oqRJhXo+/kL+Oo7r1KEQXSgmtkSy3UyO2H8K+Ko7bb. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'damus.local' (ECDSA) to the list of known hosts. Warning: the ECDSA host key for 'damus.local' differs from the key for the IP address '192.168.1.139' Offending key for IP in /home/michel/.ssh/known_hosts:55 Are you sure you want to continue connecting (yes/no)? yes pi@damus.local's password: ********** Linux damus 5.10.17-v7+ #1414 SMP Fri Apr 30 13:18:35 BST 2021 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. pi@damus:~ $

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.

michel@hp:~$ ssh nostra@192.168.1.139 nostra@192.168.1.139's password: ********** Linux damus 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l ... Last login: Sun Aug 22 18:14:57 2021 from 192.168.1.16

Échecs possibles toc

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 toc

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.

pi@damus:~ $ sudo raspi-config

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.

pi@damus:~ $ passwd Changing password for pi. Current password: ********* New password: yyyyyyyyyy Retype new password: yyyyyyyyyy passwd: password updated successfully

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)

pi@damus:~ $ sudo useradd -m safeuser -s /bin/bash pi@damus:~ $ sudo passwd safeuser New password: xxxxxxxx Retype new password: xxxxxxxx passwd: password updated successfully pi@damus:~ $ sudo usermod -a -G sudo safeuser pi@damus:~ $ grep sudo /etc/group sudo:x:27:pi,safeuser pi@damus:~ $ exit logout Connection to damus.local closed.

Connectezs-vous en tant que safeuser et vérifiez son identifiant

michel@hp:~$ ssh safeuser@damus.local ... safeuser@damus:~ $ id uid=1001(safeuser) gid=1001(safeuser) groups=1001(safeuser),27(sudo)

Créer une sauvegarde des fichiers sur le point d'être modifiés

safeuser@damus:~ $ cd /etc safeuser@damus:~ $ sudo tar -cvf authfiles.tar passwd group shadow gshadow sudoers subuid subgid systemd/system/autologin@.service sudoers.d/010_pi-nopasswd sudoers.d/010_pi-nopasswd [sudo] password for safeuser: xxxxxxxx passwd group shadow gshadow sudoers subuid subgid systemd/system/autologin@.service sudoers.d/010_pi-nopasswd

Changer le nom d'utilisateur par défaut pi à nostra dans tous les fichiers pertinents

safeuser@damus:~ $ sudo sed -i.$(date +'%y%m%d_%H%M%S') 's/\bpi\b/nostra/g' passwd group shadow gshadow sudoers subuid subgid systemd/system/autologin@.service sudoers.d/010_pi-nopasswd safeuser@damus:/etc $ grep nostra /etc/group adm:x:4:nostra dialout:x:20:nostra cdrom:x:24:nostra sudo:x:27:nostra,safeuser audio:x:29:nostra video:x:44:nostra plugdev:x:46:nostra games:x:60:nostra users:x:100:nostra input:x:105:nostra netdev:x:109:nostra

Renommez le répertoire personnel de pi et créez un lien symbolique vers /home/pi

safeuser@damus:/etc $ sudo mv /home/pi /home/nostra safeuser@damus:/etc $ sudo ln -s /home/nostra /home/pi safeuser@damus:/etc $ ls -l /home total 8 drwxr-xr-x 3 nostra nostra 4096 Aug 17 18:15 nostra lrwxrwxrwx 1 root root 12 Aug 20 18:53 pi -> /home/nostra drwxr-xr-x 3 safeuser safeuser 4096 Aug 20 18:24 safeuser michel@hp:~$ safeuser@damus:/etc $ exit logout Connection to damus.local closed.

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

michel@hp:~$ ssh nostra@damus.local Warning: the ECDSA host key for 'damus.local' differs from the key for the IP address '192.168.1.139' Offending key for IP in /home/michel/.ssh/known_hosts:55 Matching host key in /home/michel/.ssh/known_hosts:65 Are you sure you want to continue connecting (yes/no)? yes nostra@damus.local's password: ********** Linux damus 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Aug 20 18:13:24 2021 from 192.168.1.100

Il est possible de supprimer l'utilisateur safeuser si ce compte n'est pas utilisé.

nostra@damus:~ $ sudo userdel safeuser

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 toc

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.

pi@damus:~ $ sudo apt update && sudo apt full-upgrade -y Get:1 http://archive.raspberrypi.org/debian buster InRelease [32.6 kB] ... Fetched 13.5 MB in 13s (1,022 kB/s) Reading package lists... Done Building dependency tree Reading state information... Done 44 packages can be upgraded. Run 'apt list --upgradable' to see them. pi@damus:~ $ sudo apt full-upgrade Reading package lists... Done ... 44 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 146 MB of archives. After this operation, 7,724 kB of additional disk space will be used. ...

À propose de apt, apt-get, update, upgrade, etc. Voir

Adresses IP statiques toc

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.

  1. 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.
  2. 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 :

  1. 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 et 192.168.1.200. Ainsi les adresses IP de 192.168.1.1 à 192.168.1.99 puis de 192.168.1.201 à 192.168.1.254 pourront être statiques.
  2. 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.

nostra@damus:~ $ nano /etc/dhcpcd.conf

# A sample configuration for dhcpcd. # See dhcpcd.conf(5) for details. ... interface wlan0 static ip_address=192.168.1.51/24 static routers=192.168.1.1 static domain_name_servers=8.8.8.8 8.8.8.4

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

nostra@damus:~ $ ip route default via 192.168.1.1 dev wlan0 src 192.168.1.139 metric 303 192.168.1.0/24 dev wlan0 proto dhcp scope link src 192.168.1.139 metric 303

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 :

interface eth0

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 toc

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 toc

Lancez maintenant l'utilitaire de configuration.

pi@raspberrypi:~ $ sudo raspi-config

C'est l'écran d'ouverture de la configuration.

Écran d'ouverture de l'utilitaire raspi-config

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.

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 toc

Selon toute vraisemblance, la pile IP version 6 s'exécute sur le Raspberry Pi. Cela se vérifie facilement.

nostra@damus:~ $ ifconfig ... wlan0: flags=4163<tUP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ... inet6 2618:8abf:d820:c868::9 prefixlen 128 scopeid 0x0<global> inet6 68d8::8821:4b9a:2f6811ab prefixlen 64 scopeid 0x20<link> ...

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

net.ipv6.conf.all.disable_ipv6 = 1

dans le fichier de configuration de sysctl. Vous aurez besoin des privilèges root pour cela :

nostra@damus:~ $ sudo nano /etc/sysctl.conf

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 toc

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é.

michel@hp:~$ avahi-resolve -n damus.local damus.local 192.168.1.139

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é.

MacBook:~ michel$ dns-sd -G v4 damus.local DATE: ---Mon 30 Aug 2021--- 15:42:41.822 ...STARTING... Timestamp A/R Flags if Hostname Address TTL 15:42:41.824 Add 40000002 4 damus.local. 192.168.1.139 120 ^C

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.

nostra@doumus:~ $ sudo nano /etc/avahi/avahi-daemon.conf

... modifiez #publish-workstation=no à publish-workstation=yes ...

Après avoir redémarré le service avahi du Pi

nostra@damus:~ $ sudo systemctl restart avahi-daemon.service

et il signalera sa disponibilité en tant que workstation et pourra donc être trouvé avec avahi-browse.

michel@hp:~$ avahi-browse _workstation._tcp -r ... + enp4s0 IPv4 damus [b8:27:eb:11:11:11] Workstation local ... = enp4s0 IPv4 damus [b8:27:eb:11:11:11] Workstation local hostname = [damus.local] address = [192.168.1.139] port = [9] txt = []

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.

nostra@damus:~$ sudo nano /etc/avahi/services/ssh.service

<?xml version="1.0" standalone="no"?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h - SSH</name> <service> <type>_ssh._tcp</type> <port>22</port> </service> <service> <type>_sftp-ssh._tcp</type> <port>22</port> </service> </service-group>

Une fois le fichier créé et avahi-daemon redémarré, le Pi s'affichera trois fois :

michel@hp:~$ avahi-browse --all ... + enp4s0 IPv4 damus [b8:27:eb:11:11:11] Workstation local ... + enp4s0 IPv4 damus - SSH SSH Remote Terminal local + enp4s0 IPv4 damus - SSH SFTP File Transfer local ...

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.

MacBook:~ michel$ dns-sd dns-sd -B _ssh._tcp Browsing for _ssh._tcp DATE: ---Mon 30 Aug 2021--- 21:32:17.212 ...STARTING... Timestamp A/R Flags if Domain Service Type Instance Name ... 21:32:17.643 Add 2 4 local. _ssh._tcp. damus - SSH ^C MacBook:~ michel$ dns-sd dns-sd -B _workstation._tcp Browsing for _workstation._tcp DATE: ---Mon 30 Aug 2021--- 21:34:15.165 ...STARTING... Timestamp A/R Flags if Domain Service Type Instance Name 21:34:15.604 Add 2 4 local. _workstation._tcp. damus [b8:27:eb:11:11:11] ^C

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 toc

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é.

nostra@goldberg:~/pythons $ sudo nano /etc/rsyslog.conf

# /etc/rsyslog.conf Configuration file for rsyslog. # # For more information see # /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html ################# #### MODULES #### ################# module(load="imuxsock") # provides support for local system logging module(load="imklog") # provides kernel logging support #module(load="immark") # provides --MARK-- message capability # provides UDP syslog reception module(load="imudp") <-- enabled by removing leading '#' input(type="imudp" port="514") <-- enabled by removing leading '#' # provides TCP syslog reception #module(load="imtcp") #input(type="imtcp" port="514")

Journaux sous Linux Voir

Environnements virtuels Python toc

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.

nostra@damus:~ $ sudo apt install python3-dev python3-venv -y Reading package lists... Done ... Need to get 49.8 MB of archives. After this operation, 75.8 MB of additional disk space will be used. ...

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.

nostra@damus:~ $ mkdir -p .local/bin nostra@damus:~ $ wget http://sigmdel.ca/michel/program/python/dnld/mkvenv.ubuntu -O .local/bin/mkvenv nostra@damus:~ $ chmod +x .local/bin/mkvenv

Créer un environnement virtuel nommé disons penv sera alors aussi simple que

nostra@damus:~ $ .local/bin/mkvenv penv creating virtual environment /home/nostra/penv updating virtual environment /home/nostra/penv

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 toc

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.

nostra@damus:~ $ nano .profile

Le fichier doit contenir les éléments suivants.

# if it exists include ~.local/bin in the PATH if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" fi

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.

nostra@damus:~ $ nano .bashrc

... ve() { source $1/bin/activate; } alias ev='deactivate'

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

nostra@damus:~ $ mkvenv test/penv1 test/penv2 creating virtual environment /home/nostra/test/penv1 updating virtual environment /home/nostra/test/penv1 creating virtual environment /home/nostra/test/penv2 updating virtual environment /home/nostra/test/penv2 nostra@damus:~ $ ve test/penv1 (penv1) nostra@damus:~ $ ... (penv1) nostra@damus:~ $ ev nostra@damus:~ $ ve /home/nostra/test/penv2 penv2) nostra@damus:~ $ ... (penv2) nostra@damus:~ $ ev

Notez que la macro ve prend le chemin relatif ou absolu vers l'environnement virtuel qu'on veut activer.

Sécurité additionnelle toc


Des changements importants ont été apportés à cette section parce que la version originale, qui modifiait le fichier de configuration /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.

pi@damus:~ $ sudo useradd -m safeuser -s /bin/bash pi@damus:~ $ sudo passwd safeuser New password: xxxxxxxx Retype new password: xxxxxxxx passwd: password updated successfully safeuser@damus:~ $ sudo adduser safeuser sudo [sudo] password for safeuser: xxxxxxxx Adding user `safeuser' to group `sudo' ... Adding user safeuser to group sudo Done.

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).

nostra@damus:~ $ sudo nano -B /etc/pam.d/sshd

Pourquoi le paramètre -B ? Voir

Voici le début du fichier sshd où l'on peut voir les ajouts à faire en gras.

# PAM configuration for the Secure Shell service # Lock out for 5 minutes anyone (except root) that fails an ssh login 2 times auth required pam_tally2.so onerr=fail deny=2 unlock_time=300 audit # Standard Un*x authentication. @include common-auth ...

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.

michel@hp:~$ ssh safeuser@damus.local safeuser@damus.local's password: <mauvais_mot_de_passe> Permission denied, please try again. safeuser@damus.local's password: <mauvais_mot_de_passe> Permission denied, please try again. safeuser@damus.local's password: <bon_mot_de_passe> safeuser@damus.local: Permission denied (publickey,password).

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.

michel@hp:~$ ssh nostra@damus.local nostra@damus.local's password: xxxxxxxxxxxx Linux damus 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l ... nostra@damus:~ $ sudo pam_tally2 -u safeuser Login Failures Latest failure From safeuser 3 09/22/21 20:00:09 192.168.1.13

On peut aussi examiné le journal auth.log.

nostra@damus:~ $ tail /var/log/auth.log ... Sep 22 20:00:01 domus sshd[1184]: Failed password for safeuser from 192.168.1.13 port 49828 ssh2 Sep 22 20:00:05 domus sshd[1184]: Failed password for safeuser from 192.168.1.13 port 49828 ssh2 Sep 22 20:00:09 domus sshd[1184]: pam_tally2(sshd:auth): user safeuser (1001) tally 3, deny 2 Sep 22 20:00:11 domus sshd[1184]: Failed password for safeuser from 192.168.1.13 port 49828 ssh2 Sep 22 20:00:12 domus sshd[1184]: Connection closed by authenticating user safeuser 192.168.1.13 port 49828 [preauth]

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.

nostra@damus:~ $ sudo pam_tally2 -u safeuser --reset Login Failures Latest failure From safeuser 8 09/04/21 12:14:40 192.168.1..100 nostra@damus:~ $ exit logout Connection to damus.local closed. michel@hp:~$ ssh safeuser@damus.local safeuser@damus.local's password: <correct_password> Linux damus 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l ...

Encore trop de détails ? Voir

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.

Domotique sur un Raspberry Pi-> <-Installation and Configuration of Raspbian Buster Lite