Информация Эмулятор терминала в браузере | Shellinabox configure Ubuntu 18.04

Vovich

HOT
Автор темы
Проверенный
717
197
Недавно нужно было развернуть виртуальную лабораторию по сетям и проблема состояла в том, что нужен был доступ к оборудованию в коммутационных шкафах по консольным линиям из браузера (удаленно, по локальной сети).
Суть заключалась в том, что в шкафу есть сервер, через который уже после подключения к нему вы уже доступаетесь по консольным линиям к другому оборудованию, но вручную это делать муторно, хотелось бы как-то автоматизировать это, и вывести на веб-интерфейс с выбором устройства, и при нажатии на него уже непосредственно к нему подключатся.(ну конечно же их перед этим стоит подключить консольными кабелями).
В статьях и примерах везде, к сожалению показан пример конфигураций терминала для одного устройства (соответственно конфигурация обычного SSH-соединения с помощью браузера), в нашем случае это сервер. Мне же нужен был редирект на консольную линию, выбраного мной устройства.
Сама статья направлена именно на пример реализации, а проблемы с установкой пакетов и т.д., ищите в гугле, есть очень много статей с решениями.
Ниже опишу пример настройки, реализация на самом деле не очень сложная, будут вопросы - пишите в ЛС, ну а лучше в телеграме.

Поисковые запросы:
- настройка shellinabox
- настройка minicom
- shellinabox несколько устройств
- shellinabox консольные линии
- shellinabox сonfigure

- shellinabox pem certificate

Порядок установки и настройки

1. Пример будет показана на Ubuntu 18.04, рекомендую ставить не менее чем 16.04.
Так что первым делом устанавливаем операционную систему, чистую, прим установке незабываем указать пункт "Установить Open SSH Server" (ну или уже после установки вручную поставите, гайдов куча на эту тему).


2. Для реализации консольного терминала в браузере я выбрал Shellinabox, ну как по мне он не очень сложен в настройке, ну и по нем есть хотя бы видео в ютубе, благодаря которым я кое как разобрался с ним.
Установка достаточно простая:

Bash:
sudo apt-get install shellinabox
После установки, по идеи должен был появится файл самописного сертификата certificate.pem по пути /var/lib/shellinabox
Если этого не произошло, нужно сгенерить его самому, тоже ничего сложного:
Bash:
sudo su
cd /var/lib/shellinabox
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cat server.crt server.key > certificate.pem
Если все сделали как написано, прекрасно, с установкой shellinabox закончили, позже приступим к его конфигурации.

3. Для подключения к консольным линиями, я использую minicom, есть еще аналог в виде screen (но он опять же он позволяет открывать несколько экранов, это немного не то, хотя может и ошибаюсь, утилиту можете сам выбрать, но я использовал minicom.
Установка, очень проста:

Bash:
sudo apt-get install minicom


4. Что-бы в системе были определены консольные линии (/dev/tty) понадобится драйвер moxa, скачать можете на официально сайте, будьте внимательны для каждой платы moxa отдельный драйвер, на самой карте написана информация о ней, с помощью нее ищите подходящие драйвера.
Официальный сайт (не реклама) - https://moxa.ru/
Там вообще и инструкции у них есть, но если лень искать как устанавливать, после того как скачали драйвер (я лично качал с винды, и через winscp закидывал его на ubuntu, а вы как хотите, можно просто wget и т.д., на ваше усмотрение)
Установка драйвера:

Bash:
sudo su
mkdir moxa
cd moxa
tar -xzvf driv_linux_smart_vx.x_build_yymmddhh.tgz
cd mxser
make clean; make install
cd /moxa/mxser/driver
./msmknod
modprobe mxser
Если установили, идем далее.

5. Если все было установлено правильно, то по идеи у нас должны были определится линии tty и сейчас вручную можно к ним подключится с помощью minicom.
Подключитесь к операционной системе где у вас все установлено, после чего попробуйте подключится к линии tty которая у вас физически подключена.
Это можно сделать так:

Bash:
minicom -w -D /dev/ttyM0 -b 9600 -8
/dev/ttyM0 - путь к консоли которая подключена,
9600 - это частота передачи данных за секунду.
8 - режим передачи данных (он же 8N1)

Снимок.PNG

Если все нормально увидите уже консольное соединение с устройством:

Снимок1.PNG

Если у вас все подключилось, значит вы не рукожоп, правильно подключили консольники, и правильно установили minicom.
Давайте тогда уже приступим к конфигурации.


6. Настройка конфигурационного файла shellinabox.
Сам файл лежит в /etc/default/shellinabox, я лично буду юзать nano, ибо vim редактор мне не очень заходит.
Значит, открываем файл на редактирование:

Bash:
sudo nano /etc/default/shellinabox
После откроется конфиг, собственно есть куча примеров настройки, но именно мой, дает возможность выполнения баш-скрипта при подключении (а это мне и нужно было).
Кратко объясню, при подключении через браузер, за адрес устройства берется его название из адресной строки браузера
Пример: http://192.168.1.1:4200/DEVICE/R1 - вот где R1, соответственно и есть название устройства, далее скрипт будет принимать входящий параметр url адреса, и в зависимости от адреса в строке, будет подключатся к соответствующему устройству (само подключение уже реализовано в bash-скрипте, о нем ниже)
Сам конфиг выглядит так:

Код:
# Should shellinaboxd start automatically
SHELLINABOX_DAEMON_START=1
# TCP port that shellinboxd's webserver listens on
SHELLINABOX_PORT=4200
SHELLINABOX_DATADIR=/var/lib/shellinabox
SHELLINABOX_USER=shellinabox
SHELLINABOX_GROUP=shellinabox
SHELLINABOX_ARGS="--no-beep -t -f beep.wav:/dev/null --user-css Color-on-White:-/usr/share/shellinabox/color.css,White-on-Black:+/usr/share/shellinabox/white-on-black.css  -s '/DEVICE:root:root:/tmp:/srv/helpers/webminicom.sh \${url}'"
Насчет параметра -user-css и далее до флага -s, это не обязательно, ну а если будете делать то нужно конечно изначально создать эти директории и закинуть файлы, но рекомендую его вообще для начала не использовать, что бы не путаться.
Дальше идеи -s и какая-то неведомая хрень, но тут ничего особенного, просто путь к файлу .sh, который будет у вас в Ubuntu с указанием владельца файла и его группы (еще рекомендую файлу webminicom.sh дать права на все, ну не совсем корректно но так не будет проблем с правами доступа к нему - chmod 777 webminicom.sh.
\${url} - это тот самый входящий параметр для скрипта, который будет потом использоваться для адресации.
Ну с настройкой shellinabox все, пока оставляем его, и пора закинуть сам скрипт.

7. Так, ну что бы его закинуть, для начала нужно что-бы эта директория была, так что создадим все команды под root юзайте (sudo su):

Код:
sudo su
cd /srv
mkdir helpers
cd helpers
nano webminicom.sh

Дальше, вот пример скрипта который подстроен конечно же под мои устройства (там несколько маршрутизаторов и несколько коммутаторов):
Bash:
#!/bin/bash
URL=$1

URL="${URL%/}"
URL="${URL##*/}"
DEVNAME="$URL"
echo $DEVNAME
case $DEVNAME in
    R1) COM="-- minicom -w -D /dev/ttyM0 -b 9600 -8" ;;
    R2) COM="-- minicom -w -D /dev/ttyM1 -b 9600 -8" ;;
    R3) COM="-- minicom -w -D /dev/ttyM2 -b 9600 -8" ;;
    R4) COM="-- minicom -w -D /dev/ttyM3 -b 9600 -8" ;;
    R5) COM="-- minicom -w -D /dev/ttyM4 -b 9600 -8" ;;
    R6) COM="-- minicom -w -D /dev/ttyM5 -b 9600 -8" ;;

    S1) COM="-- minicom -w -D /dev/ttyM6 -b 9600 -8" ;;
    S2) COM="-- minicom -w -D /dev/ttyM7 -b 9600 -8" ;;
    S3) COM="-- minicom -w -D /dev/ttyM8 -b 9600 -8" ;;
    S4) COM="-- minicom -w -D /dev/ttyM9 -b 9600 -8" ;;
    S5) COM="-- minicom -w -D /dev/ttyM10 -b 9600 -8" ;;
    S6) COM="-- minicom -w -D /dev/ttyM11 -b 9600 -8" ;;

    *)  echo "There is no device '$DEVNAME' configured. Exiting."
    exit 0
    ;;
