Ajouter un MOTD dynamique sous Debian

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 !

MOTD de base
MOTD de base

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.

MOTD Personnalisé
MOTD Personnalisé

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

Installation de Figlet

Une fois installé, vous pouvez tester afin de valider le bon fonctionnement via la commande figlet test par exemple.

Test de Figlet
Exemple d’utilisation de Figlet

On se déplace ensuite dans le dossier /etc dans lequel doit se trouver un dossier nommé update-motd.d.

Dossier update-mood.d
Le dossier est bien présent

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.

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

Rendre exécutable les scripts
Nos 3 scripts sont maintenant exécutables.

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.

Suppression de l'ancien MOTD
Suppression de l’ancien 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.

MOTD final
Voilà notre beau MOTD 🙂

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

« »