Well Developing stop with this year when it ends ...

... So on here is my Last work ... for this year ...

A sample bash Script for Linux developed on OpenSuSE 13.2

*) Check Admin Numbers
*) Check Servers allowed
*) Check cmd allowed
*) log incoming sms on error
*) send to admins sms
*) answer to Admins is not a Server cmd if incoming not from admins
*) ssh to Servers allowed cmd with User pwd and Root pwd
*) Running ssh cmd as Nobody
*) defined Users for ssh allowed for the SMS answer
*) Script password

Let the User Nobody Access /var/log/sms_incomming.log
With "chown nobody:nogroup file"
chmod +x smsd_notify.sh
chmod +x event.sh

event.sh
#!/bin/bash
#!/dev/tty1
NOW=$(date +"%m-%d-%y");
HOUR=$(date +"%T");
#run this script only when a message was received.
#sms like: PASSWORD ACTION rootpwd userpwd user host port cmd
#sms like: PASSWORD ACTION rootpwd userpwd user host@host port cmd
#cmd like: reboot , or call a Script like: /usr/local/bin/script.sh what have no options
################################### EDIT THIS ###########################################
# script PASSWORD
PASSWORD="Password"
# admin sms number
ADMIN="43676xxxxxxx"
ADMIN2="43676xxxxxxx"
# hosts in chain
# Nobody's Password
NBPWD="Nobody"
# host list for 2 accessable servers
HOSTS2=('192.168.0.10' '192.168.0.11');
# end host list
USER1="user1"
USER2="user2"
################################### EDIT THIS ###########################################

if [ "$1" = "RECEIVED" ]; then

  TEXT=`sed -e '1,/^$/ d' < $2`
#Extract data from the SMS file
  SENDER=`grep "From: " $2 | cut -d " " -f2`
  RCVPASS=`echo "$TEXT" | cut -d " " -f1`
  ACTION=`echo "$TEXT" | tr "a-z" "A-Z" | cut -d " " -f2`
  ROOTPWD=`echo "$TEXT" | cut -d " " -f3`
  USERPWD=`echo "$TEXT" | cut -d " " -f4`
  USERNAME=`echo "$TEXT" | cut -d " " -f5`
  HOSTS=`echo "$TEXT" | tr "A-Z" "a-z" | cut -d " " -f6`
  PORTS=`echo "$TEXT" | cut -d " " -f7`
  CMD=`echo "$TEXT" | cut -d " " -f8`

  if [ -z "$PORTS" ]; then
        PORTS="22"
  else
        PORTS=`echo "$TEXT" | cut -d " " -f7`
  fi

  TARGET=(${HOSTS//@/ });

case "$SENDER" in

        "$ADMIN")
        /etc/smsd_notify.sh $ADMIN "Info: $ACTION@${HOSTNAME} Is accepted From User: ${USERNAME} $NOW $HOUR"
        ;;

        "$ADMIN2")
        /etc/smsd_notify.sh $ADMIN2 "Info: $ACTION@${HOSTNAME} Is accepted From User: ${USERNAME} $NOW $HOUR"
        ;;

        *)
        /etc/smsd_notify.sh $ADMIN "You have a new Message from $SENDER : $TEXT $NOW $HOUR"
       /etc/smsd_notify.sh $ADMIN2 "You have a new Message from $SENDER : $TEXT $NOW $HOUR"
        exit 0
        ;;

        esac

  for G in ${TARGET[@]} ; do

  FOUND=`echo "${HOSTS2[*]}" | grep "$G"`

  if [ "${FOUND}" != "" ]; then

  if [ "$PASSWORD" = "$RCVPASS" ]; then

 case "${G}" in  

                "${HOSTS2[0]}")
                echo $NBPWD | sudo -u nobody -S bash -c : && RUNAS="sudo -u nobody"
               
$RUNAS bash<<_
#!/bin/bash
#!/dev/tty0

    case "$ACTION" in

        #ssh
        SSH)
        sshpass -p "$USERPWD" ssh -p $PORTS -t -A -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null -E ~/ssh.log  ${USERNAME}@${G} "bash -c 'echo $ROOTPWD | sudo -u root -S ${CMD} ; exit'";
        ;;

        #else cmd
        *)
        echo Warning incomming sms for $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR >> /var/log/sms_incomming.log
        if [ "${USER1}" = "${USERNAME}" ];then
        /etc/smsd_notify.sh $ADMIN  "Warning: $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR";
        elif [ "${USER2}" = "${USERNAME}" ];then
        /etc/smsd_notify.sh $ADMIN2  "Warning: $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR";
        fi
        ;;

     esac
_
                ;;
               
                "${HOSTS2[1]}")
                echo $NBPWD | sudo -u nobody -S bash -c : && RUNAS="sudo -u nobody"
               
$RUNAS bash<<_
#!/bin/bash
#!/dev/tty0

    case "$ACTION" in

        #ssh
        SSH)
        sshpass -p "$USERPWD" ssh -p $PORTS -t -A -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null -E ~/ssh.log  ${USERNAME}@${G} "bash -c 'echo $ROOTPWD | sudo -u root -S ${CMD} ; exit'";
        ;;

        #else cmd
        *)
        echo Warning incomming sms for $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR >> /var/log/sms_incomming.log
        if [ "${USER1}" = "${USERNAME}" ];then
        /etc/smsd_notify.sh $ADMIN  "Warning: $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR";
        elif [ "${USER2}" = "${USERNAME}" ];then
        /etc/smsd_notify.sh $ADMIN2  "Warning: $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR";
        fi
        ;;

     esac
_
              ;;

     esac

        fi
 else
       echo Warning incomming sms for $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR >> /var/log/sms_incomming.log
        if [ "${USER1}" = "${USERNAME}" ];then
        /etc/smsd_notify.sh $ADMIN  "Warning: $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR";
        elif [ "${USER2}" = "${USERNAME}" ];then
        /etc/smsd_notify.sh $ADMIN2 "Warning: $ACTION@${G} Port: ${PORTS} rootpwd: ${ROOTPWD} userpwd: ${USERPWD} from User: ${USERNAME} $NOW $HOUR";
        fi
  fi
        done
fi
exit 0

 
 
'bash' Syntax Highlight powered by GeSHi


And the smsd_notify.sh
#!/bin/bash
# This script send a text sms at the command line by creating
# a sms file in the outgoing queue.

# $1 is the destination phone number.
# $2 is the message text.
# like: your_script.sh 436768889901 "long message text"
ARGV=("$@")
ARGC=("$#")

#main - read incoming sms message and queue it to smsd
        msg_rcpt=$1
        msg_body=$2
        msg_body_160=${msg_body:0:160}

# now send the sms's
            outgoing="/var/spool/sms/GSM/GSM1"

            file=`mktemp $outgoing/smsd_XXXXXX`
            echo "To: $msg_rcpt" >> $file
            echo "" >> $file
            echo "$msg_body_160" >> $file
exit 0
 
'bash' Syntax Highlight powered by GeSHi


Well know it has bugs but answers welcome ...

Good day 8)