Avoir un motd personnalisé

/etc/motd est le fichier texte affiché après authentification et dont le contenu varie d’une distribution Linux à une autre. Il est vide sous CentOS mais affiche de nombreuses informations sous Ubuntu.

Le problème est que son contenu n’est pas interprété par le shell, on ne peut donc pas y mettre de variables ou de commandes pour afficher l’IP en cours, etc.

La seule solution est de passer par une tâche cron. Ubuntu a déjà son propre mécanisme appelé update-motd mais rien de tel côté RedHat.

Je souhaitais voir en gros le nom de la machine ainsi que l’OS, l’adresse IP publique et le(s) IP(s) privée(s) :

motd

J’ai donc créé un fichier /usr/local/sbin/motd.sh (car seul root a une raison d’y accéder) avec le contenu suivant :

#!/bin/bash

PATH="/sbin:/bin:/usr/sbin:/usr/bin"

if [ -f /etc/os-release ]; then
    . /etc/os-release
elif [ -f /etc/redhat-release ]; then
    NAME=$(cat /etc/redhat-release | awk {'print $1'})
    VERSION=$(cat /etc/redhat-release | awk {'print $4'})
elif [ `which lsb_release 2>/dev/null` ]; then
    NAME=$(lsb_release -i)
    VERSION=$(lsb_release -r)
else
    NAME="Unknown"
    VERSION="Unknown"
fi

cat << EOL > /etc/motd
$(figlet -c `hostname -s`)

Hostname                  = $(hostname --fqdn)
OS Name                   = $NAME
OS Version                = $VERSION
Public IP                 = $(curl -s ifconfig.co)
Private IPs               = $(ip -f inet -o addr show|grep -v '1\: lo'|cut -d\  -f 7 | cut -d/ -f 1 | tr '\n' ' ')
EOL

Il nécessite l’installation du package figlet (texte ASCII).

On ajoute ensuite une tâche cron à exécuter au démarrage :

@reboot sleep 30 && /bin/bash /usr/local/sbin/motd.sh

Dans le cas d’une IP publique dynamique, il suffit de remplacer @reboot par @daily (quotidiennement) voir @hourly (toutes les heures). sleep 30 sert à patienter un peu le temps que le réseau se monte.

Testé uniquement sous CentOS 7.

A noter qu’il est également possible de passer par un .bash_profile, lequel pourrait afficher un message personnalisé à chaque utilisateur. Il a cependant pour inconvénient, outre sa lourdeur (relative), d’être limité à bash. Si l’utilisateur passe, disons, à zsh, il faudra adapter. Pour l’appliquer globalement, sachez que bash va lire /etc/bashrc ainsi que dans /etc/profile.d/*.sh.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s