Création d’un MOTD dynamique : dynmotd
Depuis que je m’occupe de la gestion d’un parc de serveurs Linux, environ 200, j’ai mis en place certaines petites customisations maison.
Ainsi, dès que je me connecte en SSH à un serveur, un motd dynamique s’exécute et il m’est donc simple de savoir quel est le serveur sur lequel je me connecte. Qu’est ce que le motd me demanderont certains ? Simplement l’abréviation de Message Of The Day.
Mettre en place un motd dynamique est très simple.
Suivez le tutoriel ci-dessous
<Mise à jour du 29 Avril 2016>
- Mise à jour pour dû à un bug du TERM qui bloquait les transfert en SCP
- Mise à jour du fichier dynmotd.sh avec : optimisation des variables
- Mise en place du dynmotd uniquement pour le compte root et le groupe admin
</Mise à jour>
Tutoriel
Installation des pré-requis
Debian / Ubuntu
sudo apt-get install lsb-release
RedHat / CentOS
sudo yum install redhat-lsb-core
On désactive l’affichage du motd du serveur ssh
sudo sed -i 's/#PrintMotd yes/PrintMotd no/g' /etc/ssh/sshd_config
On active le lancement du motd au démarrage de n’importe quelle session SSH ou locale pour l’utilisateur root et les utilisateurs du groupe “admin” (c’est spécifique à ma configuration … vous pouvez changer le nom du groupe, mettre un utilisateur … bref regardez votre fichier /etc/sudoers)
Vous pouvez faire un copier coller directement j’utilise des caractères échappatoire pour pouvoir copier les variables
sudo cat > /etc/profile.d/dynmotd.sh <<EOFDYN #!/bin/bash # # By Thomas Bourcey # Tomzone.fr # Corrige un problème lors de l'utilisation du scp et de WinSCP # http://winscp.net/forum/viewtopic.php?t=1510 if [ "\\$TERM" != "dumb" ]; then # Si un groupe Admin existe alors on active le dynmotd \\$( which id ) | grep 'admin' > /dev/null RETURN=\\$? if [ \\$RETURN = 0 ]; then /usr/local/bin/dynmotd; # Si root se connecte on active le dynmotd elif [ \\$EUID = 0 ]; then /usr/local/bin/dynmotd; # Sinon on affiche un message "standard" pour les simples utilisateurs else echo "" echo "" echo "---> Welcome \\$USER on \\$(hostname)" echo "" echo "###########################################################################" echo "# #" echo "# ALERT! You are entering into a secured area! Your IP, Login Time, #" echo "# Username has been noted and has been sent to the server administrator! #" echo "# This service is restricted to authorized users only. All activities on #" echo "# this system are logged. #" echo "# #" echo "# Unauthorized access will be fully investigated and reported to the #" echo "# appropriate law enforcement agencies. #" echo "# #" echo "###########################################################################" echo "" echo "" fi fi EOFDYN
Création de notre fichier motd dynamique qu’on va rendre exécutable.
sudo touch /usr/local/bin/dynmotd sudo chmod +x /usr/local/bin/dynmotd
Puis copier/coller le texte ci-dessous pour la création de votre dynmotd.sh
sudo cat > /usr/local/bin/dynmotd <<EOF #!/bin/bash # # Author : Thomas Bourcey # Version: 1.3 # # Process count PROCCOUNT=\\$( ps -Afl | wc -l ) PROCCOUNT=\\$( expr \\$PROCCOUNT - 5 ) # Uptime UPTIME=\\$(</proc/uptime) UPTIME=\\${UPTIME%%.*} SECONDS=\\$(( UPTIME%60 )) MINUTES=\\$(( UPTIME/60%60 )) HOURS=\\$(( UPTIME/60/60%24 )) DAYS=\\$(( UPTIME/60/60/24 )) # SYSTEM INFO # Hostname (UPPERCASE) HOSTNAME=\\$( echo \\$(hostname) | tr '[a-z]' '[A-Z]' ) # IP Address (list all ip addresses) IP_ADDRESS=\\$(echo \\$(ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\\.){3}[0-9]*).*/\\2/p' | sed ':a;N;\\$!ba;s/\\n/ , /g') ) # System : Description of the distribution SYSTEM=\\$(echo \\$(lsb_release -d | awk -F':' '{print \\$2}' | sed 's/^\\s*//g') ) # Kernel release KERNEL=\\$( echo \\$(uname -r) ) # CPU Info CPU_INFO=\\$(echo \\$(more /proc/cpuinfo | grep processor | wc -l ) "x" \\$(more /proc/cpuinfo | grep 'model name' | uniq |awk -F":" '{print \\$2}') ) # Total Memory MEMORY=\\$(echo \\$(free -m |grep Mem: | awk -F " " '{print \\$2}') MO) # Memory Used MEMORY_USED=\\$(echo \\$(free -m |grep Mem: | awk -F " " '{print \\$3}') MO) echo -e " \\033[1;31m+++++++++++++++++: \\033[0;37mSystem Data\\033[1;31m :+++++++++++++++++++ + \\033[0;37mHostname \\033[1;31m= \\033[1;32m\\$HOSTNAME \\033[1;31m+ \\033[0;37mAddress \\033[1;31m= \\033[1;32m\\$IP_ADDRESS \\033[1;31m+ \\033[0;37mSystem \\033[1;31m= \\033[1;32m\\$SYSTEM \\033[1;31m+ \\033[0;37mKernel \\033[1;31m= \\033[1;32m\\$KERNEL \\033[1;31m+ \\033[0;37mUptime \\033[1;31m= \\033[1;32m\\$DAYS days, \\$HOURS hours, \\$MINUTES minutes, \\$SECONDS seconds \\033[1;31m+ \\033[0;37mCPU Info \\033[1;31m= \\033[1;32m\\$CPU_INFO \\033[1;31m+ \\033[0;37mMemory \\033[1;31m= \\033[1;32m\\$MEMORY \\033[1;31m+ \\033[0;37mMemory Used \\033[1;31m= \\033[1;32m\\$MEMORY_USED \\033[1;31m+++++++++++++++++: \\033[0;37mUser Data\\033[1;31m :+++++++++++++++++++++ + \\033[0;37mUsername \\033[1;31m= \\033[1;32m`whoami` \\033[1;31m+ \\033[0;37mProcesses \\033[1;31m= \\033[1;32m\\$PROCCOUNT of `ulimit -u` MAX \\033[1;31m+++++++++++++++++: \\033[0;37mInformation/Role\\033[1;31m :++++++++++++++ \\033[1;31m+ \\033[0;37mServer \\033[1;31m= \\033[1;32mINFORMATION MUST BE FILLED /usr/local/bin/dynmotd \\033[1;31m+ \\033[0;37m \\033[1;31m \\033[1;32m- Apache Server (ex.) \\033[1;31m+ \\033[0;37m \\033[1;31m \\033[1;32m- FTP Server (ex.) \\033[1;31m+ \\033[0;37m \\033[1;31m \\033[1;32m- Application Server (ex.) \\033[1;31m+++++++++++++++++++++++++++++++++++++++++++++++++++\\033[0m" EOF
Personnalisation du dynmotd
Actuellement j’ai simplifié son utilisation et je l’ai découpé en 3 sections :
System Data :
- Affichage du hostname
- Affichage de l’adresse IP ou des adresses IP
- Affichage de la version du système
- Affichage de la version du kernel
- Affichage du uptime
- Affichage des informations sur le CPU
- Affichage de l’utilisation de la mémoire
User Data
- Affichage du nom de l’utilisateur
- Affichage des 5 processus les plus gourmands
Information/Role
- C’est la partie à faire à la main. Dedans j’y met les informations sur le serveur. Par exemple si c’est un serveur FTP, ou un serveur Apache, ou un serveur d’administration NIS … etc etc
Chez moi, sur l’un des serveurs, voila ce que ça rend :
Modification du Serveur SFTP
En appliquant ce motd dynamique, lorsqu’on essaye de se connecter avec WinSCP on se retrouve avec un problème : impossible de se connecter.
Nous avons un erreur. Ceci est dût au serveur sftp utilisé par défaut dans les distributions linux. Si vous rencontrez le problème alors il vous sera nécessaire de changer le serveur utilisé dans le fichier /etc/ssh/sshd_config
Commentez la ligne
Subsystem sftp /usr/libexec/openssh/sftp-server
Ajouter la ligne
Subsystem sftp internal-sftp
Merci à Oddball pour m’avoir remonté le problème.
The post Création d’un MOTD dynamique : dynmotd first appeared on Tomzone.