If you read our previous article Debian Stretch Dynamic MOTD, then you may be wondering how this can be accomplished on your fresh new Debian Buster setup. This is what is presented to the user in terminal when a log on occurs using our previous article.

This feature is very nice as it will give you a quick look at useful information. Unfortunately, Debian Server does not include the dynamic MOTD. First you will need to install some prerequisites and build the directory structure. To do so, run the following commands in terminal. As of writing, update notifications are no longer supported using Update Notifier Common as was previously the case as using Debian MOTD Update Notifier.
# install lsb-release sudo apt-get install lsb-release # install figlet to enable ASCII art sudo apt-get install figlet # create directory mkdir /etc/update-motd.d/ # change to new directory cd /etc/update-motd.d/ # create dynamic files touch 00-header ; touch 10-sysinfo; touch 90-footer # make files executable chmod +x /etc/update-motd.d/* # remove MOTD file rm /etc/motd
Once the above commands have been run, you can move on to populating the files you created. Below you can copy and paste.
Header (00-header
)
#!/bin/sh # # 00-header - create the header of the MOTD # Copyright (c) 2013 Nick Charlton # Copyright (c) 2009-2010 Canonical Ltd. # # Authors: Nick Charlton <hello@nickcharlton.net> # 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. [ -r /etc/lsb-release ] ; /etc/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 figlet $(hostname) printf "\n" printf "Welcome to %s (%s).\n" "$DISTRIB_DESCRIPTION" "$(uname -r)" printf "\n"
System Information (10-sysinfo
)
#!/bin/bash # # 10-sysinfo - generate the system information # Copyright (c) 2013 Nick Charlton # # Authors: Nick Charlton <hello@nickcharlton.net> # # 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. date=`date` load=`cat /proc/loadavg | awk '{print $1}'` root_usage=`df -h / | awk '/\// {print $(NF-1)}'` memory_usage=`free -m | awk '/Mem:/ { total=$2; used=$3 } END { printf("%3.1f%%", used/total*100)}'` swap_usage=`free -m | awk '/Swap/ { printf("%3.1f%%", $3/$2*100) }'` users=`users | wc -w` time=`uptime | grep -ohe 'up .*' | sed 's/,/\ hours/g' | awk '{ printf $2" "$3 }'` processes=`ps aux | wc -l` ip=`hostname -I | awk '{print $1}'` echo "System information as of: $date" echo printf "System Load:\t%s\tIP Address:\t%s\n" $load $ip printf "Memory Usage:\t%s\tSystem Uptime:\t%s\n" $memory_usage "$time" printf "Usage On /:\t%s\tSwap Usage:\t%s\n" $root_usage $swap_usage printf "Local Users:\t%s\tProcesses:\t%s\n" $users $processes echo
Footer (90-footer
)
#!/bin/sh # # 99-footer - write the admin's footer to the MOTD # Copyright (c) 2013 Nick Charlton # Copyright (c) 2009-2010 Canonical Ltd. # # Authors: Nick Charlton <hello@nickcharlton.net> # 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. [ -f /etc/motd.tail ] ; cat /etc/motd.tail || true

Once these files are populated with the above, you should now be able to logout and then log back in either using putty or on the console and you will be presented with something that looks like below.
Can this be accomplished on Redhat based distro(s)?
Currently im trying this on OEL8
I had a real hard time to get this working with Debian 10 and turned out what motd was disabled in so many different ways.
First I followed your guide and created /etc/update-motd.d with all files (don’t forget chmod +x).
Nothing happened.
Then I checked motd service and got a message about it’s dead
systemctl status motd
motd.service
Loaded: masked (/dev/null)
Active: inactive (dead)
Then I check the file I got this message
file /lib/systemd/system/motd.service
/lib/systemd/system/motd.service: symbolic link to /dev/null
To fix this I just removed the service and reloaded systemctl
rm /lib/systemd/system/motd.service
systemctl daemon-reload
Still, no message, but after some searching, I’ve found ut what these lines need to be inside sshd_config and ssh (pam.d)
/etc/ssh/sshd_config
# let pam.d print motd instead of sshd_config
UsePAM yes
PrintMotd no
/etc/pam.d/ssh
session optional pam_motd.so motd=/run/motd.dynamic
# session optional pam_motd.so noupdate
After I restarted ssh it worked.
/etc/init.d/ssh restart
I think I spent far to much time on this, but I wanted a motd and displaying a simple textmessage on login was far more complicated than I imagine =D
Thanks for the nice motd, it’s very informative.
Strange thing, I tried this tutorial on Debian 9 and it worked fine. After having reproduced it on Debian 10, I can’t get it to run.
Apologies, had an extra . in the 00-header file. Should be 100% now. Please report back.
Hi Matthew, everything works well now. Thanks for your fast reply and trouble shooting.
Thankyou