[OpenPandora] SSH Remote GUI Portierung

Shellscript  (02.08.2011 01:41) Eine Portierung der SSH Remote GUI für die OpenPandora.
Nutzt Zenity statt Dialog.

Quellcode (ausblenden | aufklappen)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# remotegui.accounts ----------------------------------------------------
 
# Definition der Verbindungen fuer die SSH Connection GUI
#
# Schema:
# name ; ssh root@local -p 1234 -i keyfile
# Der Name muss einzigartig sein! Ueber diesen wird der passende Befehl gesucht.
#
# ========================================================================================================
 
# SSH Accounts
local storagestar ; root@storagestar ; ssh root@storagestar
local wirelessdock ; root@wirelessdock ; ssh root@wirelessdock
 
# remotegui.sh ----------------------------------------------------------
 
 
#!/bin/bash
#------------------------------------------------------------------------------------------------
# Hauptscript fuer die SSH Connection GUI
# (c) 2011 by Christian Blechert (www.blechert.name)
# Veroeffentlicht unter der Creative Commons License (www.creativecommons.org/)
 
#- Konfiguration---------------------------------------------------------------------------------
 
#--> Temp Datei welche in neuem Tab gestartet wird
_exectemp="/tmp/ssh_remote_gui_exec.$$"
#--> Datei mit den Eintraegen des Hauptmenues
CONNECTION_FILE="remotegui.accounts"
#--> Ausgabe vor Ausfuehrung des Befehls
HEADER="echo -e '\033[1;33mBaue Verbindung zu \033[0;31m-host- \033[1;33mauf... \n\033[1;33mBefehl: \033[0;31m-command-\033[1;33m ...\033[0m';echo;"
#--> Ausgabe nach Ausfuehrung des Befehls
FOOTER="echo; echo -e '\033[1;33mBeendet. \033[0m';"
 
#------------------------------------------------------------------------------------------------
 
 
#- Funktionen------------------------------------------------------------------------------------
 
cd "$(dirname "$0")"
 
# Ueberprueft alle Abhaengigkeiten
# @param $1 Programmname
#
BINARYS="1"
checkbinary() {
 
   if `which $1 &> /dev/null`; then
      echo -e "$1: [\033[1;32mgefunden\033[0m]";
   else
      echo -e "$1: [\033[0;31mnicht gefunden\033[0m]";
      BINARYS="0"
   fi
 
}
 
 
# Oeffnet einen Befehl in einem neuen Fenster
# @param $1 Name/Beschreibung des Befehls
# @param $2 Der Befehl
#
exec_command() {
 
   sleep 1
 
   TEMP="$(echo $HEADER | sed "s#-host-#$1#g" | sed "s#-command-#$2#g") time $2; $FOOTER"
   echo "#!/bin/bash" > $_exectemp
   echo "clear" >> $_exectemp
   echo $TEMP >> $_exectemp
   echo "sleep 3" >> $_exectemp
   chmod u+x $_exectemp
 
   terminal --hide-menubar --hide-toolbars --maximize -e "bash $_exectemp"
 
}
 
# Zeigt eine Fehlermeldung
# @param $1 Die Fehlermeldung
#
msg_error() {
   zenity --error --text="$1"
}
 
# Zeigt eine Information
# @param $1 Die Information
#
msg_info() {
   zenity --info --text="$1"
}
 
# Generiert das Hauptmenu
#
mainmenu() {
 
   #--> Menueintraege auslesen
   #DIALOG_MENU=""
   I=0
   while read LINE; do
      LINE=$(echo $LINE | awk '{gsub(/^ +| +$/,"")}1')
      if [ ! "${LINE:0:1}" == "#" ] && [ ! "$LINE" == "" ]; then
 
         #--> Einen Eintrag hinzufuegen
         if [ "$(echo $LINE | grep -o ";" | wc -l)" -gt 1 ]; then
            while IFS=";" read -ra ADDR; do 
               name=$(echo ${ADDR[0]} | awk '{gsub(/^ +| +$/,"")}1')
               desc=$(echo ${ADDR[1]} | awk '{gsub(/^ +| +$/,"")}1')
               DIALOG_MENU[$I]="\"$name\" \"$desc\""
               I=$(($I+1))
            done <<< "$LINE"
        fi
 
      fi
   done < $CONNECTION_FILE
 
   if [ -f "$_exectemp" ]; then
      rm "$_exectemp";
   fi
 
   #--> Hauptmenu anzeigen
   eval input=\`zenity --list --width=650 --height=300 --window-icon="\"/usr/share/icons/gnome/scalable/devices/gnome-dev-ethernet.svg\"" --title="\"Remotegui Zenity Edition 1.0\"" --text="\"Select SSH connection\"" --column="\"Name\"" --column="\"Description\"" ${DIALOG_MENU[@]}\`
 
   #--> Status - Eintrag? Bearbeiten? Neu laden? Beenden?
   status="$?"
 
   #--> Befehl in neuem Tab oeffnen
   if [ "$status" == 0 ] && [ ! "$input" == ""  ]; then
 
      COMMAND=$(cat $CONNECTION_FILE | awk '{gsub(/^ +| +$/,"")}1' | grep -E "^$input[ ]*;" | cut -d ";" -f 3 | awk '{gsub(/^ +| +$/,"")}1')
 
      if [ ! "$COMMAND" == "" ]; then
         exec_command "$input" "$COMMAND" &
      else
         msg_error "Befehl nicht in Liste gefunden!"
      fi
   elif [ "$status" == 1 ]; then
      exit 0
   fi
 
}
 
 
 
#- Programmablauf--------------------------------------------------------------------------------
 
   clear
 
   echo
   echo -e "\033[0;35mWillkommen zur SSH Connection GUI! \033[0m"
   echo -e "\033[0;35m(c) 2011 by Christian Blechert (www.blechert.name) \033[0m"
   echo -e "\033[0;35mVeroeffentlicht unter der Creative Commons License (www.creativecommons.org/)\033[0m"
   echo
   echo -e "\033[1;33mUeberpruefe ob alle benoetigten Programme vorhanden sind...\033[0m"
 
   #--> Abhaengigkeiten
   checkbinary terminal
   checkbinary zenity
   checkbinary ssh
 
   if [ "$BINARYS" == "0" ]; then
      echo
      echo -e "\033[0;31mEinige Programme wurden nicht gefunden!\033[0m"
      exit 1;
   fi
 
   while true; do
      mainmenu;
   done
 
fi