#!/bin/bash
#< SSH into multiple servers and execute the same command on each
BASENAME="/usr/bin/basename"
ECHO="/bin/echo"
SSH="/usr/bin/ssh"
TR="/usr/bin/tr"
SERVERS=""
COMMAND=""
THISPROG=$( ${BASENAME} $0 )
function print_usage {
{
${ECHO} "Usage: ${THISPROG} [-h] -s <server1,server2,..,servern> -c \"command\""
${ECHO} " -c Command to execute on each host"
${ECHO} " -s Comma delimeted list of hostnames"
${ECHO} " -h Print this help messsage"
} >&2
}
function check_args {
if [ "${SERVERS}" = "" -o "${COMMAND}" = "" ]; then
${ECHO} "Both -s and -c must be specified"
exit 1
fi
}
function do_ssh {
SERVERS=$( ${ECHO} "${SERVERS}" | ${TR} ',' ' ' )
for SERVER in ${SERVERS}; do
${ECHO} "===[ ${USER}@${SERVER} ${COMMAND} ]==="
${SSH} ${SERVER} "${COMMAND}"
done
}
while getopts ":hc:s:" OPTION; do
case ${OPTION} in
"h") print_usage && exit 0 ;;
"c") COMMAND="${OPTARG}" ;;
"s") SERVERS="${OPTARG}" ;;
* ) print_usage && exit 1 ;;
esac
done
shift $(( ${OPTIND} - 1 ))
if [ "$#" -ne "0" ]; then
print_usage && exit 1
fi
check_args
do_ssh
exit 0