En cette période de confinement, il faut trouver de quoi s’occuper à la maison, du coup, ayant plusieurs serveurs Linux à la maison, je me suis dit, pourquoi pas faire quelques petites modifications dessus.
C’est ainsi qu’il m’est venu l’idée de modifier le MOTD (Message Of The Day) de mes machines afin qu’elles soient configurées comme je le souhaite.
C’est quoi un MOTD ?
Comme indiqué plus haut, lorsque l’on se connecte sur une machine Linux (Débian dans mon cas) en ligne de commande (ici en SSH donc), il y a tout un message qui s’affiche. C’est celui-ci que l’on va modifier afin d’y afficher les valeurs de notre choix !
Dans mon cas, je souhaite afficher le nom de la machine, ainsi que quelques informations sur la machine comme le CPU, la mémoire libre, l’adresse IP, etc…
Voici un exemple du résultat que j’ai obtenu.
Comment changer ce fameux MOTD ?
En fait, lorsque l’on creuse, on se rend compte que c’est intégré nativement à Linux (je le rappelle, dans mon cas ce sont des distributions Débian). Pour faire simple, il suffit de créer des scripts, et de les mettre dans un dossier bien spécifique. Lorsque c’est fait, ils seront automatiquement exécutés lorsque vous allez vous connecter.
Ici, je souhaite avoir le nom de ma machine avec une police originale et en couleur. Je vais donc commencer par installer l’utilitaire qui permet d’écrire de cette façon, à savoir « figlet« .
Pour cela, il faut saisir apt-get update && apt-get install figlet
Une fois installé, vous pouvez tester afin de valider le bon fonctionnement via la commande figlet test
par exemple.
On se déplace ensuite dans le dossier /etc
dans lequel doit se trouver un dossier nommé update-motd.d
.
Si celui-ci n’existe pas, il faut alors le créer et lui donner les droits en exécution via mkdir /update-motd.d && chmod 644 /update-motd.d
.
Si ce dossier existe déjà, vous pouvez vous apercevoir qu’il y a déjà un script 10-uname
. Personnellement je ne vais pas l’utiliser je vais donc le supprimer via rm 10-uname
.
Le principe est simple, tous les scripts se trouvant dans ce dossier sont exécutés lors de la connexion. Il suffit de les nommés 00-xxx, 10-xxx, 20-xxx, etc. pour qu’ils soient exécutés dans l’ordre de votre choix.
Pour créer mon MOTD, je me suis basé sur plusieurs sources (je vous les donnerais toutes à la fin de l’article). Dans l’une de ces sources, il y avait un fichier permettant d’utiliser de la couleur, ce qui est plus sympa !
Je vais donc créer ce fameux fichier, dans mon dossier /etc/update-motd.d
via la commande nano colors
.
On va ensuite y coller le code suivant :
NONE="\033[m"
WHITE="\033[1;37m"
GREEN="\033[1;32m"
RED="\033[0;32;31m"
YELLOW="\033[1;33m"
BLUE="\033[34m"
CYAN="\033[36m"
LIGHT_GREEN="\033[1;32m"
LIGHT_RED="\033[1;31m"
On va maintenant passer au script pour afficher le nom du serveur. Toujours dans le dossier /update-motd.d
nous allons créer un fichier 00-hostname
via nano 00-hostname
et dont le code est le suivant :
#!/bin/sh
. /etc/update-motd.d/colors
printf "\n"$LIGHT_RED
figlet " "$(hostname -s)
printf $NONE
printf "\n"
Ensuite, on passe au second fichier, qui se nomme 10-banner
, et qui va afficher la version Debian qui est utilisée. On le créer donc avec la commande nano 10-banner
, et on y ajoute le code suivant :
#!/bin/bash
#
# Copyright (C) 2009-2010 Canonical Ltd.
#
# Authors: Dustin Kirkland <kirkland@canonical.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
. /etc/update-motd.d/colors
[ -r /etc/update-motd.d/lsb-release ] && . /etc/update-motd.d/lsb-release
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
re='(.*\()(.*)(\).*)'
if [[ $DISTRIB_DESCRIPTION =~ $re ]]; then
DISTRIB_DESCRIPTION=$(printf "%s%s%s%s%s" "${BASH_REMATCH[1]}" "${YELLOW}" "${BASH_REMATCH[2]}" "${NONE}" "${BASH_REMATCH[3]}")
fi
echo -e " "$DISTRIB_DESCRIPTION "(kernel "$(uname -r)")\n"
# Update the information for next time
printf "DISTRIB_DESCRIPTION=\"%s\"" "$(lsb_release -s -d)" > /etc/update-motd.d/lsb-release &
Maintenant, je souhaite dans mon cas, ajouter différentes informations comme le CPU, la charge du système, la RAM libre, etc. J’ai donc pour cela, créé un script que j’ai nommé 20-sysinfo
dont le code est le suivant :
#!/bin/bash
proc=`cat /proc/cpuinfo | grep -i "^model name" | awk -F": " '{print $2}'`
memfree=`cat /proc/meminfo | grep MemFree | awk {'print $2'}`
memtotal=`cat /proc/meminfo | grep MemTotal | awk {'print $2'}`
uptime=`uptime -p`
addrip=`hostname -I | cut -d " " -f1`
# Récupérer le loadavg
read one five fifteen rest < /proc/loadavg
# Affichage des variables
printf " Processeur : $proc"
printf "\n"
printf " Charge CPU : $one (1min) / $five (5min) / $fifteen (15min)"
printf "\n"
printf " Adresse IP : $addrip"
printf "\n"
printf " RAM : $(($memfree/1024))MB libres / $(($memtotal/1024))MB"
printf "\n"
printf " Uptime : $uptime"
printf "\n"
printf "\n"
Petite update du 05 mai 2021 :
J’ai trouvé sur le site Tomzone.fr comment afficher de façon plus sympa les caractéristiques CPU. En effet, lorsque j’avais plusieurs coeurs, j’avais donc plusieurs fois la ligne qui s’affichait. Ici, cela permet d’indiquer le nombre de coeurs/processeurs avant le type de CPU. Dans le script 20-sysinfo, il faut remplacer la ligne proc par :
proc=`(echo $(more /proc/cpuinfo | grep processor | wc -l ) "x" $(more /proc/cpuinfo | grep 'model name' | uniq |awk -F":" '{print $2}') )`
Maintenant, nous devons rendre ces fichiers exécutable, afin qu’ils soient interprétés à la connexion. Pour cela, on utilise la commande chmod 755 00-hostname
, même chose pour les deux autres fichiers en changeant bien sûr le nom du fichier.
Il nous reste à supprimer l’ancien MOTD, via la commande rm /etc/motd
. Il faut maintenant le récréer via la commande ln -s /var/run/motd /etc/motd
.
Et voilà, à partir de maintenant, lors de la prochaine connexion en SSH, vous devriez avoir votre MOTD, qui correspond aux différents scripts que nous avons vus juste avant.
Bien sur il ne s’agit que d’un exemple, et de mon cas personnel. Vous pouvez tout à fait modifier le MOTD à votre convenance.
Je ne fais pas plus long, merci à vous de partager cet article autour de vous !
À bientôt sur cloriou.fr !
Sources :
https://logd.fr/personnaliser-motd-sur-linux-debian/
https://nickcharlton.net/posts/debian-ubuntu-dynamic-motd.html
https://angristan.xyz/2018/02/dynamic-motd-linux/
https://github.com/ldidry/dynamic-motd
https://github.com/maxis1718/update-motd.d
http://blogmotion.fr/systeme/raspberry-pi-comment-ajouter-une-banniere-dynamique-motd-15133
Guillaume
16 avril 2020 — 20 h 59 min
Bonjour,
je pense qu’une coquille s’est glissée dans votre tutoriel au niveau de la définition des couleurs dans le fichier colors. J’ai essayé et cela ne fonctionne pas chez moi. Après quelques recherche voici mon fichier colors qui fonctionne :
NONE= »\033[m »
WHITE= »\033[1;37m »
GREEN= »\033[1;32m »
RED= »\033[0;32;31m »
YELLOW= »\033[1;33m »
BLUE= »\033[34m »
CYAN= »\033[36m »
LIGHT_GREEN= »\033[1;32m »
LIGHT_RED= »\033[1;31m »
cloriou
17 avril 2020 — 10 h 43 min
Bonjour,
À quel endroit voyez-vous l’erreur ?
Personnellement, je n’ai aucun soucis avec ce fichier colors que j’utilise sur tous mes serveurs.
Quelle erreur avez-vous ?
MartyMcFly
19 janvier 2021 — 12 h 51 min
Bonjour,
Idem chez moi.
Je confirme que la version de Guillaume est correcte.
La version du tuto me donne le résultat (partiel) suivant dans le MOTD :
Debian GNU/Linux 10 (3[1;33mbuster3[m) (kernel 4.19.0-6-amd64)
Quoi qu’il en soit, merci beaucoup pour cet article de qualité, très indtructif.
Bonne continuation.
cloriou
19 janvier 2021 — 21 h 06 min
Bonjour,
C’est très étrange. J’ai récemment fait un nouveau MOTD, en copiant strictement ce qu’il y a dans l’article et je n’ai aucun problème.
Quand vous copier le contenu du fichier Colors, vous avez bien strictement les mêmes caractères ?
Merci pour votre commentaire bienveillant, c’est toujours agréable ! 🙂
Bonne soirée.
cloriou
19 janvier 2021 — 22 h 45 min
Finalement, je viens de comprendre.
Il arrive que le navigateur interprète différemment la partie du code du fichier colors.
Vous avez donc des caractère manquants, alors que chez moi, ils sont bien visibles.
J’essai de corriger ça rapidement.
Bonne soirée
Jean-Mathias
20 janvier 2021 — 11 h 47 min
Bonjour,
Merci pour le tuto, mais je confirme il y a bien une erreur dans le fichier de définition des couleurs, au niveau du NONE
========
NONE= »\033′[m » (il y a une quote en trop ici)
========
NONE= »\033[m »
========
cloriou
20 janvier 2021 — 22 h 34 min
Bonjour,
Merci, en effet, je viens de corriger le soucis.
Un petit oubli suite à différents tests 🙂
Tott
15 janvier 2022 — 11 h 47 min
Hey c’est génial ! !
le tuto est à jour car chez moi çà marche direct encore merci
cloriou
16 janvier 2022 — 11 h 49 min
Merci !
Gutse
27 janvier 2022 — 15 h 16 min
Pour info : Au moment de créer le lien symbolique, le fichier ne s’appelle pas « motd » comme dans la procédure mais « ./mot.dynamic.new »
cloriou
30 janvier 2022 — 14 h 03 min
Bonjour,
Désolé, mais de mon côté je n’ai jamais eu ce nom de fichier.
Vous êtes bien sur du Debian ? Quelle version ?
Bonne journée.
Ancalagon
16 juin 2022 — 15 h 30 min
Bonjour,
Merci pour ce tuto !
Je confirme ce qu’à écrit Gutse
Sur debian 11, j’ai du faire un
ln -s /var/run/motd.dynamic.new /etc/motd
Cyril
21 août 2022 — 19 h 13 min
Bonjour et merci pour votre script serait-il possible d’integrer la commande df -H histoire de voir aussi la place utilisée sur les disques durs. Merci
cloriou
27 août 2022 — 11 h 10 min
Bonjour,
C’est une idée intéressante, il faudrait creuser. Mais en fonction de la quantité de volume a afficher, j’ai peur que cela soit un peu illisible.
Je pense qu’il faudrait le retravailler pour que cela s’adapte mieux au MOTD.