Solutions de télé-maintenance

 

BUT :

Découvrir différentes solutions de télé-maintenance et choisir celle qui convient à ses besoins, à son matériel et à son environnement informatique.

Qu’est-ce que la télé-maintenance ?

La télé-maintenance permet d’intervenir sur un ordinateur sans être physiquement devant lui.
Avec un logiciel de prise de contrôle à distance, l’opérateur voit le bureau distant sur son propre écran. Il utilise son clavier et sa souris pour agir sur la machine, presque comme s’il était assis devant.
Selon la solution, il peut également transférer des fichiers, ouvrir un terminal, redémarrer l’ordinateur ou administrer plusieurs machines.
Attention : certains outils partagent l’écran de l’utilisateur, tandis que d’autres ouvrent une session distante distincte. Cette différence compte lorsqu’on veut expliquer une manipulation à quelqu’un.

Dans quels cas l’utiliser ?

  • Assister un utilisateur : comprendre un problème, corriger un réglage ou installer un logiciel.
  • Former un utilisateur : montrer une manipulation en direct. Pour un groupe, un outil de visioconférence avec partage d’écran peut être plus adapté.
  • Entretenir un poste : intervenir avec l’utilisateur ou en dehors de ses heures de travail.
  • Administrer un serveur : effectuer des opérations sur une machine généralement dépourvue d’utilisateur devant l’écran.
  • Télétravailler : retrouver les logiciels et les ressources d’un ordinateur resté au bureau.

Les critères à regarder avant de choisir

Gratuit ou payant ?

« Gratuit » ne signifie pas toujours « utilisable gratuitement au travail ».
Certaines solutions réservent leur version gratuite à un usage personnel. D’autres autorisent l’usage professionnel, mais limitent le nombre de machines ou le débit. Les logiciels libres peuvent être gratuits à installer tout en demandant du temps et un serveur pour leur hébergement.

Avec ou sans utilisateur devant l’ordinateur ?

En assistance ponctuelle, l’utilisateur lance une session et autorise l’intervention.
En accès sans surveillance, la machine a été configurée à l’avance pour permettre une connexion sans validation locale à chaque fois. L’accès reste soumis à une authentification et à des droits : il ne s’agit pas d’un accès sans autorisation.

Quels systèmes sont réellement pris en charge ?

Il faut distinguer :

  • l’appareil depuis lequel on intervient ;
  • l’appareil que l’on souhaite contrôler.

Une application disponible sur iPhone peut permettre de piloter un PC sans permettre de contrôler l’iPhone en sens inverse.

Faut-il configurer le routeur ou la box internet ?

Les services utilisant des connexions sortantes et des relais fonctionnent généralement sans redirection de ports sur la box. Un pare-feu d’entreprise peut toutefois nécessiter des ajustements.
Les connexions directes demandent que la machine distante soit joignable : réseau local, VPN ou passerelle configurée.

Peut-on héberger soi-même la solution ?

L’auto-hébergement permet de gérer sa propre infrastructure de connexion. Il faut alors assurer sa configuration, ses mises à jour et sa disponibilité.
Installer uniquement un agent sur ses ordinateurs ne signifie pas que le service est auto-hébergé.

Les solutions d’assistance et d’accès à distance

Les offres et les fonctions varient selon les éditions. Les informations ci-dessous sont à vérifier au moment du déploiement.

SolutionGratuit / payantUsages et compatibilitéHébergement
TeamViewerGratuit pour un usage personnel ; licence commerciale pour le travail.Assistance ponctuelle et accès sans surveillance. Windows, macOS, Linux et fonctions mobiles selon la plateforme.Infrastructure de l’éditeur pour le service standard.
SplashtopPersonal gratuit sur le réseau domestique, jusqu’à deux ordinateurs ; accès extérieur et usage professionnel payants.Accès distant et support. Personal cible les PC Windows et Mac ; les autres plateformes dépendent de l’offre.Service hébergé ou offre On-Prem.
AnyDeskVersion personnelle gratuite ; offres professionnelles payantes.Assistance interactive et accès sans surveillance. Plusieurs plateformes, avec des restrictions selon le système.Cloud ou offre On-Premises.
RustDeskÉditions open source gratuites ; serveur Pro payant.Alternative pour l’assistance et l’accès distant, notamment sur Windows, macOS, Linux et Android.Serveurs de connexion et de relais auto-hébergeables.
DWServiceGratuit, y compris pour un usage professionnel, avec débit limité ; abonnements pour davantage de bande passante.Accès par navigateur aux machines équipées d’un agent Windows, Linux ou macOS. Bureau, fichiers et outils d’administration.Service central DWService ; installer l’agent ne remplace pas cette infrastructure.
Chrome Remote DesktopGratuit.Accès à un ordinateur Windows, macOS ou Linux ; accès permanent ou assistance ponctuelle.Service Google.
Zoho AssistOffre gratuite limitée et éditions payantes.Assistance et accès sans surveillance, avec fonctions de gestion selon l’offre. Compatibilité à vérifier pour chaque plateforme.Service hébergé.
Remote UtilitiesLicence gratuite pour une personne et jusqu’à dix ordinateurs, usage professionnel compris, selon les conditions de l’éditeur.Assistance ponctuelle ou agent permanent. Vérifier les composants disponibles pour chaque système.Connexion directe, Internet-ID ou serveur RU Server personnel.

