туннель SSH к удалённым хостам

Настройка, программирование, распределённые вычисления

Модераторы: Olej, bellic, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 14:39

Задача: получать доступ (по 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 - удалённый рабочий стол
Но большинство из них не свободны от недостатков (для этих целей).
Кроме того, это писалось/проверялось в разные времена (разные годы :-o ) и требует упорядочения ... и для конкретной цели, которая мне сейчас подвернулась :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 14:53

Olej писал(а):
31 янв 2022, 14:39
VNC : TeamViewer
TeamViewer - любимое народное средство для этих целей :-D , но имеет ряд недостатков для моих нужд:
1). требует ID+пароль доступа, которые мне должен сообщать пользователь целевого (управляемого) компьютера ... с голоса это не годится, поэтому нужен дополнительный канал связи сообщениями (он должен быть там уже установлен: Skype, Viber, Telegram, WhatApps ...) - это требует обязательного присутствия пользователя за удалённым компьютером
2). ограничение п.1 можно бы обойти не выключая целевой компьютер сутками ... но это тоже как-то ... возможно, но проблемно
3). TeamViewer для некоммерческого использования предусматривает ограничение времени коннекта (для какой-то, не знаю, версии - "не должно превышать 15 часов за 30 дней", сейчас цифр не знаю) ... это ограничение, по-моему присутствует (применяется) только с активной стороны (см. VNC : TeamViewer)
Olej писал(а):
31 янв 2022, 14:39
NoMachine - удалённый рабочий стол
Такие и большинство других средств "удалённого рабочего стола" требует а). либо "белого" IP (чего практически никогда не бывает), либо б). проброшенного канала VPN или SSH, который нужно создавать предварительно ... т.е. сводится "к предыдущей задаче".

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 16:40

туннель 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 дня сервер (и форум) безупречно работает (без перезагрузки! ;-) ) ... Это я хорошо тогда потрудился. :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 16:59

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 17:16

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 18:13

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 сессии (почему то...)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 18:20

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                  
Обсуждать порты не будем :lol: ... а добавим новый:

Код: Выделить всё

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).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 18:29

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)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 18:43

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-километровый туннель ;-) )

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: туннель SSH к удалённым хостам

Непрочитанное сообщение Olej » 31 янв 2022, 20:16

Olej писал(а):
31 янв 2022, 18:43
Но это (пока) моделирование удалённой ситуации.
А теперь (барабанная дробь :lol: ... там-там ...):
1. Захожу 1 раз (больше не понадобится) через TeamViewer на удалённый компьютер своего приятеля, в 50-60 километрах, на диаметрально другом конце города...
Снимок экрана от 2022-01-31 19-15-14.png
Снимок экрана от 2022-01-31 19-15-14.png (562.51 КБ) 1058 просмотров
Дальше всё делаю в терминале этого целевого компьютера...

Ответить

Вернуться в «Сети»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей