Créer un MOTD pour vos serveurs Linux

Créer un MOTD pour vos serveurs Linux

Si comme moi vous avez plusieurs serveurs Linux à vous occuper, créer un MOTD (Message Of The Day) est là modification indispensable à réaliser lors de l’installation de votre serveur. Souvent ignoré, il peut vous éviter des erreurs et même vous donner des informations importantes sur votre serveur dès votre connexion. INDISPENSABLE !!!

C’est quoi un MOTD ?

MOTD (Message Of The Day) est un message envoyé à un logiciel client lors de son identification sur des serveurs (tels que les serveurs IRC, SSH ou encore FTP). Généralement, ce message est utilisé pour afficher les règles, les contacts administratifs, ou encore un dessin ASCII Art.
Ce message peut être personnalisé pour afficher le nom de la machine, son IP, diverses statistiques comme la consommation CPU, Mémoire, …

Pour ceux qui ne savent pas ce que c’est, voici un exemple de MOTD :

Créer un MOTD

Si vous souhaitez connaitre d’autres astuces sur Linux pour administrer vos serveurs et vos stations de travail, un conseil lisez ce tutoriel : Bien gérer son serveur ou sa station de travail sous Linux.

Comment modifier le MOTD ?

Tout d’abord ce tutoriel se déroulera sur Ubuntu. Pour faire simple, nous allons créer des scripts que nous allons placés dans un répertoire spécifique. Ces scripts seront exécutés à chaque connexion de l’utilisateur.

Sur mes switchs j’ai pris l’habitude de créer une bannière en Ascii avec le nom de la société. Nous allons donc reproduire ceci sur nos serveurs Linux. Pour créer ce style d’écriture particulier nous allons d’abord ajouter le paquet figlet.

# apt-get install figlet

Puis après l’installation pour s’assurer que tout fonctionne correctement utiliser la commande suivante :

# figlet Quick-Tutoriel

créer une bannière en Ascii avec figlet

Ensuite vous devez aller dans le répertoire /etc/update-motd.d/.

Info !!! Si celui-ci n’existe pas, il faut alors le créer et lui donner les droits en exécution suivant avec cette commande : mkdir /update-motd.d && chmod 644 /update-motd.d.

Si ce dossier existe, vous devez voir plusieurs fichiers (= scripts) avec des numéros. 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.

Comprendre la numérotation des fichiers dans le répertoire update-motd.d sous Ubuntu

Comme je veux repartir à zéro, je décide donc de déplacer ces fichiers dans mon répertoire Temp.

# move * /temp/

Déplacement des fichiers existant dans le répertoire update-motd.d sous Ubuntu

Les premiers pas pour créer un MOTD

Je vous donnerais mes sources à la fin de l’article. J’ai pas mal écumé le web pour trouver un modèle qui me plaisais et qui était pratique.

Afin d’améliorer un peu le rendu du MOTD, nous allons ajouter de la couleur. La première étape sera d’afficher le nom du serveur avec la police type ASCII le tout en couleur. Tout un programme.

Je vais donc créer un fichier colors et je vais coller les codes couleurs ci-dessous dans le fichier. J’ai aussi rajouté les possibilités de mettre un texte en gras ou souligné.

# Reset Colors
NONE="\033[m"

# Colors
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"

# Bold
BOLD="\033[1m"

# Underline
UNDERLINE="\033[4m"

Ensuite je vais créer le fichier 00-header pour afficher le nom de mon serveur. En règle générale les serveurs de production sont affichés en rouge et les serveurs de validation, développement en vert.

#!/bin/sh

# Appel du fichier avec les codes couleurs
. /etc/update-motd.d/colors

# Affichage du nom du serveur avec l'extension Prod ou Valid
# En rouge pour les serveurs de Prod et en vert pour les autres.
printf "\n"$LIGHT_RED
figlet " "$(hostname -s) - Prod
printf $NONE
printf "\n"

Ensuite je vais créer le fichier 01-banner pour afficher la version du système utilisée ainsi que son nom de code et la version du noyau.

Voici le code commenté :
#!/bin/sh

# Appel du fichier avec les variables de couleurs
. /etc/update-motd.d/colors

# Execution du script python lsb-release pour utiliser les variables systèmes
# pour récupérer RAPIDEMENT les informations de version
. /etc/lsb-release

echo $DISTRIB_DESCRIPTION $YELLOW "($DISTRIB_CODENAME)" $NONE "($(uname -o)" "$(uname -r)" "$(uname -m))"

Une petite précision sur l’exécution de lsb_release. Cet utilitaire rempli des variables système pour pouvoir récupérer les informations de version de son serveur Linux. Voici les variables avec un exemple de contenu :

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

A cet instant voici ce que donne mon MOTD.

Créer un MOTD pour vos serveurs Linux

Astuce !!! Lorsque je me connecte en SSH j’ai toujours une ligne qui vient s’incruster à la fin de mon MOTD. C’est la ligne qui commence par last login :….. Pour ne plus avoir afficher cette ligne il suffit d’éditer le fichier de config de SSH (/etc/ssh/sshd_config) puis de mettre cette option à No, PrintLastLog no, puis de redémarrer le service SSH.

Supprimer le message last login :….. à chaque connexion SSH

Autre point important, vous devez rendre exécutable les fichiers que vous créez, sinon cela ne fonctionnera pas. Vous devrez utiliser la commande ci-dessous :

# chmod 755 00-hostname

La même chose sera appliquée aux autres fichiers en changeant bien sûr leur nom.

Ajouter des informations utiles à votre MOTD

Vous pouvez rajouter autant d’information que vous le souhaitez. Nous allons voir les classiques.

Voici mon code pour le fichier 02-sysinfo qui contient tout un tas d’info sur mon système comme le type de processeur, le nombre de cœurs et de processus actifs, le load average, la consommation de RAM, l’uptime, …..

#!/bin/bash

# Appel du fichier avec les variables de couleurs
. /etc/update-motd.d/colors

# Récupération des informations à afficher
# Récupération des infos sur le processeur
proc=`cat /proc/cpuinfo | grep model | cut -c14- | sed -n "2 p"`
# Supprime les espaces dans Avant/ Après
proc=$(echo "${proc}" | sed 's/^ *//g')
# Récupère le nombre de coeurs
coeurs=`cat /proc/cpuinfo | grep -i "^processor" | wc -l`
# récupère la mémoire RAM SWAP Libre et Total
memfree=`cat /proc/meminfo | grep MemFree | awk {'print $2'}`
memtotal=`cat /proc/meminfo | grep MemTotal | awk {'print $2'}`
swaptotal=`cat /proc/meminfo | grep SwapTotal | awk {'print $2 " " $3'}`
pourcentfree=$((($memfree * 100)/$memtotal))
# Récupère l'uptime du serveur
uptime=`uptime -p`
# Récupère l'adresse IP du serveur
addrip=`hostname -I | cut -d " " -f2`
# Récupère le nombre de processus en exécution
process=`ps ax | wc -l | tr -d " "`
# Récupère le nombre d'utilisateur connecté en SSH/Console
connecteduser=`who | wc -l`
# Récupére l'utilisation des disques
diskused=`df -h | grep /dev/ploop14990p1 | awk {'print $5 "% of " $2'}`
# Récupère les inodes utilisés
inodeused=`df -i | grep /dev/ploop14990p1 | awk {'print $5'}`

# Récupére le loadavg
read one five fifteen rest < /proc/loadavg

