Страница 1 из 3
туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 14:39
Olej
Задача: получать доступ (по SSH главным образом) к удалённым (сильно
... на десятки и сотни километров) компьютерам ... своих приятелей, знакомых и учеников а). независимо от их действий (выполняемых команд) и б). в любое время когда удалённый компьютер включен.
Локальный (целевой) компьютер, к которому подключаемся, естественно, с "серым", локальным IP (10.*.*.*, 172.16.*.*, 192.168.*.*) + на разных провайдерах и разных технологиях Интернет подключениях, с разными своими особенностями от разных провайдеров.
Частный IP-адрес:
IPv4 § Назначения подсетей
10.0.0.0 — 10.255.255.255 (маска подсети для бесклассовой (CIDR) адресации: 255.0.0.0 или /8)
100.64.0.0 — 100.127.255.255 (маска подсети 255.192.0.0 или /10) - Данная подсеть рекомендована согласно RFC 6598 для использования в качестве адресов для CGN (Carrier-Grade NAT).
172.16.0.0 — 172.31.255.255 (маска подсети: 255.240.0.0 или /12)
192.168.0.0 — 192.168.255.255 (маска подсети: 255.255.0.0 или /16)
Такие вещи временами (нередко) нужны
в учебных целях (в порядке технической помощи
), когда нужно сделать инсталляции, конфигурации и т.д. и т.п. ... не выходя их своего дома по каждому чиху ... особенно во времена карантинов и ограничений.
Способов для этого (и
помимо SSH) много ...
И они описаны здесь в темах:
VNC : TeamViewer
О доступе к сайту на локалхост извне
удалённый SSH
Удалённый доступ Raspberry Pi
NoMachine - удалённый рабочий стол
Но большинство из них не свободны от недостатков (для этих целей).
Кроме того, это писалось/проверялось в разные времена (разные годы
) и требует упорядочения ... и для конкретной цели, которая мне сейчас подвернулась
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 14:53
Olej
Olej писал(а): ↑31 янв 2022, 14:39
VNC : TeamViewer
TeamViewer -
любимое народное средство для этих целей
, но имеет ряд недостатков для моих нужд:
1). требует ID+пароль доступа, которые мне должен сообщать пользователь целевого (управляемого) компьютера ... с голоса это не годится, поэтому нужен
дополнительный канал связи сообщениями (он должен быть
там уже установлен: Skype, Viber, Telegram, WhatApps ...) - это требует обязательного присутствия пользователя за удалённым компьютером
2). ограничение п.1 можно бы обойти не выключая целевой компьютер сутками ... но это тоже как-то ... возможно, но проблемно
3). TeamViewer для некоммерческого использования предусматривает ограничение времени коннекта (для какой-то, не знаю, версии - "не должно превышать 15 часов за 30 дней", сейчас цифр не знаю) ... это ограничение, по-моему присутствует (применяется) только с активной стороны (см.
VNC : TeamViewer)
Olej писал(а): ↑31 янв 2022, 14:39
NoMachine - удалённый рабочий стол
Такие и большинство других средств "удалённого рабочего стола" требует а). либо "белого" IP (чего практически никогда не бывает), либо б). проброшенного канала VPN или SSH, который нужно создавать предварительно ... т.е. сводится "к предыдущей задаче".
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 16:40
Olej
туннель SSH
В качестве транзитного узла для туннеля SSH совершенно естественно (для меня) использовать вот этот арендуемый сервер форума:
Код: Выделить всё
olej@R420:~/2022$ host linux-ru.ru
linux-ru.ru has address 185.200.243.3
linux-ru.ru mail is handled by 10 mx2.timeweb.ru.
linux-ru.ru mail is handled by 10 mx1.timeweb.ru.
Захожу туда по SSH чтобы подготовить транзит...
Код: Выделить всё
olej@R420:~$ ssh olej@185.200.243.3
olej@185.200.243.3's password:
Linux 277938.local 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Oct 7 23:08:35 2021 from 193.28.177.115
Давненько я там не был ... с начала октября 2021 ...
Код: Выделить всё
olej@277938:~$ uptime
14:58:09 up 463 days, 14:44, 1 user, load average: 0.04, 0.05, 0.00
463 дня сервер (и форум)
безупречно работает (без перезагрузки!
) ... Это я хорошо тогда потрудился.
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 16:59
Olej
Olej писал(а): ↑31 янв 2022, 16:40
Давненько я там не был ... с начала октября 2021 ...
Смотрю что там с
сервером SSH (хотя если я к нему подключился, то всё ОК
):
Код: Выделить всё
olej@277938:~$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-10-25 00:13:55 MSK; 1 years 3 months ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 560 (sshd)
Tasks: 5 (limit: 544)
Memory: 13.1M
CGroup: /system.slice/ssh.service
├─ 560 /usr/sbin/sshd -D
├─ 9970 sshd: unknown [priv]
├─ 9971 sshd: unknown [net]
├─10002 sshd: unknown [priv]
└─10003 sshd: unknown [net]
Но беспокоит меня...
Olej писал(а): ↑23 фев 2020, 17:10
Меня беспокоит иногда, что такая, или любая другая сессия SSH обрывается по "тайм-ауту молчания", самопроизвольно через некоторое время не использования...
удалённый SSH:
Код: Выделить всё
olej@277938:~$ cat /usr/share/openssh/sshd_config | grep ClientAlive
#ClientAliveInterval 0
#ClientAliveCountMax 3
И действительно, стоило ненадолго отойти, и на своём рабочем компьютере получаю:
Код: Выделить всё
olej@277938:~$ client_loop: send disconnect: Broken pipe
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 17:16
Olej
Olej писал(а): ↑31 янв 2022, 16:59
И действительно, стоило ненадолго отойти, и на своём рабочем компьютере получаю:
В новом подключении SSH:
Код: Выделить всё
olej@277938:~$ sudo -i
root@277938:~# whoami
root
root@277938:~# mc
root@277938:/etc# cd /usr/share/openssh/
root@277938:/usr/share/openssh# ls -l
total 8
-rw-r--r-- 1 root root 3250 Jan 31 2020 sshd_config
-rw-r--r-- 1 root root 1608 Jan 31 2020 sshd_config.md5sum
И редактирую:
Код: Выделить всё
olej@277938:~$ cat /usr/share/openssh/sshd_config | grep Alive
TCPKeepAlive yes
ClientAliveInterval 30
ClientAliveCountMax 1000
Серверу SSH
перечитать конфигурации:
Код: Выделить всё
olej@277938:~$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-10-25 00:13:55 MSK; 1 years 3 months ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 560 (sshd)
Tasks: 1 (limit: 544)
Memory: 12.3M
CGroup: /system.slice/ssh.service
└─560 /usr/sbin/sshd -D
olej@277938:~$ sudo kill -SIGHUP 560
Размер процесса сервера после этого, по крайней мере, поменялся в размере:
Код: Выделить всё
olej@277938:~$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-10-25 00:13:55 MSK; 1 years 3 months ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 560 (sshd)
Tasks: 1 (limit: 544)
Memory: 13.2M
CGroup: /system.slice/ssh.service
└─560 /usr/sbin/sshd -D
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 18:13
Olej
Olej писал(а): ↑31 янв 2022, 16:59
удалённый SSH:
Olej писал(а): ↑15 янв 2020, 18:11
2. Инициализирую реверсный туннель SSH, из локального компьютера делаю:
Код: Выделить всё
olej@ACER:~/2020_WORK/rus.linux.net.hist$ ssh -fN -R 185.178.47.95:8080:localhost:80 olej@185.178.47.95
olej@185.178.47.95's password:
Это должно создать реверсный канал с порта 8080 сервера хостера на порт 80 локального компьютера где работает форум.
Пробую с локального (своего) компьютера создать туннель с порта ... скажем 222 на 22 (стандартный порт SSH):
Код: Выделить всё
olej@R420:~$ ssh -fN -R 185.200.243.3:222:localhost:22 olej@185.200.243.3
olej@185.200.243.3's password:
olej@R420:~$ Warning: remote port forwarding failed for listen port 222
(здесь password - это пароль на удалённом SSH сервере)...
И получаю отлуп ... с этим вот сообщением (выше) + обрываются ранее установленные вручную SSH сессии (почему то...)
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 18:20
Olej
Olej писал(а): ↑31 янв 2022, 18:13
И получаю отлуп ... с этим вот сообщением (выше) + обрываются ранее установленные вручную SSH сессии (почему то...)
Причина 1-я (почти очевидная) что на сервере работает файервол ufw и закрыт запрошенный порт 222...
Причина 2-я (но не проверенная) что запрошен порт 222, из привилегированных <1024, требующие особых root полномочий...
Устраняем #1:
Код: Выделить всё
olej@277938:~$ sudo -i
root@277938:~# which ufw
/usr/sbin/ufw
root@277938:~# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] WWW Full ALLOW IN Anywhere
[ 3] SMTP ALLOW OUT Anywhere (out)
[ 4] 6666 ALLOW IN Anywhere
[ 5] 6665 ALLOW IN Anywhere
[ 6] 8080 ALLOW IN Anywhere
[ 7] 10050 ALLOW IN Anywhere
[ 8] 10050/tcp ALLOW IN Anywhere
Обсуждать порты не будем
... а добавим новый:
Код: Выделить всё
root@277938:~# ufw allow 2222
Rule added
root@277938:~# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] WWW Full ALLOW IN Anywhere
[ 3] SMTP ALLOW OUT Anywhere (out)
[ 4] 6666 ALLOW IN Anywhere
[ 5] 6665 ALLOW IN Anywhere
[ 6] 8080 ALLOW IN Anywhere
[ 7] 10050 ALLOW IN Anywhere
[ 8] 10050/tcp ALLOW IN Anywhere
[ 9] 2222 ALLOW IN Anywhere
Смотрим порты:
Код: Выделить всё
root@277938:~# netstat -nap -t4
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 24801/zabbix_agentd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2625/mysqld
tcp 0 0 185.200.243.3:2222 0.0.0.0:* LISTEN 15466/sshd: olej
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 560/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 24881/exim4
tcp 0 340 185.200.243.3:22 193.28.177.117:40974 ESTABLISHED 14650/sshd: olej [p
tcp 0 0 185.200.243.3:22 193.28.177.117:41312 ESTABLISHED 15451/sshd: olej [p
tcp 0 69 185.200.243.3:22 122.194.229.59:18752 FIN_WAIT1 -
tcp 0 0 185.200.243.3:10050 92.53.116.12:60548 TIME_WAIT -
tcp 0 0 185.200.243.3:10050 92.53.116.12:33322 TIME_WAIT -
tcp 0 0 185.200.243.3:10050 92.53.116.12:58940 TIME_WAIT -
tcp 0 0 185.200.243.3:22 193.28.177.117:41054 ESTABLISHED 14798/sshd: olej [p
tcp 0 0 185.200.243.3:22 193.28.177.117:41060 ESTABLISHED 14820/sshd: olej [p
Назначенный порт 2222 в состоянии прослушивания (LISTEN).
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 18:29
Olej
Olej писал(а): ↑31 янв 2022, 18:20
Смотрим порты:
Теперь устанавливаю туннель на мой локальный компьютер (на котором это делается), переназначением обращения к 185.200.243.3:2222 к порту 22 этого локального компьютера:
Код: Выделить всё
olej@R420:~$ ssh -fN -R 185.200.243.3:2222:localhost:22 olej@185.200.243.3
olej@185.200.243.3's password:
Теперь ошибка не возникает...
Наконец, с 3-го, клиентского компьютера в LAN, транзитом через SSH-туннель, через сервер (форума) за 1000 км., обращаюсь к SSH-серверу другого локального компьютера в LAN:
Код: Выделить всё
olej@nvidia:~$ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 70:71:bc:a3:c5:c0 brd ff:ff:ff:ff:ff:ff
olej@nvidia:~$ ip a s dev eno1
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 70:71:bc:a3:c5:c0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.1.255 scope global noprefixroute eno1
valid_lft forever preferred_lft forever
inet6 fe80::7271:bcff:fea3:c5c0/64 scope link
valid_lft forever preferred_lft forever
Код: Выделить всё
olej@nvidia:~$ ssh -p 2222 olej@185.200.243.3
The authenticity of host '[185.200.243.3]:2222 ([185.200.243.3]:2222)' can't be established.
ECDSA key fingerprint is SHA256:j8BaVG07g5rSIryljdB2DojGWk1cWJ23TQNIQI134fc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[185.200.243.3]:2222' (ECDSA) to the list of known hosts.
olej@185.200.243.3's password:
Last login: Mon Jan 31 17:00:20 2022 from 127.0.0.1
olej@R420:~$ hostname
R420
И теперь на транзитном сервере (туннеле) смотрю:
Код: Выделить всё
root@277938:~# netstat -nap | grep 2222
tcp 0 0 185.200.243.3:2222 0.0.0.0:* LISTEN 15466/sshd: olej
tcp 0 0 185.200.243.3:2222 193.28.177.117:47008 ESTABLISHED 15466/sshd: olej
tcp 0 0 185.200.243.3:2222 193.28.177.117:37008 ESTABLISHED 15466/sshd: olej
(здесь 2 SSH соединения изнутри LAN)
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 18:43
Olej
Olej писал(а): ↑31 янв 2022, 18:29
И теперь на транзитном сервере (туннеле) смотрю:
Но это (пока)
моделирование удалённой ситуации.
Но прежде чем её переносить на реальные хосты, нужно
ликвидировать установленный туннель на транзитном сервере.
Как-то так:
Код: Выделить всё
root@277938:~# netstat -pnlt | grep :2222
tcp 0 0 185.200.243.3:2222 0.0.0.0:* LISTEN 15466/sshd: olej
root@277938:~# ps aux | grep 15466
olej 15466 0.0 0.9 17012 4540 ? S 17:55 0:00 sshd: olej
root 17144 0.0 0.1 6356 820 pts/0 S+ 18:48 0:00 grep 15466
root@277938:~# kill -9 15466
Код: Выделить всё
root@277938:~# netstat -nap | grep 2222
root@277938:~#
И на 2-х удалённо подключенных локально компьютерах получаю тут же:
Код: Выделить всё
olej@R420:~$ Connection to 185.200.243.3 closed by remote host.
Connection to 185.200.243.3 closed.
olej@nvidia:~$
Код: Выделить всё
olej@R420:~$ Connection to 185.200.243.3 closed by remote host.
Connection to 185.200.243.3 closed.
olej@R420:~$
(последний - был подключен сам к себе, но через 1000-километровый туннель
)
Re: туннель SSH к удалённым хостам
Добавлено: 31 янв 2022, 20:16
Olej
Olej писал(а): ↑31 янв 2022, 18:43
Но это (пока) моделирование удалённой ситуации.
А теперь (барабанная дробь
... там-там ...):
1. Захожу 1 раз (больше не понадобится) через TeamViewer на удалённый компьютер своего приятеля, в 50-60 километрах, на диаметрально другом конце города...
- Снимок экрана от 2022-01-31 19-15-14.png (562.51 КБ) 1115 просмотров
Дальше всё делаю в терминале этого целевого компьютера...