esac

screen -wipe >/dev/null 2>&1
screen -q -ls $DEVNAME
if [ $? -lt 10 ]; then
  screen -S $DEVNAME $COM
  read
else
  screen -r $DEVNAME -x
fi

R1, S1 - это и есть те названия устройств которые будут указываться в строке браузера для подключения к устройству.
То есть, если к примеру вместо R1 будет blasthack1, то запрос в браузере будет следующим (ну ip сервера условное естественно, у каждого свое):
Код:
http://192.168.1.1:4200/DEVICE/blasthack1/

Собственно желательно дать права файлу скрипта в виде 777, ну с точки зрения безопасности это неправильно, но так как сеть у меня локальная, я решил таким образом проблему с доступом к файлу.
Код:
chmod 777 webminicom.sh

8. Ну а теперь, самое простое, нужно перезагрузить shellinabox:
Код:
sudo systemctl restart shellinabox

Ну и теперь все подключенные устройства доступны для подключения в браузере.
Не забывайте писать перед своим ip обязательно http.
Пример адреса:

Код:
http://ip_server:4200/DEVICE/your_name_device/

Example:
http://192.168.1.1:4200/DEVICE/R1/
http://192.168.1.1:4200/DEVICE/R2/
http://192.168.1.1:4200/DEVICE/S1/

Ну и, что бы вручную не вводить все эти IP, я лично просто на Apache повесил пару html страниц с простым css, где есть устройство, и при нажатии на него обычный a href на нужный мне IP, с нужным уже названием устройства.

1595492861709.png

Собственно после нажатия, редирект на устройство, и открывается уже непосредственно подключение к самому устройству.

1595493076333.png

Ну как-то так, теперь можем настраивать устройства с помощью браузера, без физического подключения к консольным линиям.
Может кому-то пригодится, не знаю, но как по мне вещь полезная, это больше подойдет для организации учебных лабораторий по сетевым устройствам.
Дать возможность студентам настраивать оборудку которая не находится в локальной сети в которой находится сервер к которому она подключена, и никак не взаимодействует с основной сетью , но при этом она взаимодействует с сервером, к которому доступ имеет лишь администратор соответственно.
Ну вообщем, надеюсь у кого-то найдет свое применение данный способ.
 

Вложения

  • 1595491230293.png
    1595491230293.png
    3.8 KB · Просмотры: 136
  • 1595492401145.png
    1595492401145.png
    14.2 KB · Просмотры: 166

nelit.dev

Участник
70
37
Очень полезная информация. Как-то попробую, если не потеряю этот гайд) спасибо