Ces outils peuvent convenir pour intervenir via Internet sans configurer une redirection de ports chez chaque utilisateur. En auto-hébergement, le serveur de connexion ou de relais doit toutefois être accessible et correctement configuré.

Les solutions pour le réseau local, les serveurs et l’administration centralisée

SolutionGratuit / payantFonctionnement et intérêt
VNC, par exemple TigerVNCDépend de l’implémentation : logiciels libres gratuits ou offres commerciales.Famille de solutions de bureau distant. Compatibilité et partage de la session locale variables selon le serveur. Utilisable sur un réseau local ou à travers un VPN.
RDP — Bureau à distanceFonction hôte incluse dans certaines éditions Windows, notamment Pro et Enterprise, et Windows Server. Les usages RDS nécessitent les licences adaptées.Accès par compte Windows. Windows Home ne fournit pas le serveur RDP natif. Ce n’est pas, par défaut, un outil de partage d’écran pour accompagner l’utilisateur.
MeshCentralGratuit et open source.Serveur auto-hébergé pour administrer un parc via des agents : bureau distant, terminal et fichiers. Les agents permettent de joindre des machines derrière des routeurs via leur connexion au serveur.
NoMachineLa version 10 remplace l’édition gratuite par une édition Personal commerciale.Bureau distant, notamment pour des postes graphiques. Windows, macOS et Linux selon l’édition. Connexion directe ou possibilités de connexion propres à l’offre.
Apache GuacamoleGratuit et open source.Passerelle auto-hébergée donnant accès à RDP, VNC et SSH depuis un navigateur. Le serveur Guacamole doit pouvoir joindre les machines concernées.

À retenir : RDP, VNC et Guacamole ne remplacent pas la configuration du réseau. Pour un accès extérieur, prévoir un VPN ou une passerelle sécurisée plutôt qu’une exposition directe des services de bureau distant.
Concernant NoMachine, l’éditeur permet de rester sur une installation de version 9. Il faut toutefois distinguer la possibilité de continuer à l’utiliser du maintien de son support et de ses mises à jour. Précisions de NoMachine.

Et si le système ne démarre plus ?

Un logiciel de télé-maintenance classique dépend généralement du fonctionnement du système d’exploitation et de sa connexion réseau.

La gestion intégrée aux serveurs

De nombreux serveurs disposent d’un contrôleur de gestion indépendant, par exemple iDRAC chez Dell ou iLO chez HPE.
Selon le matériel et la licence, il permet de gérer l’alimentation et d’accéder à une console distante avant le démarrage du système d’exploitation.

Serveur arrêté ne signifie pas serveur débranché. Le contrôleur doit rester alimenté et accessible sur le réseau. Lorsque le serveur est arrêté, la console vidéo peut afficher « aucun signal » jusqu’à son démarrage. Documentation Dell.

PiKVM

PiKVM apporte une console distante à une machine qui ne possède pas de contrôleur intégré adapté.
Il capture sa sortie vidéo et simule un clavier et une souris USB. Selon le modèle et le câblage, il permet aussi d’accéder au BIOS/UEFI, de présenter un support d’installation virtuel et de commander l’alimentation.
La commande des boutons marche/arrêt nécessite un raccordement adapté, par exemple une carte ATX. Documentation PiKVM.

Sipeed NanoKVM

NanoKVM est une autre solution matérielle compacte, proposée en plusieurs variantes.
Elle permet de récupérer la vidéo, de simuler des périphériques USB et d’intervenir avant le démarrage du système. Les possibilités de commande d’alimentation, de réseau et de montage dépendent du modèle.
Pour comparer son coût à celui d’un PiKVM, il faut comparer des ensembles complets : boîtier, alimentation, câbles et accessoires nécessaires. Présentation NanoKVM.

Quelle solution pour quel besoin ?

  • Dépanner ponctuellement une personne : un outil d’assistance avec validation de la session.
  • Retrouver son ordinateur à distance : un accès sans surveillance configuré à l’avance.
  • Administrer plusieurs machines : une solution avec inventaire, comptes et gestion des droits, comme MeshCentral ou une offre professionnelle.
  • Accéder à des serveurs par navigateur : une passerelle comme Guacamole.
  • Conserver la maîtrise du serveur de connexion : une solution auto-hébergeable, comme RustDesk ou MeshCentral.
  • Intervenir lorsque le système ne démarre plus : une console matérielle intégrée ou un KVM sur IP.

Le choix dépend donc d’abord de l’intervention à réaliser : accompagner un utilisateur, retrouver un poste de travail, administrer un parc ou récupérer une machine en panne.

Lancement d’une Machine Virtuelle en ligne de commande sans affichage

BUT : Lancer une Machine Virtuelle sous VirtualBox en ligne de commande en tache de fond

Parfois nous avons besoin de lancer une machine virtuelle sans passer par l’interface graphique et surtout sans afficher l’écran de la machine virtuelle. Par exemple vous avez créé un serveur virtuel sous VirtualBox et vous n’avez pas besoin de voir son écran puisque vous y accédez via ssh. Un autre exemple est l’utilisation d’une machinedont le bureau est accessible via un logiciel de prise de contrôle à distance (RDP, vnc, TeamViewer, mesh Central, etc).

La première chose à faire c’est de connaitre le nom de la machine virtuelle à lancer. Le plus simple est de regarder son nom dans l’interface de VirtualBox

Nous avons ici un serveur virtuel que nous avons appelé ‘ovh’
Pour lancer ce serveur tapons dans un terminal ‘vboxmanage startvm NomDeLaMachineVirtuelle –type headless’
ATTENTION : dans le cas où vous voulez afficher l’écran de la machine virtuelle ne pas mettre l’option ‘–type headless’

# ici la machine virtuelle se nomme 'ovh'
vboxmanage startvm ovh --type headless
vboxmanage startvm ovh --type headless
Waiting for VM "ovh" to power on...
VM "ovh" has been successfully started.

Testons la connexion avec le serveur ici l’adresse du serveur est ‘ovh.local’ ou 192.168.0.100 car nous l’avons définie par avance

# ssh ovh.local
# ou si l'adresse du serveur est 192.168.0.100
ssh 192.168.0.100
bzg@uc:~$ ssh 192.168.0.100
bzg@192.168.0.100's password:
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-126-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of ven. 07 oct. 2022 14:20:21 UTC

  System load:  0.86               Processes:               126
  Usage of /:   42.8% of 39.07GB   Users logged in:         0
  Memory usage: 33%                IPv4 address for enp0s3: 192.168.9.240
  Swap usage:   0%

 * Super-optimized for small spaces - read how we shrank the memory
   footprint of MicroK8s to make it the smallest full K8s around.

   https://ubuntu.com/blog/microk8s-memory-optimisation

0 updates can be applied immediately.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

bzg@ovh:~$ 

Vous voici sur votre serveur virtuel

Les applications « snaps »

BUT : Installer/Désinstaller des logiciels en mode « snap » et/ou supprimer le magasin des snaps sur Ubuntu

Les snaps sont des paquets permettant d’installer des logiciels contenant leurs propres dépendances et un environnement indépendant du reste des autres programmes.

Si cela est un gros avantage pour les utilisateurs novices, le prix a payer est un gouffre de puissance processeur et d’espace disque

Pour voir quels sont les snaps installés :
snap list

bzg@uc:~$ snap list 
Nom               Version             Révision     Suivi           Éditeur           Notes 
bare              1.0                 5            latest/stable   canonical✓        base 
core20            20220304            1376         latest/stable   canonical✓        base 
gnome-3-38-2004   0+git.1f9014a       99           latest/stable/… canonical✓        - 
gtk-common-themes 0.1-59-g7bca6ae     1519         latest/stable/… canonical✓        - 
snap-store        3.38.0-66-gbd5b8f7  558          latest/stable/… canonical✓        - 
snapd             2.54.4              15177        latest/stable   canonical✓        snapd

Pour installer un snap :
sudo snap install {logiciel}
exemple avec « chromium »

bzg@uc:~$ sudo snap install chromium 
chromium 99.0.4844.84 par Canonical✓ installé 
bzg@uc:~$ snap list
Nom               Version             Révision     Suivi           Éditeur           Notes 
bare              1.0                 5            latest/stable   canonical✓        base 
chromium          99.0.4844.84        1945         latest/stable   canonical✓        -
core20            20220304            1376         latest/stable   canonical✓        base 
gnome-3-38-2004   0+git.1f9014a       99           latest/stable/… canonical✓        - 
gtk-common-themes 0.1-59-g7bca6ae     1519         latest/stable/… canonical✓        - 
snap-store        3.38.0-66-gbd5b8f7  558          latest/stable/… canonical✓        - 
snapd             2.54.4              15177        latest/stable   canonical✓        snapd

Pour supprimer un snap :
snap remove {logiciel}
exemple avec « chromium »

bzg@uc:~$ sudo snap remove chromium 
chromium supprimé 
bzg@uc:~$ snap list
Nom               Version             Révision     Suivi           Éditeur           Notes 
bare              1.0                 5            latest/stable   canonical✓        base 
core20            20220304            1376         latest/stable   canonical✓        base 
gnome-3-38-2004   0+git.1f9014a       99           latest/stable/… canonical✓        - 
gtk-common-themes 0.1-59-g7bca6ae     1519         latest/stable/… canonical✓        - 
snap-store        3.38.0-66-gbd5b8f7  558          latest/stable/… canonical✓        - 
snapd             2.54.4              15177        latest/stable   canonical✓        snapd

La suppression totale des snaps :
sudo snap remove gtk-common-themes
sudo snap remove snap-store
Il est donc possible de désinstaller tous les snaps puis via un :
sudo apt autoremove snapd
on fini la désinstallation de snap et de son magasin

Pour empêcher la réinstallation de snapd il faut créer un fichier
sudo nano /etc/apt/preferences.d/nosnapd
contenant :
Package: snapd
Pin: release *
Pin-Priority: -1

Et voilà un ubuntu sans snaps

En résumé : snap permet d’installer des logiciels facilement mais au prix de beaucoup de ressources, il est possible de supprimer entièrement le magasin « snap »

Savoir si un paquet (un programme) est installé

BUT : Savoir si un paquet (un logiciel) est installé ou non

Il existe plusieurs méthode pour savoir si un paquet est installé, en passant bien sûr par l’interface graphique « Logiciel Ubuntu », mais parfois il est utile dans un code de vérifier si un paquet est déjà installé. Afin d’évité de perdre du temps et utilisant « apt install » pour un logiciel déjà installé.
Si le paquet est déjà installé, apt install vous l’indiquera sinon il l’installera ou le mettra à jour si nécessaire.

voici donc deux méthodes simples pour savoir si un paquet/logiciel est installé ou non :

En utilisant dpkg, avec l’option l (list) :
dpkg -l {package}

exemple pour « thunderbird »

bzg@uc:~$ dpkg -l thunderbird 
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder 
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements 
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais) 
||/ Nom     Version     Architecture     Description 
+++-==============-================================-============-======================================================> 
ii     thunderbird     1:91.5.0+build1-0ubuntu0.20.04.1 amd64     Email, RSS and newsgroup client with integrated spam f>

Nous pouvons voir que le logiciel est installé ainsi que la version du programme

exemple avec le logiciel « truc »

bzg@uc:~$ dpkg -l truc 
dpkg-query: aucun paquet ne correspond à truc

Visiblement le logiciel n’est pas installé

En utilisant apt-cache (ou apt) :
apt-cache policy {package} | grep Installé
apt policy {package} | grep Installé

bzg@uc:~$ apt-cache policy thunderbird | grep Installé 
  Installé : 1:91.5.0+build1-0ubuntu0.20.04.1 
bzg@uc:~$ apt-cache policy vlc | grep Installé 
  Installé : (aucun)

Nous voyons que « Thunderbird » est installé mais pas « vlc »

En résumé : les commandes « apt-cache policy {package} | grep Installé » ou « dpkg -l {package} » permettent de savoir si un logiciel est installé sans passer par l’interface graphique

Personnalisation d’un CD Ubuntu

BUT : Créer un CD live d’Ubuntu modifié afin de le personnaliser avec nos outils ou nos configurations

L’idéal est d’utiliser une machine virtuelle sur laquelle est installé un Ubuntu 20.04 LTS et sur laquelle toutes les mises à jour ont été effectuées

Installation des outils :

sudo apt-get install -y squashfs-tools schroot genisoimage xorriso

Mise en place de l’environnement :

bzg@uc:~$ mkdir cdlive 
bzg@uc:~$ cd cdlive 
bzg@uc:~/cdlive$ mkdir iso squashfs

Copie du CD ou de l’ISO du CD dans le répertoire « iso » :

Dans le cas où le CD est monté automatiquement

bzg@uc:~/cdlive$ sudo cp -va /media/bzg/Ubuntu\ 20.04.4\ LTS\ amd64/. iso

Il faut remplacer « bzg » par votre nom d’utilisateur et « Ubuntu\ 20.04.4\ LTS\ amd64 » par le nom du CD qui apparaît au montage du CD
Attention à ne pas oublier les « \ » devant les espaces

Dans le cas où c’est l’image « iso » qui est utilisée il faut monter l’image avant la copie puis la démonter

bzg@uc:~/cdlive$ sudo mount -o loop /home/bzg/Téléchargements/Ubuntu\ 20.04.4\ LTS\ amd64.iso /mnt
bzg@uc:~/cdlive$ sudo cp -av /mnt/. iso 
bzg@uc:~/cdlive$ sudo umount /mnt

Montage et copie du « squafs » dans le répertoire squahfs puis démontage
C’est le contenu système du CD

bzg@uc:~/cdlive$ sudo mount -t squashfs -o loop iso/casper/filesystem.squashfs /mnt bzg@uc:~/cdlive$ sudo cp -va /mnt/. squashfs 
bzg@uc:~/cdlive$ sudo umount /mnt

Passage en mode « chroot »

