deus_networkus/deus_networkus.sh
2026-03-11 13:39:04 +03:00

225 lines
No EOL
14 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#! /bin/bash
cat << EOF
██████╗░███████╗██╗░░░██╗░██████╗
██╔══██╗██╔════╝██║░░░██║██╔════╝
██║░░██║█████╗░░██║░░░██║╚█████╗░
██║░░██║██╔══╝░░██║░░░██║░╚═══██╗
██████╔╝███████╗╚██████╔╝██████╔╝
╚═════╝░╚══════╝░╚═════╝░╚═════╝░
███╗░░██╗███████╗████████╗░██╗░░░░░░░██╗░█████╗░██████╗░██╗░░██╗██╗░░░██╗░██████╗
████╗░██║██╔════╝╚══██╔══╝░██║░░██╗░░██║██╔══██╗██╔══██╗██║░██╔╝██║░░░██║██╔════╝
██╔██╗██║█████╗░░░░░██║░░░░╚██╗████╗██╔╝██║░░██║██████╔╝█████═╝░██║░░░██║╚█████╗░
██║╚████║██╔══╝░░░░░██║░░░░░████╔═████║░██║░░██║██╔══██╗██╔═██╗░██║░░░██║░╚═══██╗
██║░╚███║███████╗░░░██║░░░░░╚██╔╝░╚██╔╝░╚█████╔╝██║░░██║██║░╚██╗╚██████╔╝██████╔╝
╚═╝░░╚══╝╚══════╝░░░╚═╝░░░░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚═╝╚═╝░░╚═╝░╚═════╝░╚═════╝░
+-------------------------------------------------------------------------------+
| Скрипт |
| для подключения к сетевому оборудованию |
+-------------------------------------------------------------------------------+
EOF
# Устанавливаем список необхожимого софта и список для записи того чего у нас ещё нет
soft_=("telnet" "xpra" "ssh" "sshpass")
need_soft_=()
# Проверяем наличие установленных программ по списку и добавлением необходимого в пустой список.
# Если программа установлена, но возле неё отображается галочка, если нет - крестик.
for program in "${soft_[@]}"
do
if [ -x "$(command -v $program)" ]; then
echo -e "$program \033[32m✔\033[0m"
else
echo -e "$program \033[31m✘\033[0m"
need_soft_+="$program"
need_soft_+=" "
fi
done
#Функция для ввода логина и пароля от оборудования (Tacacs или локальный)
function lets_go_pass {
echo "Введите имя пользователя:"
read user_
#Скрыть ввод пароля
stty_orig=$(stty -g)
stty -echo
read -p "Введите пароль:" pass_
#Возврат нормального ввода
stty "$stty_orig"
}
#Указывается путь до папки со скриптами и до папки с хранением вывода
path_to_script="/home/$USER/Документы/Scripts"
path_to_date="/home/$USER/Документы"
#Проверяем существуют ли папки для сохранения файлов с данными по работе скриптов
if [ -d "$path_to_date/Данные со скрипта" ] && [ -d "$path_to_date/Данные со скрипта/Backups" ] && [ -d "$path_to_date/Данные со скрипта/PPR" ]; then
echo "Все необходимые папки для сохранения данных имеются"
else
if ! [ -d "$path_to_date/Данные со скрипта" ]; then
mkdir "$path_to_date/Данные со скрипта"
fi
if ! [ -d "$path_to_date/Данные со скрипта/Badckups" ]; then
mkdir "$path_to_date/Данные со скрипта/Backups"
fi
if ! [ -d "$path_to_date/Данные со скрипта/PPR" ]; then
mkdir "$path_to_date/Данные со скрипта/PPR"
fi
echo "Необходимые папки для работы скрипта созданы"
fi
#Указывается название терминала в системе
your_terminal=mate-terminal
echo "============================="
# Если весь необходимый софт установлен, то запускается основной цикл
if [[ ${#need_soft_[@]} == 0 ]]; then
lets_go_pass
#Передаём в переменные списки с IP-адресами, чьи протоколы подключения отличаются от SSH
telnet_cisco_=$(cat "$path_to_script/Deus_networkus/telnet_cisco")
telnet_natex_=$(cat "$path_to_script/Deus_networkus/telnet_natex")
WEB_=$(cat "$path_to_script/Deus_networkus/WEB")
#Разбиваем IP-адреса из файлов на переменные
IFS=$'\n' read -ra telnet_cisco_array <<< "$telnet_cisco_"
IFS=$'\n' read -ra telnet_natex_array <<< "$telnet_natex_"
IFS=$'\n' read -ra WEB_array <<< "$WEB_"
#Вводим флаг для проверки наличия IP-адресов в списках
found_=false
#Функция для вызова коммутатора
function lets_go_connect {
#Считывается аргумент, передаваемый при вызове функции, соответствующий порядковому номеру коммутатора
line_number="$1"
#Из списка IP-адресов выбирается нужный, согласно принятому аргументу
selected_ip=$(echo "$ips_" | sed -n "${line_number}p")
#Через терминал запускается сеанс mate-terminal, имя пользователя и пароль передаются из переменных, подтверждение подключения к новому хосту проводится автоматически.
#Проверяются некоторые IP, которые не имеют SSH, и подключаются согласно доступным средствам.
for item_ in "${telnet_cisco_array[@]}"; do
if [[ "$item_" == "$selected_ip" ]]; then
found_=true
$your_terminal -e "$path_to_script/Deus_networkus/Modules/telnet_connect_cisco.sh "$selected_ip" "$user_" "$pass_""
break
fi
done
if ! $found_; then
for item_ in "${telnet_natex_array[@]}"; do
if [[ "$item_" == "$selected_ip" ]]; then
found_=true
$your_terminal -e "$path_to_script/Deus_networkus/Modules/telnet_connect_natex.sh "$selected_ip" "$user_" "$pass_""
break
fi
done
fi
if ! $found_; then
for item_ in "${WEB_array[@]}"; do
if [[ "$item_" == "$selected_ip" ]]; then
found_=true
$your_terminal -e "firefox "$selected_ip""
break
fi
done
fi
if ! $found_; then
$your_terminal -e "sshpass -p "$pass_" ssh -o StrictHostKeyChecking=no $user_@$selected_ip"
fi
found_=false
}
while : #Запускается цикл вывода меню
do
echo " "
echo "============================="
echo "Какое оборудование Вам нужно? "
echo "============================="
#Считываются папки, в которых содержатся папки с площадками и выводятся списком, обозначая сегменты оборудования.
list_segments_="$(ls "$path_to_script/Deus_networkus/Lists_of_switches/")"
#Сортируем список в порядке возрастания
sort_list_segments_=$(echo -e "$list_segments_" | sort -n)
#Выводится список сегментов, отсортированный по числам
echo "$sort_list_segments_"
echo "============================="
echo "Дополнительные модули:"
echo "============================="
echo "Введите 'commands' для передачи целого списка команд на разное оборудование."
echo "Введите 'ppr' для проведения ППР коммутаторов."
echo "Введите 'xpra' для настройки оборудования через подключение к удалённому ПК."
echo "Введите 'tftp', чтобы поднять TFTP-сервер на 10.32.5.142"
echo "Введите 'test', чтобы протестировать связь до узла"
echo "Введите 'pass', чтобы обновить логин и пароль введёные ранее в скрипт"
echo "Введите 'update' для обновления скрипта."
#Выбирается сегмент
read segment_
#Проверка на пустой ввод
if [[ -z "$segment_" ]]; then
continue
#Запуск модуля для передачи команд на оборудование
elif [[ "$segment_" == "commands" ]]; then
$your_terminal -e "$path_to_script/Deus_networkus/Modules/commands.sh $path_to_script"
continue
#Запуск модуля для проведения ППР
elif [[ "$segment_" == "ppr" ]]; then
$your_terminal -e "$path_to_script/Deus_networkus/Modules/ppr.sh $path_to_script"
continue
#Запуск модуля для обновления скрипта
elif [[ "$segment_" == "update" ]]; then
$your_terminal -e "$path_to_script/Deus_networkus/Modules/update.sh $path_to_script"
sleep 1
echo -e "\033[32mОбновление завершено\033[0m"
exec "$0"
#Запуск модуля для обновления логина и пароля
elif [[ "$segment_" == "pass" ]]; then
lets_go_pass
continue
#Подключение к оборудованию через удалённый ПК, с установленным Putty. Пользователь должен иметь root-права для подключения к Serial-порту.
elif [[ "$segment_" == "xpra" ]]; then
echo "Введите IP-адрес ПК к которому нужно подключиться"
read ip_
echo "Введите имя пользователя на сервере"
read username_
xpra start ssh://$username_@$ip_ --start=putty
continue
elif [[ "$segment_" == "tftp" ]]; then
echo "Введите имя пользователя на сервере 10.32.5.142"
read username_
echo "Какая подсеть Вам нужна? "
echo "============================="
echo "1. АСУ ПХД"
echo "2. АСУ ТП и КПТМ"
read net_
#Запускается скрипт для одной из подсетей. Файлы хранятсяя в папке /home/tftp
if [ $net_ == "1" ]; then
ssh -t $username_@10.32.5.142 "sudo python2 tftpgui/tftpgui.py tftpgui/tftpgui_phd.cfg --nogui"
elif [ $net_ == "2" ]; then
ssh -t $username_@10.32.5.142 "sudo python2 tftpgui/tftpgui.py tftpgui/tftpgui_tp.cfg --nogui"
fi
continue
elif [[ "$segment_" == "test" ]]; then
echo "Введите IP-адрес соединение до которого нужно проверить"
read ip_
$your_terminal -e "$path_to_script/Deus_networkus/Modules/network_test.sh $ip_"
continue
fi
#Запускается скрипт для вывода списка оборудования из папок
source "$path_to_script/Deus_networkus/Modules/choose_your_equipments.sh"
#Пока не будет нажат Enter, будет появляться список оборудования
while :
do
#Выводим список оборудования
cat "$list_switches_"
#Составляем список адресов, содержащихся в файле
ips_=$(grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" "$list_switches_")
#Считывается коммутатор
read switch_
if [[ -z "$switch_" ]]; then
break
fi
lets_go_connect "$switch_"
done
clear #По нажатию клавиши Enter очищается экран и цикл идёт на новую итерацию
done
# Если какого-то софта не хватает, то появляется список того, что нужно установить
else
echo -e "\033[31mНеобходимо установить следующий софт:\033[0m"
echo ${need_soft_}
read
fi