123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- #!/bin/bash
- # Dynamic Motd
- # Robert Tulke, rt@debian.sh
- ## only root can start
- if [ $(whoami) != root ]; then
- #cat /etc/motd
- exit 0
- fi
- ## version
- version="dynmotd v0.8"
- fqdn=$(hostname --fqdn)
- ## some colors for a scheme
- C_RED="\033[0;31m"
- C_BLUE="\033[0;34m"
- C_BLACK="\033[0;30m"
- C_CYAN="\033[0;36m"
- C_PINK="\033[0;35m"
- C_GREY="\033[0;37m"
- C_LGREEN="\033[1;32m"
- ## color schemes
- # DOT, day of the tentacle scheme
- F1=${C_GREY}
- F2=${C_PINK}
- F3=${C_LGREEN}
- F4=${C_RED}
- ## create .maintenance file if not exist
- if [ ! -f /root/.maintenance ]; then
- touch /root/.maintenance
- fi
- ## investigate linux distribution
- ## create .environment file if not exist
- function createenv {
- if [ ! -f /root/.environment ]; then
- echo "First login... We want to assign a function name for $fqdn,"
- echo "like: Backup Server|File Server|Gateway|Proxy|..."
- echo
- echo -n "System Function: "
- read SYSFUNCTION
- echo -n "System Environment, like PRD|TST|ITG: "
- read SYSENV
- echo -n "Service Level Agreement, like SLA1|SLA2|SLA3: "
- read SYSSLA
- touch /root/.environment
- echo "SYSENV=\"$SYSENV\"" >> /root/.environment
- echo "SYSFUNCTION=\"$SYSFUNCTION\"" >> /root/.environment
- echo "SYSSLA=\"$SYSSLA\"" >> /root/.environment
- fi
- }
- ## environment check
- if [ ! -f /root/.environment ]; then
- createenv ; # if not exist then create
- fi
- ## include sys environment variables
- source /root/.environment
- ## test sys .environment variables, if any of them are empty or currupt
- if [ -z "${SYSFUNCTION}" ] || [ -z "${SYSENV}" ] || [ -z "${SYSSLA}" ]; then
- rm /root/.environment
- createenv ; # variables are exist but empty, create new
- fi
- ## get a list of all logged in users
- LOGGEDIN=$( echo $( for i in $( who |awk -F '[()]' '{ print $2 '} |sort -n ) ; do echo $i; done |uniq -c |awk {'print "(" $1 ") "$2","'} ) |sed 's/,$//' |sed '1,$s/\([^,]*,[^,]*,[^,]*,\)/\1\n\\033[1;32m\t /g' )
- ## get my terminal
- MYTTY=$(tty |sed 's/\/dev\///')
- ## get my hostname
- MYHOST=$(who |egrep $MYTTY |awk -F '[()]' {'print $2'})
- ## extract my apn from fqdn
- APN=$(echo $MYHOST |awk -F '()' '{print $1}')
- ## get current procs
- PROCCOUNT=$(ps -Afl |egrep -v 'ps|wc' |wc -l)
- ## get maxium usable procs
- PROCMAX=$(ulimit -u)
- ## get my own user groups
- GROUPZ=$(groups)
- ## how many ssh super user (root) are there
- SUPERUSERCOUNT=$(cat /root/.ssh/authorized_keys |egrep '^ssh-' |wc -l)
- ## who is super user (ignore root@)
- SUPERUSER=$(cat /root/.ssh/authorized_keys |egrep '^ssh-' |egrep -v 'root\@|^$|^.$' |awk '{if ($0) print}' |awk {'print $3" "$4'} |sed 's/@.*$//g'| awk -F [.] {'print $1'} |awk -vq=" " 'BEGIN{printf""}{printf(NR>1?",":"")q$0q}END{print""}' |cut -c2- |sed 's/ ,/,/g' |sed '1,$s/\([^,]*,[^,]*,[^,]*,[^,]*,[^,]*,\)/\1\n\\033[1;32m\t /g')
- #awk -vq=" " 'BEGIN{printf""}{printf(NR>1?",":"")q$0q}END{print""}' |cut -c2- |sed 's/ ,/,/g' |sed '1,$s/\([^,]*,[^,]*,[^,]*,[^,]*,\)/\1\n\\033[1;32m\t /g' |sed 's/\b\(.\)/\u\1/g')
- ## how many system users are there, only check uid <1000 and has a login shell
- SYSTEMUSERCOUNT=$(cat /etc/passwd |egrep '\:x\:10[0-9][0-9]' |grep '\:\/bin\/bash' |wc -l)
- ## who is a system user, only check uid <1000 and has a login shell
- SYSTEMUSER=$(cat /etc/passwd |egrep '\:x\:10[0-9][0-9]' |egrep '\:\/bin\/bash|\:\/bin/sh' |awk '{if ($0) print}' |awk -F ':' {'print $1'} |awk -vq=" " 'BEGIN{printf""}{printf(NR>1?",":"")q$0q}END{print""}' |cut -c2- |sed 's/ ,/,/g' |sed '1,$s/\([^,]*,[^,]*,[^,]*,[^,]*,[^,]*,\)/\1\n\\033[1;32m\t /g')
- ## print any authorized ssh-key-user of a existing system user
- KEYUSER=$(for i in $(cat /etc/passwd |egrep '\:x\:10[0-9][0-9]' |awk -F ':' {'print $6'}) ; do cat $i/.ssh/authorized_keys 2> /dev/null |grep ^ssh- |awk '{print substr($0, index($0,$3)) }'; done |sed 's/@.*$//g'| awk -F [.] {'print $1 $2'} |sed 's/\b\(.\)/\u\1/g' |awk -vq=" " 'BEGIN{printf""}{printf(NR>1?",":"")q$0q}END{print""}' |cut -c2- |sed 's/ , /, /g' |sed '1,$s/\([^,]*,[^,]*,[^,]*,[^,]*,\)/\1\n\\033[1;32m\t /g' )
- ## not working
- KEYUSERCOUNT=$(for i in $(cat /etc/passwd |egrep '\:x\:10[0-9][0-9]' |awk -F ':' {'print $6'}) ; do cat $i/.ssh/authorized_keys 2> /dev/null |grep ^ssh- |awk '{print substr($0, index($0,$3)) }'; done |wc -l)
- ## get system uptime
- UPTIME=$(uptime |cut -c2- |cut -d, -f1)
- ## get maximum usable memory
- MEMMAX=$(echo $(cat /proc/meminfo |egrep MemTotal |awk {'print $2'})/1024 |bc)
- ## get current free memory
- MEMFREE=$(echo $(cat /proc/meminfo |egrep MemFree |awk {'print $2'})/1024 |bc)
- ## get maximum usable swap space
- SWAPMAX=$(echo $(cat /proc/meminfo |egrep SwapTotal |awk {'print $2'})/1024 |bc)
- ## get current free swap space
- SWAPFREE=$(echo $(cat /proc/meminfo |egrep SwapFree |awk {'print $2'})/1024 |bc)
- ## get current kernel version
- UNAME=$(uname -r)
- ## get my fqdn hostname.domain.name.tld
- HOSTNAME=$fqdn
- ## get my main ip
- IP=$(host $HOSTNAME |awk {'print $4'})
- ## get system cpu model
- CPUMODEL=$(cat /proc/cpuinfo |egrep 'model name' |uniq |awk -F ': ' {'print $2'})
- ## how many cpu i have
- CPUS=$(cat /proc/cpuinfo|grep processor|wc -l)
- ## how many user logged in at the moment
- SESSIONS=$(who |wc -l)
- ## get my username
- WHOIAM=$(whoami)
- ## get my user id
- ID=$(id)
- ## get runnig distribution name
- if [ -f /etc/SuSE-release ]; then
- VERSION=$(cat /etc/SuSE-release |egrep SUSE -m 1)
- ## get the curernt installed patch level
- PATCHLEVEL=$(cat /etc/SuSE-release |egrep PATCHLEVEL |awk -F '= ' {'print $2'})
- DISTRIBUTION="$VERSION SP$PATCHLEVEL"
- fi
- ## get runnig distribution name
- if [ -f /etc/debian_version ]; then
- PATCHLEVEL=$(cat /etc/debian_version)
- DISTRIBUTION="Debian GNU/Linux $PATCHLEVEL"
- fi
- ## get latest maintenance information
- #MAINTENANCE1=$(cat /root/.maintenance)
- function getmaintenance {
- COUNT=1
- while read line; do
- NAME=$line;
- echo "$COUNT $NAME"
- COUNT=$((COUNT+1))
- done < /root/.maintenance
- }
- MAINTENANCE=$(getmaintenance)
- ## get current storage information, how many space are left :)
- STORAGE=$(df -h |sed -e 's/^File.*$/\x1b[0;37m&\x1b[1;32m/' | sed -e 's/^Datei.*$/\x1b[0;37m&\x1b[1;32m/' |egrep -v docker )
- ## Main Menu
- echo -e "
- ${F2}============[ ${F1}System Data${F2} ]====================================================
- ${F1} Hostname ${F2}= ${F3}$HOSTNAME
- ${F1} Address ${F2}= ${F3}$IP
- ${F1} Kernel ${F2}= ${F3}$UNAME
- ${F1} Distribution ${F2}= ${F3}$DISTRIBUTION
- ${F1} Uptime ${F2}= ${F3}$UPTIME
- ${F1} CPU ${F2}= ${F3}$CPUS x $CPUMODEL
- ${F1} Memory ${F2}= ${F3}$MEMFREE MB Free of $MEMMAX MB Total
- ${F1} Swap Memory ${F2}= ${F3}$SWAPFREE MB Free of $SWAPMAX MB Total
- ${F1} Processes ${F2}= ${F3}$PROCCOUNT of $PROCMAX MAX
- ${F2}============[ ${F1}Storage Data${F2} ]===================================================
- ${F3}${STORAGE}
- ${F2}============[ ${F1}User Data${F2} ]======================================================
- ${F1} Username ${F2}= ${F3}$WHOIAM, ($APN)
- ${F1} Privileges ${F2}= ${F3}$ID
- ${F1} Sessions ${F2}= ${F3}[$SESSIONS] $LOGGEDIN
- ${F1} SystemUsers ${F2}= ${F3}[$SYSTEMUSERCOUNT] $SYSTEMUSER
- ${F1} SuperUsers ${F2}= ${F3}[$SUPERUSERCOUNT] $SUPERUSER
- ${F1} SshKeyUsers ${F2}= ${F3}[$KEYUSERCOUNT] $KEYUSER
- ${F2}============[ ${F1}Environment Data${F2} ]===============================================
- ${F1} Function ${F2}= ${F3}$SYSFUNCTION
- ${F1} Environment ${F2}= ${F3}$SYSENV
- ${F1}Service Level ${F2}= ${F3}$SYSSLA
- ${F2}============[ ${F1}Maintenance Information${F2} ]========================================
- ${F4}$(getmaintenance)
- ${F2}=============================================================[ ${F1}$version${F2} ]==
- ${F1}
- "
|