# Affichage des variables
printf ""$LIGHT_GREEN
printf " Processeur :"
printf ""$NONE
printf " $proc ($coeurs cores)"
printf "\n"
printf ""$LIGHT_GREEN
printf " Charge CPU :"
printf ""$NONE
printf " $one (1min) / $five (5min) / $fifteen (15min)"
printf "\n"
printf ""$LIGHT_GREEN
printf " RAM :"
printf ""$NONE
printf " $(($memfree/1024)) MB soit $pourcentfree%% Libre / $(($memtotal/1024)) MB Total"
printf "\n"
printf ""$LIGHT_GREEN
printf " Processes :"
printf ""$NONE
printf " $process"
printf ""$LIGHT_GREEN
printf " Users logged in :"
printf ""$NONE
printf " $connecteduser "
printf ""$LIGHT_GREEN
printf "Swap:"
printf ""$NONE
printf " $swaptotal"
printf "\n"
printf ""$LIGHT_GREEN
printf " Disk Usage :"
printf ""$NONE
printf " $diskused"
printf ""$LIGHT_GREEN
printf " Inodes Used :"
printf ""$NONE
printf " $inodeused%"
printf "\n"
printf ""$LIGHT_GREEN
printf " Adresse IP :"
printf ""$LIGHT_RED
printf " $addrip"
printf ""$NONE
printf "\n"
printf ""$LIGHT_GREEN
printf " Uptime :"
printf ""$NONE
printf " $uptime"
printf "\n"
printf "\n"

Voici ce que donne mon MOTD pour l’instant :

Exemple de MOTD pour Linux complet

Si vous souhaitez utiliser mon MOTD dans le fichier 02-sysinfo, vous devrez ajuster le nom de la partition ou du disque que vous souhaitez afficher (1) ainsi que la carte réseau qui porte votre IP (2)

Info : Vous retrouverez tous les fichiers de mon MOTD sur mon compte GitHub : https://github.com/quick-tutoriel/MOTD-Linux

Utilisation avancée du MOTD

Si vous voulez encore ajouter des informations dans votre MOTD. Voici quelques options avancées que vous pouvez insérer.

Mises à jour
Grâce à la commande apt-get vous pouvez savoir si des mises à jour sont disponibles et si des paquets ne sont plus utiles à votre installation. J’ai nommé le fichier 03-upgrade. Voici son contenu :

#!/bin/bash

. /etc/update-motd.d/colors

n=$(apt-get -qq --just-print dist-upgrade | cut -f 2 -d " " | sort -u | wc -l)
if [[ $n -gt 0 ]]; then
printf $LIGHT_RED
printf " You have %s packages waiting for upgrades." "$n"
printf $NONE"\n\n"
fi
n=$(apt-get -qq --just-print autoremove | cut -f 2 -d " " | sort -u | wc -l)
if [[ $n -gt 0 ]]; then
printf $YELLOW
printf " You have %s packages that were automatically installed and are not needed anymore." "$n"
printf $NONE"\n\n"
fi
Attention !!! Les lignes ne s’affichent que si le nombre de paquets est > à 0.

Mon MOTD

Voici donc mon MOTD que j’installe sur mes serveurs :

Voici mon MOTD que j'installe sur mes serveurs

D’un coup d’œil j’ai quelques informations essentielles sur mon serveur. J’attache une importance particulière à la couleur de la bannière si c’est rouge c’est de la production donc ATTENTION !!!, si c’est vert c’est de la validation donc moins risquée. Ces petites astuces mnémotechniques sont bien pratiques.

La connexion à votre serveur peut-être plus ou moins longue si vous rajouter beaucoup d’informations dans votre MOTD. Il faudra donc faire des choix.

Si vous insérer d’autres informations dans votre MOTD ou si vous avez des exemples que vous utilisez dans vos entreprises n’hésitez pas à me les envoyer pour que je fasse une petite galerie. Cela peut être sympa et peut donner des idées.

Info : Vous retrouverez tous les fichiers de mon MOTD sur mon compte GitHub : https://github.com/quick-tutoriel/MOTD-Linux[

signature manuelle Guillaume

2 Potins

  1. Je pense que la commande à exécuter si le répertoire n’existe pas est :
    mkdir /etc/update-motd.d && chmod 644 /etc/update-motd.d

    (il manquait /etc devant le répertoire)

  2. Bonjour, super tuto, merci!
    par contre mon ip s’affiche en IPV6 me semble t-il…une idée?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *