Како да се поврзете со терминал од вашиот прелистувач користејќи Python WebSSH
Вовед
Вообичаено, се поврзувате со SSH сервер користејќи апликација за командна линија во терминал или софтвер за емулатор на терминал кој вклучува SSH клиент. Некои алатки, како што е WebSSH на Python, овозможуваат поврзување преку SSH и стартување на терминал директно во вашиот веб-прелистувач.
Ова може да биде корисно во голем број ситуации. Тоа е особено корисно за давање презентации или демо во живо, кога би било предизвик да се сподели обичен терминален прозорец на начин што има визуелна смисла. Може да биде корисен и во образовните поставки кога се дава пристап до почетниците од командната линија, бидејќи ги избегнува потребата да инсталираат софтвер на нивните машини (особено на Windows, каде што стандардните опции доаѓаат со предупредувања). Конечно, особено Python's WebSSH е многу пренослив и не бара други зависности освен Python за да се активира и работи. Другите веб-базирани терминални купови може да бидат многу покомплицирани и специфични за Linux.
Во ова упатство, ќе поставите WebSSH и ќе се поврзете преку SSH во вашиот прелистувач. Потоа опционално ќе го обезбедите со SSL сертификат и ќе го стартувате зад обратен прокси Nginx за распоредување на производството.
Предуслови
- Околина за Windows, Mac или Linux со вклучена SSH услуга. Може да биде корисно да се стартува WebSSH локално, но ако немате услуга SSH што работи на локална машина, можете да користите оддалечен Линукс сервер следејќи го нашиот првичен водич за поставување сервер за Ubuntu 22.04.
- Програмскиот јазик Python инсталиран заедно со
pip
, неговиот менаџер на пакети. Можете да инсталирате Python иpip
на Ubuntu следејќи го чекор 1 од ова упатство. - Изборно, за да овозможите HTTPS во прелистувачот, ќе ви требаат SSL сертификати и сопствено име на домен. Можете да ги добиете со следење на Како да го користите самостоен режим на Certbot за да ги вратите Let’s Encrypt SSL сертификати. Ако немате сопствено име на домен, можете да користите IP адреса за првите два чекори од ова упатство.
Чекор 1 – Инсталирање на WebSSH
Ако веќе сте инсталирале Python и pip, треба да можете да инсталирате Python пакети од Како да инсталирате Python 3 и да поставите програмско опкружување. Виртуелните околини се покорисни кога работите на сопствени проекти, а не кога инсталирате алатки низ целиот систем.
Користете pip install
за да го инсталирате пакетот WebSSH:
- sudo pip3 install webssh
Output…
Successfully built webssh
Installing collected packages: tornado, pycparser, cffi, pynacl, paramiko, webssh
Successfully installed cffi-1.15.1 paramiko-2.11.0 pycparser-2.21 pynacl-1.5.0 tornado-6.2 webssh-1.6.0
Инсталирањето преку sudo
ќе ја инсталира командата wssh
глобално. Можете да го потврдите ова со користење на which wssh
:
- which wssh
Output/usr/local/bin/wssh
Сега сте инсталирале WebSSH. Во следниот чекор, ќе трчате и ќе се поврзете со него. Прво, сепак, ќе треба да додадете правило за заштитен ѕид. WebSSH стандардно работи на портата 8888. Ако користите ufw
како заштитен ѕид, дозволете
тој приклучок преку ufw
:
- sudo ufw allow 8888
Подоцна во ова упатство ќе го разгледате тоа правило за заштитен ѕид.
Чекор 2 - Вклучување и поврзување со WebSSH
Ако користите WebSSH на локална машина, можете сам да извршите wssh
без дополнителни аргументи за почеток. Ако користите WebSSH на оддалечен сервер, ќе треба да го додадете ознаката --fbidhttp=False
за да дозволите далечински врски преку обичен HTTP. Ова не е безбедно ако се поврзувате преку незаштитена мрежа, но е корисно за демо, а WebSSH ќе го обезбедите подоцна во ова упатство.
- wssh --fbidhttp=False
Сега можете да се поврзете на WebSSH и да се најавите. Одете до your_domain:8888
во веб-прелистувач (користејќи localhost
наместо your_domain ако работите локално). Ќе ја видите страницата за најавување WebSSH:
Обезбедете ги вашите редовни акредитиви за SSH. Ако го следевте почетниот водич за поставување сервер на DigitalOcean, ќе користите автентикација базирана на клучеви наместо лозинка. Тоа значи дека треба само да го наведете Hostname
на серверот на кој се поврзувате, вашето Корисничко име
за серверот и вашиот SSH клуч, кој треба да се наоѓа во Папката .ssh/
во вашиот локален домашен директориум (обично наречена id_rsa
).
Забелешка: Како што може да претпоставите од тоа што треба рачно да наведете име на домаќин, WebSSH може да се користи и за поврзување со сервери различни од оној на кој работи. За ова упатство, се работи на истиот сервер на кој се поврзувате.
Кликнете на копчето Поврзи се и треба да бидете пречекани со стандардното известување за добредојде на терминалот:
Во овој момент, можете да го користите вашиот терминал нормално, токму како да сте се поврзале преку SSH. Повеќе корисници исто така можат да се поврзат преку истиот WebSSH пример истовремено. Ако користите WebSSH на локална машина исклучиво со цел да стримувате или да снимате видео, ова можеби е се што ви треба. Можете да внесете Ctrl+C
во терминалот од кој сте го стартувале WebSSH (не во терминалот WebSSH) за да го запрете WebSSH серверот кога ќе завршите.
Ако работите на оддалечен сервер, нема да сакате да користите WebSSH во производството зад небезбедна HTTP врска. Иако сè уште би биле заштитени со механизмот за автентикација на вашата SSH услуга, користењето SSH конекција преку HTTP претставува значителен безбедносен ризик и најверојатно ќе им дозволи на другите да ги украдат вашите SSH ингеренциите. Во следните чекори, ќе го обезбедите вашиот WebSSH пример за да не биде помалку безбеден од обична SSH врска.
Чекор 3 – (опционално) Обезбедување на WebSSH со SSL сертификат
За да го завршите овој чекор, веќе треба да имате добиено сопствено име на домен и SSL сертификати. Еден начин да го направите тоа е со користење на LetsEncrypt во самостоен режим.
Кога LetsEncrypt добива сертификати, стандардно, ги складира во /etc/letsencrypt/live/your_domain
. Проверете за да бидете сигурни дека ги имате:
- sudo ls /etc/letsencrypt/live/your_domain
OutputREADME cert.pem chain.pem fullchain.pem privkey.pem
За да извршите WebSSH со поддршка за HTTPS, ќе треба да обезбедите патека до сертификат и патека до клуч. Тоа се fullchain.pem
и privkey.pem
. Стандардно, WebSSH обезбедува HTTPS пристап на портата 4433, затоа отворете ја таа порта и во вашиот заштитен ѕид:
- sudo ufw allow 4433
Следно, ќе треба да дозволите
Потоа, стартувајте WebSSH со патеките до вашиот сертификат и вашиот клуч:
- sudo wssh --certfile='/etc/letsencrypt/live/your_domain/fullchain.pem' --keyfile='/etc/letsencrypt/live/your_domain/privkey.pem'
Во веб-прелистувач, одете до https://your_domain:4433
и треба да го видите истиот интерфејс како во претходниот чекор, сега со поддршка за HTTPS. Сега ова е доволно поставување за безбедна конфигурација на производството. Сепак, сè уште ја извршувате апликацијата wssh
директно од вашиот терминал и пристапувате до неа во прелистувачот од необична порта. Во последните два чекори од ова упатство, ќе ги отстраните двете од овие ограничувања.
Чекор 4 – (опционално) Вклучување на WebSSH зад обратен прокси Nginx
Ставањето веб-сервер како што е Nginx пред други апликации што се соочуваат со веб може да ги подобри перформансите и да го направи многу поедноставно обезбедувањето на страницата. Ќе го инсталирате Nginx и ќе го конфигурирате за превртување на прокси барања на WebSSH, што значи дека ќе се грижи за справување со барањата од вашите корисници до WebSSH и повторно назад.
Освежете го списокот со пакети, а потоа инсталирајте Nginx користејќи apt
:
- sudo apt update nginx
- sudo apt install nginx
Ако користите ufw
заштитен ѕид, треба да направите некои промени во конфигурацијата на вашиот заштитен ѕид во овој момент, за да овозможите пристап до стандардните HTTP/HTTPS порти, 80 и 443. ufw
има складна конфигурација наречена \Nginx Full која обезбедува пристап до двете од овие порти:
- sudo ufw allow “Nginx Full”
Nginx ви овозможува да додавате конфигурации по локација на поединечни датотеки во поддиректориум наречен sites-available/
. Користејќи nano
или вашиот омилен текстуален уредувач, креирајте нова Nginx конфигурација на /etc/nginx/sites-available/webssh
:
- sudo nano /etc/nginx/sites-available/webssh
Залепете го следново во новата конфигурациска датотека, заменете го your_domain
со името на вашиот домен.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name your_domain www.your_domain
root /var/www/html;
access_log /var/log/nginx/webssh.access.log;
error_log /var/log/nginx/webssh.error.log;
location / {
proxy_pass http://127.0.0.1:8888;
proxy_http_version 1.1;
proxy_read_timeout 300;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
}
listen 443 ssl;
# RSA certificate
ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
}
Можете да ја прочитате оваа конфигурација како да има три главни \блокови. Првиот блок, кој доаѓа пред линијата location /
, содржи конфигурација Nginx на boilerplate за опслужување веб-локација на стандардната HTTP порта, 80 . блокира, ги вчитува вашите клучеви LetsEncrypt SSL и ги пренасочува HTTP-врските кон HTTPS.
Зачувајте ја и затворете ја датотеката. Ако користите nano
, притиснете Ctrl+X
, потоа кога ќе биде побарано, Y
и потоа Enter.
Следно, ќе треба да ја активирате оваа нова конфигурација. Конвенцијата на Nginx е да создава симболични врски (како кратенки) од датотеките во sites-available/
до друга папка наречена sites-enabled/
кога ќе одлучите да ги овозможите или оневозможите. Користејќи ги целосните патеки за јасност, направете ја таа врска:
- sudo ln -s /etc/nginx/sites-available/webssh /etc/nginx/sites-enabled/webssh
Стандардно, Nginx вклучува друга конфигурациска датотека на /etc/nginx/sites-available/default
, поврзана со /etc/nginx/sites-enabled/default
, која исто така служи неговата стандардна индексна страница. Ќе сакате да го оневозможите тоа правило така што ќе го отстраните од /sites-enabled
, бидејќи тоа е во конфликт со вашата нова конфигурација WebSSH:
- sudo rm /etc/nginx/sites-enabled/default
Забелешка: Конфигурацијата Nginx во ова упатство е дизајнирана да опслужува една апликација, WebSSH. Може да ја проширите оваа Nginx конфигурација за да опслужува повеќе апликации на истиот сервер следејќи ја документацијата Nginx.
Следно, стартувајте го nginx -t
за да ја потврдите вашата конфигурација пред да го рестартирате Nginx:
- sudo nginx -t
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Сега можете да ја рестартирате вашата услуга Nginx, така што ќе ја одрази вашата нова конфигурација:
- sudo systemctl restart nginx
Конечно, можете да ги отстраните правилата за заштитен ѕид што сте ги создале порано за директно пристапување до WebSSH, бидејќи целиот сообраќај сега ќе го управува Nginx преку стандардните HTTP/HTTPS порти:
- sudo ufw delete allow 8888
- sudo ufw delete allow 4433
Рестартирајте го webssh
на командната линија:
- wssh
Овој пат не треба да ги давате сертификатите и клучните патеки, бидејќи Nginx се справува со тоа. Потоа одете до your_domain во веб-прелистувач.
Забележете дека WebSSH сега се опслужува преку HTTPS преку Nginx без потреба од одредување порта. Во овој момент, имате автоматизирано сè освен самото стартување на wssh
. Тоа ќе го направите во последниот чекор.
Чекор 5 – (опционално) Креирање системска услуга за WebSSH
Распоредувањето на апликации од страна на серверот кои не се извршуваат автоматски во заднина, на почетокот може да биде неинтуитивно, бидејќи секој пат ќе треба да ги стартувате директно од командната линија. Решението за ова е да поставите своја сопствена услуга за заднина.
За да го направите ова, ќе креирате датотека за единица што може да ја користи init систем на вашиот сервер. На речиси сите модерни дистрибуции на Линукс, иницијалниот систем се нарекува Systemd и можете да комуницирате со него користејќи ја командата systemctl
.
Ако WebSSH сè уште работи на вашиот терминал, притиснете Ctrl+C
за да го прекинете. Потоа, користејќи nano
или вашиот омилен текстуален уредувач, отворете нова датотека наречена /etc/systemd/system/webssh.service
:
- sudo nano /etc/systemd/system/webssh.service
На вашата единица датотека му треба, минимум, дел [Unit]
, дел [Услуга]
и дел [Инсталирај]
:
[Unit]
Description=WebSSH terminal interface
After=network.target
[Service]
User=www-data
Group=www-data
ExecStart=wssh
[Install]
WantedBy=multi-user.target
Оваа датотека може да се разложи на следниов начин:
- Секцијата
[Unit]
содржи обичен опис на вашата нова услуга, како и кукаAfter
која одредува кога треба да се изврши при стартување на системот, во овој случај по вашиот се појавија мрежни интерфејси на серверот. - Секцијата
[Услуга]
одредува која команда всушност треба да се изврши, како и кој корисник треба да ја извршува. Во овој случај,www-data
е стандардниот корисник на Nginx на серверот на Ubuntu, аwssh
е самата команда. - Секцијата
[Инсталирај]
ја содржи само линијатаWantedBy=multi-user.target
, која работи заедно со линијатаПо
воДелот [Unit]
за да се осигура дека услугата е стартувана кога серверот е подготвен да прифати кориснички најавувања.
Зачувајте ја и затворете ја датотеката. Сега можете да ја стартирате
вашата нова услуга WebSSH и да овозможите
таа да работи автоматски при подигнување:
- sudo systemctl start webssh
- sudo systemctl enable webssh
Користете systemctl статус webssh
за да потврдите дека започнал успешно. Треба да добиете сличен излез како кога првпат сте ја извршиле командата во терминал.
- sudo systemctl status webssh
Output● webssh.service - WebSSH terminal interface
Loaded: loaded (/etc/systemd/system/webssh.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-08-11 22:08:25 UTC; 2s ago
Main PID: 15678 (wssh)
Tasks: 1 (limit: 1119)
Memory: 20.2M
CPU: 300ms
CGroup: /system.slice/webssh.service
└─15678 /usr/bin/python3 /usr/local/bin/wssh
Aug 11 22:08:25 webssh22 systemd[1]: Started WebSSH terminal interface.
Aug 11 22:08:26 webssh22 wssh[15678]: [I 220811 22:08:26 settings:125] WarningPolicy
Aug 11 22:08:26 webssh22 wssh[15678]: [I 220811 22:08:26 main:38] Listening on :8888 (http)
Сега можете повторно да го вчитате https://your_domain
во вашиот прелистувач и треба уште еднаш да го добиете интерфејсот WebSSH. Отсега натаму, WebSSH и Nginx автоматски ќе се рестартираат со вашиот сервер и ќе работат во позадина.
Заклучок
Во ова упатство, инсталиравте WebSSH, преносливо решение за обезбедување интерфејс на командната линија во веб-прелистувач. Го подобривте вашето распоредување со додавање SSL, потоа со додавање обратен прокси Nginx и на крајот со создавање системска услуга за WebSSH. Ова е добар модел за распоредување на мали веб-апликации од страна на серверот воопшто, а особено важен за SSH, кој се потпира на парови на клучеви за безбедност.
Следно, можеби ќе сакате да дознаете за другите опции за поврзување за SSH.