· 3 months ago · Jul 09, 2025, 03:40 PM
1#!/bin/bash
2
3CONFIG_DIR="$HOME/.config/aling.sh"
4CONFIG_FILE="$CONFIG_DIR/servers.conf"
5mkdir -p "$CONFIG_DIR"
6
7# Pastikan dialog terinstall
8if ! command -v dialog &> /dev/null; then
9 echo "Perlu menginstall 'dialog'. Silakan install dengan: sudo apt install dialog"
10 exit 1
11fi
12
13# Fungsi deteksi terminal
14detect_terminal() {
15 if [[ -n "$GNOME_TERMINAL_SCREEN" ]] || command -v gnome-terminal >/dev/null 2>&1; then
16 echo "gnome-terminal"
17 elif command -v terminator >/dev/null 2>&1; then
18 echo "terminator"
19 elif command -v konsole >/dev/null 2>&1; then
20 echo "konsole"
21 elif command -v xfce4-terminal >/dev/null 2>&1; then
22 echo "xfce4-terminal"
23 elif command -v tilix >/dev/null 2>&1; then
24 echo "tilix"
25 elif command -v alacritty >/dev/null 2>&1; then
26 echo "alacritty"
27 else
28 echo "unknown"
29 fi
30}
31
32# Fungsi membuka koneksi SSH dengan terminal sesuai
33open_ssh_connection() {
34 local server_name="$1"
35 local ssh_command="$2"
36 local terminal="$3"
37
38 case "$terminal" in
39 "gnome-terminal")
40 gnome-terminal --tab --title="$server_name" -- bash -c "$ssh_command; exec bash"
41 ;;
42 "terminator")
43 terminator --new-tab --title="$server_name" -e "bash -c '$ssh_command; exec bash'"
44 ;;
45 "konsole")
46 konsole --new-tab --title "$server_name" -e bash -c "$ssh_command; exec bash"
47 ;;
48 "xfce4-terminal")
49 xfce4-terminal --tab --title="$server_name" -e "bash -c '$ssh_command; exec bash'"
50 ;;
51 "tilix")
52 tilix --new-session --title="$server_name" -e "bash -c '$ssh_command; exec bash'"
53 ;;
54 "alacritty")
55 alacritty -t "$server_name" -e bash -c "$ssh_command; exec bash" &
56 ;;
57 *)
58 echo "Opening $server_name in fallback terminal..."
59 x-terminal-emulator -e bash -c "$ssh_command; exec bash" &
60 ;;
61 esac
62}
63
64
65function add_server() {
66 NAME=$(dialog --stdout --inputbox "Masukkan Nama Server:" 8 40)
67 USERHOST=$(dialog --stdout --inputbox "Masukkan user@host:" 8 40)
68 PORT=$(dialog --stdout --inputbox "Masukkan Port (default 22):" 8 40 "22")
69 PASSWORD=$(dialog --stdout --insecure --passwordbox "Masukkan Password:" 8 40)
70
71 if [[ -n "$NAME" && -n "$USERHOST" && -n "$PORT" && -n "$PASSWORD" ]]; then
72 echo "$NAME:$USERHOST:$PORT:$PASSWORD" >> "$CONFIG_FILE"
73 dialog --msgbox "Server berhasil disimpan!" 6 30
74 else
75 dialog --msgbox "Semua field harus diisi." 6 30
76 fi
77}
78
79function connect_single() {
80 if [ ! -f "$CONFIG_FILE" ]; then
81 dialog --msgbox "Tidak ada konfigurasi server ditemukan." 6 40
82 return
83 fi
84
85 OPTIONS=()
86 while IFS=: read -r NAME USERHOST PORT PASSWORD; do
87 OPTIONS+=("$NAME" "$USERHOST")
88 done < "$CONFIG_FILE"
89
90 CHOICE=$(dialog --stdout --menu "Pilih server untuk koneksi:" 15 50 6 "${OPTIONS[@]}")
91 if [[ -n "$CHOICE" ]]; then
92 LINE=$(grep "^$CHOICE:" "$CONFIG_FILE")
93 IFS=: read -r server_name ssh_target port password <<< "$LINE"
94
95 terminal=$(detect_terminal)
96 ssh_cmd="sshpass -p '$password' ssh -t -o StrictHostKeyChecking=no -p $port $ssh_target 'export TERM=xterm; htop; exec bash'"
97
98 echo "Connecting to $server_name ($ssh_target)..."
99 open_ssh_connection "$server_name" "$ssh_cmd" "$terminal"
100 fi
101}
102
103
104
105
106function connect_all() {
107 if [ ! -f "$CONFIG_FILE" ]; then
108 dialog --msgbox "Tidak ada konfigurasi server ditemukan." 6 40
109 return
110 fi
111
112 terminal=$(detect_terminal)
113
114 while IFS=: read -r server_name ssh_target port password; do
115 ssh_cmd="sshpass -p '$password' ssh -t -o StrictHostKeyChecking=no -p $port $ssh_target 'export TERM=xterm; htop; exec bash'"
116 echo "Connecting to $server_name ($ssh_target)..."
117 open_ssh_connection "$server_name" "$ssh_cmd" "$terminal"
118 sleep 0.3 # Delay ringan agar tab tidak tabrakan
119 done < "$CONFIG_FILE"
120}
121
122
123function main_menu() {
124 while true; do
125 CHOICE=$(dialog --stdout --menu "aling.sh" 15 50 5 \
126 1 "Tambah Server Baru" \
127 2 "Koneksi ke Satu Server" \
128 3 "Koneksi ke Semua Server" \
129 0 "Keluar")
130
131 case "$CHOICE" in
132 1) add_server ;;
133 2) connect_single ;;
134 3) connect_all ;;
135 0) clear; exit ;;
136 esac
137 done
138}
139
140main_menu
141