サーバーログイン時に任意の文字列を動的に出力したい

ログインをした時に、任意の文字列を出力するには、「/etc/motd」に記述することで可能ですが、少しだけ小細工をすることで、動的なメッセージを出力することが可能です。

シェルスクリプトの作成

出力したいメッセージを動的に取得できるようなシェルスクリプトを用意します。

# vim /appres/motd/motd_update.bash
#!/bin/bash
echo -e "
##########
Motd Updated      : $(date)
Kernel            : $(uname -r)
Hostname          : $(hostname)
IP Address (eth0) : $(ip addr show eth0 2>/dev/null | grep 'inet ' | sed -e 's/.*inet \([^ ]*\)\/.*/\1/')
Uptime            : $(uptime | sed -e 's/^ //')
CPU Usage (Core)  : $(echo $(ps -eo pcpu | awk 'NR>1' | awk '{tot=tot+$1} END {print tot}') / $(cat /proc/cpuinfo | grep -c processor) | bc) %
Memory Used/Total : $(free -m | head -n 2 | tail -n 1 | awk {'print $3'})/ $(free -m | head -n 2 | tail -n 1 | awk {'print $2'}) MB
Swap Used/Total   : $(free -m | tail -n 1 | awk {'print $3'})/$(free -m | tail -n 1 | awk {'print $2'}) MB
##########
" > /etc/motd

自動実行の設定

作成したシェルスクリプトを定期的に自動実行するように、crondに追加します。

5分ごとに実行するように設定してみました。

# vim /etc/cron.d/motd_update
# motd_update
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
*/5 * * * * root /appres/motd/motd_update.bash

結果

ログインをすると、メッセージが出力されるようになります。

# ssh centos74
root@centos74's password:xxxx
Last login: Sun Apr 8 17:14:04 2018 from centos74.prd.orangetakam.local

##########
Motd Updated      : 2018年 4月 8日 日曜日 17:35:01 JST
Kernel            : 3.10.0-693.17.1.el7.x86_64
Hostname          : centos74
IP Address (eth0) : 192.168.1.10
Uptime            : 17:35:01 up 2:29, 1 user, load average: 0.00, 0.01, 0.05
CPU Usage (Core)  : 0 %
Memory Used/Total : 100/ 864 MB
Swap Used/Total   : 0/1023 MB
##########

[root@centos74 ~]#