bzg@uc:~/cdlive$ sudo mount --bind /proc squashfs/proc 
bzg@uc:~/cdlive$ sudo mount --bind /sys squashfs/sys 
bzg@uc:~/cdlive$ sudo mount -t devpts none squashfs/dev/pts 
bzg@uc:~/cdlive$ sudo mount --bind /dev squashfs/dev 
bzg@uc:~/cdlive$ sudo mount --bind /dev/pts squashfs/dev/pts 
bzg@uc:~/cdlive$ sudo cp /etc/resolv.conf squashfs/etc/resolv.conf 
bzg@uc:~/cdlive$ sudo chroot squashfs root@uc:/#

Vous remarquerez que nous sommes en mode « root », mais dans un environnement cloisonné à cdlive/squashfs
Pour notre exemple nous aurons besoin d’installer des programmes qui sont dans « universe »
Installons le dépôt « universe » puis faisons une mise à jour du système qui se trouve dans le chroot

root@uc:/# echo 'deb http://fr.archive.ubuntu.com/ubuntu/ focal universe' >> /etc/apt/sources.list 
root@uc:/# apt update

Vous pouvez faire les mise à jour, mais je ne vais pas le faire afin de garder le même niveau que la version d’origine (avec : apt dist-upgrade)
Sélectionnons le clavier français (azerty / french)

root@uc:/# apt install console-data

S’il y a des erreurs au sujet de ‘zsys’ c’est normal et nous allons le corriger en supprimant les programmes inutiles

root@uc:/# apt purge zsys

Puis les langues inutiles (à vous de voir)

root@uc:/# apt purge libreoffice-help-ru libreoffice-help-de libreoffice-help-pt-br libreoffice-help-it libreoffice-help-es libreoffice-help-pt language-pack-gnome-ru-base language-pack-pt-base language-pack-gnome-de-base language-pack-de-base language-pack-ru-base language-pack-gnome-es-base language-pack-es-base gnome-getting-started-docs-de gnome-getting-started-docs-es gnome-getting-started-docs-ru gnome-getting-started-docs-it gnome-getting-started-docs-pt language-pack-gnome-zh-hans-base language-pack-zh-hans-base language-pack-it-base

Enfin installons quelques programmes utiles (utilisez atp instal )
ssh : pour activer la connection en ssh
chntpw : pour supprimer les mots de passe Windows
grub-customizer : pour gérer les boots EFI

root@uc:/# apt install ssh chntpw grub-customizer

Nous faisons à présent un peu de ménage

root@uc:/# apt autoremove
root@uc:/# apt autoclean
root@uc:/# rm /etc/resolv.conf
root@uc:/# rm /etc/hosts

Puis nous démontons les répertoires

root@uc:/# umount -lf /sys 
root@uc:/# umount -lf /proc
root@uc:/# umount -lf /dev/pts

Nous sortons du mode ‘chroot’

root@uc:/# exit
bzg@uc:~/cdlive$

Nous pouvons copier des fichiers qui apparaîtrons dans le ‘home’ de l’utilisateur dans l’arborescence ‘squashfs/etc/skel’
Pour copier un fichier tuto pour la configuration du wifi, téléchargeons une page web que nous mettrons dans ~Téléchargement et que nous appellerons ‘wifi.html’, puis lançons sa copie par

bzg@uc:~/cdlive$ sudo cp ~/Téléchargements/wifi.html squashfs/etc/skel/

Pour lancer des commandes au démarrage il suffit de modifier le fichier .profile

bzg@uc:~/cdlive$ sudo nano squashfs/etc/skel/.profile
GNU nano 4.8 squashfs/etc/skel/.profile Modifié 
# Mettre à la fin du fichier .profile 
# test si connexion internet sinon ffichage d'un fichier html 
test="$(ping -c 2 google.com | grep '2 re')" 
if [ ! "$test" ] 
then 
   # Pas de connection internet affichage d'un tuto sur le wifi 
   firefox ~/wifi.html 
   fi 
   
^G Aide     ^O Écrire     ^W Chercher     ^K Couper     ^J Justifier     ^C Pos. cur.    M-U Annuler    M-A Marquer 
^X Quitter  ^R Lire fich. ^\ Remplacer    ^U Coller     ^T Orthograp.    ^_ Aller ligne M-E Refaire     M-6 Copier

Puis sortir par ctrl-X

Pour utiliser le Français par défaut

bzg@uc:~/cdlive$ echo "fr" | sudo tee iso/isolinux/lang

Création du CDLIVE

bzg@uc:~/cdlive$ sudo chmod a+w iso/casper/filesystem.manifest 
bzg@uc:~/cdlive$ sudo chroot squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > iso/casper/filesystem.manifest 
bzg@uc:~/cdlive$ sudo chmod go-w iso/casper/filesystem.manifest 
bzg@uc:~/cdlive$ sudo rm iso/casper/filesystem.squashfs

Création du squashfs puis reconstruction de l’ISO

bzg@uc:~/cdlive$ cd squashfs 
bzg@uc:~/cdlive/squashfs$ sudo mksquashfs . ../iso/casper/filesystem.squashfs -info bzg@uc:~/cdlive/squashfs$ cd ../iso 
bzg@uc:~/cdlive/iso$ sudo bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum | tee md5sum.txt" 
bzg@uc:~/cdlive/iso$ sudo mkisofs -U -A "ubuntu-20-04-efi" -V "ubuntu-20-04-efi" -volset "ubuntu-20-04-efi" -J -joliet-long -r -v -T -o ../ubuntu-20-04-efi.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot . 
bzg@uc:~/cdlive/iso$ cd .. 
bzg@uc:~/cdlive$ sudo apt install syslinux-utils 
bzg@uc:~/cdlive$ sudo isohybrid -u ubuntu-20-04-efi.iso

Comparer deux répertoires sous Ubuntu

BUT : retrouver rapidement les différences existantes entre deux répertoires sous Ubuntu en ligne de commande

S’il est facile en mode graphique de comparer deux répertoires contenant peu de fichiers, cela devient vite compliqué lorsque que nous devons comparer plusieurs dizaines de fichiers

En ligne de commande il suffit d’utiliser la commande « diff » ainsi :
diff -rq repertoire1 repertoire2

bzg@uc:~$ diff -rq Images/src Images/dst
Seulement dans Images/dst: 10403.jpg
Seulement dans Images/dst: 11687.jpg

Dans ce premier exemple nous constatons que deux fichiers ne se trouvent que dans le répertoire « Images/dst »

Prenons un deuxième exemple avec des différences plus importantes

bzg@uc:~$ cd Images
bzg@uc:~/Images$ diff -rq src dst
Les fichiers src/10403.jpg et dst/10403.jpg sont différents
Seulement dans dst: 10927.jpg
Seulement dans dst: 11687.jpg
Seulement dans src: 12231.jpg

Nous sommes rentré dans le répertoires « Images » afin de simplifier le chemin des répertoires à comparer
Cette fois ci, nous constatons qu’un fichier existe dans les deux répertoires mais n’a pas le même contenu (fichiers différents)
Deux fichiers n’existent que dans le répertoire « dst » alors qu’un fichier n’existe que dans le répertoire « src »

Les options -r et -q correspondent à :
-r : recursif, explore tous les répertoires et sous répertoires
-q : quick, indique seulement les fichiers différents (sans afficher le contenu des différences)

En résumé :
La commande « diff » qui permet d’afficher les différences entre deux fichiers peut être utilisée pour trouver les différences de contenu de deux répertoires

Trouver des fichiers contenant une chaîne

BUT : trouver les fichiers contenant une chaîne alphanumérique

Méthode avec « find »
find . | xargs grep {chaine} -sl

Méthode avec « grep »
grep -rli {chaine} .

Exemples :

Nous avons créer deux fichiers clients pour faire notre test

Un fichier clients-2020.txt qui contient :

Goland 09/06/20 \ Prospect 
Salist 10/08/20 \ Prospect \ Client
Trucks 20/12/20 \ Prospect

Et un fichier clients-2021.txt qui contient :

Hermat 20/02/21 \ Prospect 
Appres 12/12/21 \ Prospect \ Client

Recherchons les fichiers contenant la chaîne ‘Salist’

bzg@uc:~/Documents$ find . | xargs grep Salist -sl 
./clients-2020.txt 
bzg@uc:~/Documents$ grep -rli Salist . 
./clients-2020.txt 
bzg@uc:~/Documents$ grep -rli 'Salist' . 
./clients-2020.txt 
bzg@uc:~/Documents$ grep -rli "Salist" . 
./clients-2020.txt

La chaîne ‘Salist’ étant simple et sans caractère système, nous pouvons écrire cette chaîne sans délimiteur ou avec les apostrophes simples ou doubles, il n’y aura aucune différence

Recherchons les clients  ou prospects de ‘2020’

bzg@uc:~/Documents$ find . | xargs grep "20" -sl 
./clients-2021.txt 
./clients-2020.txt

Nous constatons que les fichiers 2020 et 2021 sont retournées, en effet la recherche sur « 20 » renvoi aussi le fichier contenant ’20/02/21′ puis 20 s’y trouve
Nous devons donc faire une recherche sur ‘/20’

bzg@uc:~/Documents$ find . | xargs grep "/20" -sl 
./clients-2020.txt

Recherchons les fichiers contenants des clients donc avec la chaîne ‘\ Client’, il faut impérativement délimiter la chaîne à cause de l’espace et échapper le caractère système ‘\’ en le faisant précéder d’un autre caractère ‘\’ soit la chaîne ‘\ Client’

bzg@uc:~/Documents$ find . | xargs grep '\\ Client' -sl 
./clients-2021.txt 
./clients-2020.txt

En résumé : on peut rechercher les fichiers contenant une chaîne en utilisant ‘find’ et / ou ‘grep’

Affichage des sous répertoires

BUT : Afficher les sous répertoires (l’arborescence)

Méthode rapide et simple avec ‘find’
find . -type d

bzg@uc:~$ find . -type d 
. 
./.gnupg 
./.gnupg/private-keys-v1.d 
./Modèles 
./.config 
./.config/gtk-3.0 
./.config/pulse 
[...] 
./.cache 
./.cache/thumbnails 
./.cache/thumbnails/large 
[...] 
./.ssh 
./Bureau 
./Téléchargements 
./Musique 
./Vidéos 
./Public 
./snap 
./snap/snap-store 
./snap/snap-store/558 
[...] 
./.local 
./.local/share 
[...] 
./Documents 
./Images

Nous pouvons voir l’arborescence complète à partir du répertoire ‘home’ de l’utilisateur, les […] servent à raccourcir le listing pour éviter de se dérouler sur 10 pages

Méthode classe avec un petit script
Créer le script suivant via ‘nano arbo’

#!/bin/sh
dir=${1:-.}
cd ${dir};
pwd
find ${dir} -type d -print | sort -f | sed -e « s,^${dir},, » -e « /^$/d » -e « s,[^/]*/\([^/]*\)$,\`—–\1, » -e « s,[^/]*/, | ,g »;

le rendre exécutable grâce à ‘chmod +x arbo’
puis l’exécuter avec le nom du répertoire à explorer comme paramètre

bzg@uc:~/bin$ nano arbo 
bzg@uc:~/bin$ chmod +x arbo 
bzg@uc:~/bin$ ./arbo ~ 
/home/bzg 
`-----bin 
`-----Bureau
`-----.cache 
 |    `-----evolution 
 |     |    `-----addressbook 
 |     |     |     `-----trash 
 |     |    `-----calendar 
 |     |     |     `-----trash 
 |     |    `-----mail 
 |     |     |     `-----trash 
 |     |    `-----memos 
 |     |     |     `-----trash 
 |     |    `-----sources 
 |     |     |     `-----trash 
 |     |    `-----tasks 
 |     |     |     `-----trash 
 |     `-----fontconfig 
 |     `-----gstreamer-1.0 
 |     `-----ibus 
 |     |    `-----bus 
 |     `-----ibus-table 
 |     `-----libgweather 
 |     `-----mesa_shader_cache 
 |     |     `-----01 
 [...] 
 |     |     `-----ff 
 |     `-----thumbnails 
 |     |     `-----large 
 |     `-----tracker 
 |     `-----ubuntu-report 
 |     `-----update-manager-core 
 `-----.config 
 |     `-----dconf 
 |     `-----evolution 
 |     |     `-----sources 
 |     `-----gnome-session 
 |     | `-----saved-session 
 |     `-----goa-1.0 
 |     `-----gtk-3.0 
 |     `-----ibus 
 |     |     `-----bus 
 |     `-----nautilus 
 |     `-----pulse 
 |     `-----update-notifier 
 `-----Documents 
 `-----.gnupg 
 |     `-----private-keys-v1.d 
 `-----Images 
 `-----.local 
 |     `-----share 
 |     |     `-----applications 
 |     |     `-----evolution 
 |     |     |     `-----addressbook 
 |     |     |     |     `-----system 
 [...] 
 |     |     `-----sounds 
 |     |     `-----tracker 
 |     |     |     `-----data 
 |     |     `-----xorg 
 `-----Modèles 
 `-----Musique 
 `-----Public 
 `-----snap 
 |     `-----snap-store 
 |     |     `-----558 
 |     |     |     `-----.config 
 |     |     |     |     `-----autostart 
 [...] 
 |     |     |     |     `-----immodules 
 `-----.ssh 
 `-----Téléchargements 
 `-----Vidéos

Comme pour le premier exemple les […] sont là pour éviter des pages et des pages de listing

En résumé : Nous pouvons afficher une arborescence de répertoire avec la commande ‘find’ en mode simple ou en mode script

Affichage uniquement des répertoires

BUT : N’afficher que les répertoires du niveau actuel

Utiliser l’option -d sur la commande ‘ls’ sans oublier de mettre *
ls -d */
ls -dl */ (pour avoir toutes les informations sur les répertoires)

Exemples :

bzg@uc:~$ ls -d */ 
bin/ Bureau/ cdlive/ Documents/ Images/ Modèles/ Musique/ Public/ snap/ Téléchargements/ 
Vidéos/ 
bzg@uc:~$ ls -dl */ 
drwxrwxr-x 2 bzg bzg 4096 mars 30 00:15 bin/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Bureau/ 
drwxrwxr-x 5 bzg bzg 4096 mars 13 18:07 cdlive/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Documents/ 
drwxr-xr-x 2 bzg bzg 4096 mars 29 19:57 Images/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Modèles/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Musique/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Public/ 
drwx------ 3 bzg bzg 4096 mars 29 14:04 snap/ 
drwxr-xr-x 2 bzg bzg 4096 mars 12 17:58 Téléchargements/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Vidéos/

En résumé : L’option -d de la commande ls permet de visualiser les répertoires contenu dans le répertoire actuel

Terminal shell (ssh) via un navigateur web (http)

BUT : Accéder à une console/un terminal shell/bash depuis un navigateur web

Installation :
via apt avec ‘sudo apt install openssl shellinabox‘

bzg@uc:~$ sudo apt install openssl shellinabox

La configuration se fait en éditant le fichier : /etc/default/shellinabox

bzg@uc:~$ sudo nano /etc/default/shellinabox
# Should shellinaboxd start automatically 
SHELLINABOX_DAEMON_START=1

# TCP port that shellinboxd's webserver listens on
SHELLINABOX_PORT=4200

# Parameters that are managed by the system and usually should not need
# changing:
# SHELLINABOX_DATADIR=/var/lib/shellinabox
# SHELLINABOX_USER=shellinabox
# SHELLINABOX_GROUP=shellinabox

# Any optional arguments (e.g. extra service definitions). Make sure
# that that argument is quoted.
#
# Beeps are disabled because of reports of the VLC plugin crashing
# Firefox on Linux/x86_64.
SHELLINABOX_ARGS="--no-beep"

SHELLINABOX_DAEMON_START=1 : permet de démarrer en automatique le service ‘shellinabox’ (sinon le mettre à 0)
SHELLINABOX_PORT=4200 : 4200 est le port par defaut sur lequel il faut se connecter pour accéder au terminal shell/ssh. Pour des raison évidente de sécurité il vaut mieux le changer
SHELLINABOX_ARGS= »–no-beep » : C’est là que nous mettrons les arguments de ‘shellinabox’, par défaut les beeps du terminal sont inhibés pour éviter des bugs sur ‘firefox’ avec le plugin ‘VLC’

Changement du port d’écoute :
Changer ‘SHELLINABOX_PORT=4200’ par ‘SHELLINABOX_PORT=4242‘ par exemple pour que le port d’écoute soit 4242
Dans ce cas de figure ne pas oublier de paramétrer le firewall et d’ouvrir le port 4242

Remplacer le port d’écoute par une sous adresse du style https://serveur/shellinabox sur un serveur apache :
Dans ce cas inutile de changer le port d’écoute ni d’ouvrir le port sur le firewall
Changer ‘SHELLINABOX_ARGS= »–no-beep »‘ par ‘SHELLINABOX_ARGS= »–localhost-only –disable-ssl »‘
L’option –localhost-only n’acceptera que les connections depuis le localhost/127.0.0.1
L’option –disable-ssl supprimera le protocole ssl puisque nous alors faire une redirection web interne
Le fichier ‘/etc/default/shellinabox’ devient :

# Should shellinaboxd start automatically 
SHELLINABOX_DAEMON_START=1

# TCP port that shellinboxd's webserver listens on
SHELLINABOX_PORT=4200

# Parameters that are managed by the system and usually should not need
# changing:
# SHELLINABOX_DATADIR=/var/lib/shellinabox
# SHELLINABOX_USER=shellinabox
# SHELLINABOX_GROUP=shellinabox

# Any optional arguments (e.g. extra service definitions). Make sure
# that that argument is quoted.
#
# Beeps are disabled because of reports of the VLC plugin crashing
# Firefox on Linux/x86_64.
# SHELLINABOX_ARGS="--no-beep"
SHELLINABOX_ARGS="--localhost-only --disable-ssl"

Pour mettre en place la redirection du port vers une adresse il faut installer le serveur web ‘apache’ puis les modules ‘proxy’ par les commande ‘sudo apt install apache2‘ puis ‘sudo a2enmod proxy proxy_http‘

bzg@uc:~$ sudo apt install apache2 
bzg@uc:~$ sudo a2enmod proxy proxy_http

puis dans le fichier de configuration du site principal ‘/etc/apache2/sites-available/000-default.conf’ il faut ajouter les deux lignes suivantes :

ProxyPass "/shellinabox" "http://127.0.0.1:4200" 
ProxyPassReverse "/shellinabox" "http://127.0.0.1:4200"

Il faut relancer ‘apache’ par la commande ‘sudo systemctl restart apache2‘ et ‘shellinabox’ par la commande ‘sudo systemctl restart shellinabox‘

bzg@uc:~$ sudo systemctl restart apache2 
bzg@uc:~$ sudo systemctl restart shellinabox

Pour accéder au terminal avec votre explorateur web (Firefox, google chrome, etc) :
Accéder à l’adresse du serveur https://xxx.xxx.xxx.xxx:4200 si vous avez laissé les paramètres par défaut
https://xxx.xxx.xxx.xxx:4242 si vous avez modifié le port d’écoute 4200 par 4242 (sinon mettre le port que vous avez configuré)
http://serveur_web/shellinabox si vous avez configuré la redirection du port vers une adresse

En résumé : Il est possible d’accéder à un terminal ssh via un explorateur web