225 lines
No EOL
14 KiB
Bash
225 lines
No EOL
14 KiB
Bash
#! /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 |