|
@@ -4,8 +4,11 @@
|
|
|
#
|
|
#
|
|
|
# Super SSH Script
|
|
# Super SSH Script
|
|
|
#
|
|
#
|
|
|
-# Version 8 [06.2016]
|
|
|
|
|
|
|
+# Version 9.1 [11.2017]
|
|
|
#
|
|
#
|
|
|
|
|
+# V9.2 Rewrite project menu output, change from echo to printf
|
|
|
|
|
+# V9.1 Project overview now accept project names as input [08.11.2017]
|
|
|
|
|
+# V9. [06.10.2017]
|
|
|
# V8. Added group function again [08.2017]
|
|
# V8. Added group function again [08.2017]
|
|
|
# V7. Rewrite script - now with functions [06.2016]
|
|
# V7. Rewrite script - now with functions [06.2016]
|
|
|
# V6. Added function to pass parameters to server menu [05.2012]
|
|
# V6. Added function to pass parameters to server menu [05.2012]
|
|
@@ -16,17 +19,18 @@
|
|
|
# V1. Create script
|
|
# V1. Create script
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
#### config ####
|
|
#### config ####
|
|
|
## Wenn true wird jeder Host 1x angepingt und der Status ausgegeben
|
|
## Wenn true wird jeder Host 1x angepingt und der Status ausgegeben
|
|
|
PINGHOST="true" # gueltige Werte [true,false]
|
|
PINGHOST="true" # gueltige Werte [true,false]
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
#### do not change ####
|
|
#### do not change ####
|
|
|
## used to kill from subshell
|
|
## used to kill from subshell
|
|
|
MAINPID=$$
|
|
MAINPID=$$
|
|
|
|
|
|
|
|
|
|
+## locationOfScript
|
|
|
|
|
+locationOfScript=$(dirname "$(readlink -e "$0")")
|
|
|
|
|
+
|
|
|
|
|
|
|
|
#=== FUNCTION ================================================================
|
|
#=== FUNCTION ================================================================
|
|
|
# NAME: get_projects
|
|
# NAME: get_projects
|
|
@@ -35,7 +39,7 @@ MAINPID=$$
|
|
|
# RETURNS:
|
|
# RETURNS:
|
|
|
#===============================================================================
|
|
#===============================================================================
|
|
|
function get_projects() {
|
|
function get_projects() {
|
|
|
- for project in $(cat projects.txt | grep -ve "^#" -e "^$" | cut -d ":" -f "1" | awk '!a[$0]++'); do
|
|
|
|
|
|
|
+ for project in $(cat $locationOfScript/projects.txt | grep -ve "^#" -e "^$" | cut -d ":" -f "1" | awk '!a[$0]++'); do
|
|
|
projects=$projects:$(echo $project)
|
|
projects=$projects:$(echo $project)
|
|
|
project_count=$[project_count+1]
|
|
project_count=$[project_count+1]
|
|
|
done
|
|
done
|
|
@@ -56,7 +60,7 @@ function get_groups() {
|
|
|
groups_count=0
|
|
groups_count=0
|
|
|
|
|
|
|
|
## be carfully: $GROUPS is an BASH internal variable
|
|
## be carfully: $GROUPS is an BASH internal variable
|
|
|
- for group in $(cat projects.txt | grep -ve "^#" -e "^$" | grep "$1" | cut -d ":" -f "5" | awk '!a[$0]++'); do
|
|
|
|
|
|
|
+ for group in $(cat $locationOfScript/projects.txt | grep -ve "^#" -e "^$" | grep "$1" | cut -d ":" -f "5" | awk '!a[$0]++'); do
|
|
|
groups=$groups:$(echo $group)
|
|
groups=$groups:$(echo $group)
|
|
|
groups_count=$[groups_count+1]
|
|
groups_count=$[groups_count+1]
|
|
|
done
|
|
done
|
|
@@ -117,13 +121,13 @@ function print_projectmenu() {
|
|
|
|
|
|
|
|
# Ausgabe des Headers
|
|
# Ausgabe des Headers
|
|
|
if [ "$PINGHOST" == "true" ]; then
|
|
if [ "$PINGHOST" == "true" ]; then
|
|
|
- echo -e "\n\n\033[1;33mID USER\t Host\t\t[Status]\tGruppe\t\tBeschreibung \033[0m "
|
|
|
|
|
|
|
+ printf "\n\033[1;33m%3s %-11s %-20s %-12s %-13s %s\033[0m\n" "ID" "USER" "Host" "[Status]" "Gruppe" "Beschreibung"
|
|
|
else
|
|
else
|
|
|
echo -e "\033[1;33mID USER\t Host\tGruppe\t\t\tBeschreibung \033[0m "
|
|
echo -e "\033[1;33mID USER\t Host\tGruppe\t\t\tBeschreibung \033[0m "
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
- cat projects.txt | grep -ve "^#" -e "^$" | grep -E "^$project.*$GROUP_FILTER" | while read host ; do
|
|
|
|
|
|
|
+ cat $locationOfScript/projects.txt | grep -ve "^#" -e "^$" | grep -E "^$project.*$GROUP_FILTER" | while read host ; do
|
|
|
|
|
|
|
|
LINENUMBER=$[LINENUMBER+1]
|
|
LINENUMBER=$[LINENUMBER+1]
|
|
|
|
|
|
|
@@ -134,11 +138,11 @@ function print_projectmenu() {
|
|
|
SSHPORT=`echo $host |cut -f 6 -d ':' `
|
|
SSHPORT=`echo $host |cut -f 6 -d ':' `
|
|
|
|
|
|
|
|
## check some variables
|
|
## check some variables
|
|
|
- [[ -z $USERNAME ]] && USERNAME=" \t " || USERNAME=" "$USERNAME" @"
|
|
|
|
|
|
|
+ [[ -z $USERNAME ]] && USERNAME="" || USERNAME="$USERNAME @"
|
|
|
[[ -z $SSHPORT ]] && SSHPORT="22"
|
|
[[ -z $SSHPORT ]] && SSHPORT="22"
|
|
|
- [[ "$PINGHOST" == "true" ]] && ping_host $SSHHOST $SSHPORT || STATUS="\t"
|
|
|
|
|
|
|
+ [[ "$PINGHOST" == "true" ]] && ping_host $SSHHOST $SSHPORT || STATUS="\t"
|
|
|
|
|
|
|
|
- echo -e "$LINENUMBER$USERNAME $SSHHOST\t$STATUS\t$GROUP\t\t$DESCRIBTION"
|
|
|
|
|
|
|
+ printf "%2s %12s %-20s $STATUSCOLOR%-12s\033[0m %-13s %s\n" "$LINENUMBER" "$USERNAME" "$SSHHOST" "$STATUS" "$GROUP" "$DESCRIBTION"
|
|
|
done
|
|
done
|
|
|
|
|
|
|
|
# Ausgabe der Standarteintraege
|
|
# Ausgabe der Standarteintraege
|
|
@@ -157,9 +161,13 @@ function ping_host() {
|
|
|
## returncode doesn't work in subshell ...
|
|
## returncode doesn't work in subshell ...
|
|
|
PING=$(netcat -w 1 -z $1 $2 >> /dev/null 2>&1 ; echo $? )
|
|
PING=$(netcat -w 1 -z $1 $2 >> /dev/null 2>&1 ; echo $? )
|
|
|
|
|
|
|
|
- [ "$PING" -eq 0 ] \
|
|
|
|
|
- && STATUS="[\033[1;32mONLINE\033[0m]" \
|
|
|
|
|
- || STATUS="[\033[1;31mOFFLINE\033[0m]"
|
|
|
|
|
|
|
+ if [ "$PING" -eq 0 ]; then
|
|
|
|
|
+ STATUS="[ONLINE]"
|
|
|
|
|
+ STATUSCOLOR="\033[1;32m"
|
|
|
|
|
+ else
|
|
|
|
|
+ STATUS="[OFFLINE]"
|
|
|
|
|
+ STATUSCOLOR="\033[1;31m"
|
|
|
|
|
+ fi
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -187,10 +195,13 @@ function check_input() {
|
|
|
return 0
|
|
return 0
|
|
|
else
|
|
else
|
|
|
## happen when projectname is directly given
|
|
## happen when projectname is directly given
|
|
|
- [[ `grep "$project:$1" projects.txt` ]] && return 0 || return 1
|
|
|
|
|
|
|
+ [[ `grep "$project:$1" $locationOfScript/projects.txt` ]] && return 0 || return 1
|
|
|
fi
|
|
fi
|
|
|
elif [ `echo "$1" | grep -E ^[[:digit:]]+$` ] && [ "$1" -le "$project_count" ]; then
|
|
elif [ `echo "$1" | grep -E ^[[:digit:]]+$` ] && [ "$1" -le "$project_count" ]; then
|
|
|
return 0
|
|
return 0
|
|
|
|
|
+ ## check for project-names
|
|
|
|
|
+ elif [ `cat $locationOfScript/projects.txt | cut -d ":" -f1 | egrep -v "^$|#" | sort -u | grep $1` ]; then
|
|
|
|
|
+ return 0
|
|
|
else
|
|
else
|
|
|
return 1
|
|
return 1
|
|
|
fi
|
|
fi
|
|
@@ -209,10 +220,10 @@ function ssh_to_host() {
|
|
|
## check if number or hostname given
|
|
## check if number or hostname given
|
|
|
if [ `echo $1 | grep -E ^[[:digit:]]+$` ]; then
|
|
if [ `echo $1 | grep -E ^[[:digit:]]+$` ]; then
|
|
|
## linenumber
|
|
## linenumber
|
|
|
- HOSTSTRING=$(grep "^$project" projects.txt | head -n $1 | tail -n 1 )
|
|
|
|
|
|
|
+ HOSTSTRING=$(grep "^$project" $locationOfScript/projects.txt | head -n $1 | tail -n 1 )
|
|
|
else
|
|
else
|
|
|
## hostnme
|
|
## hostnme
|
|
|
- HOSTSTRING==$(grep "^$project:$1" projects.txt )
|
|
|
|
|
|
|
+ HOSTSTRING==$(grep "^$project:$1" $locationOfScript/projects.txt )
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
SSHHOST=`echo $HOSTSTRING |cut -f 2 -d ':' `
|
|
SSHHOST=`echo $HOSTSTRING |cut -f 2 -d ':' `
|
|
@@ -236,7 +247,7 @@ while ! check_input $INPUT ; do
|
|
|
clear
|
|
clear
|
|
|
echo " == Super SSH Sprungmenu =="
|
|
echo " == Super SSH Sprungmenu =="
|
|
|
echo
|
|
echo
|
|
|
- cat projects.txt | grep -ve "^#" -e "^$" | cut -d ":" -f "1" | awk '!a[$0]++' | cat -n
|
|
|
|
|
|
|
+ cat $locationOfScript/projects.txt | grep -ve "^#" -e "^$" | cut -d ":" -f "1" | awk '!a[$0]++' | cat -n
|
|
|
echo
|
|
echo
|
|
|
echo " x Abbruch"
|
|
echo " x Abbruch"
|
|
|
echo
|
|
echo
|
|
@@ -267,4 +278,3 @@ while ! check_input $INPUT2 INPUT2 ; do
|
|
|
done
|
|
done
|
|
|
|
|
|
|
|
ssh_to_host $INPUT2
|
|
ssh_to_host $INPUT2
|
|
|
-
|
|
|