Создание ssh-туннелей с помощью putty

What is an SSH tunnel?

SSH tunneling is a method of transporting arbitrary networking data over an encrypted SSH connection. It can be used to add encryption to legacy applications. It can also be used to implement VPNs (Virtual Private Networks) and access intranet services across firewalls.

SSH is a standard for secure remote logins and file transfers over untrusted networks. It also provides a way to secure the data traffic of any given application using port forwarding, basically tunneling any TCP/IP port over SSH. This means that the application data traffic is directed to flow inside an encrypted SSH connection so that it cannot be eavesdropped or intercepted while it is in transit. SSH tunneling enables adding network security to legacy applications that do not natively support encryption.

The figure presents a simplified overview of SSH tunneling. The secure connection over the untrusted network is established between an SSH client and an SSH server. This SSH connection is encrypted, protects confidentiality and integrity, and authenticates communicating parties.

The SSH connection is used by the application to connect to the application server. With tunneling enabled, the application contacts to a port on the local host that the SSH client listens on. The SSH client then forwards the application over its encrypted tunnel to the server. The server then connects to the actual application server — usually on the same machine or in the same data center as the SSH server. The application communication is thus secured, without having to modify the application or end user workflows.

Open VPN

Конечно, конкуренция среди программ сделала свое дело – создать VPN канал теперь можно многими средствами. Одно из таких – это Open VPN. Его также можно использовать на Linux. Итак, для того, чтобы инсталлировать Open VPN, вам потребуется зайти в терминал и ввести следующую строку: apt-get install openvpn openvpn-docs, после чего приложение загрузится и установится. Возможно, у вас будет запрошен пароль администратора.

Open VPN можно настроить по-разному, в зависимости от общей сложности задачи. К примеру, если вам нужно туннелирование между двумя компьютерами, то настройка будет очень простой, а вот если компьютеров много, то и с конфигурациями придется помучиться.

Итак, чтобы создать простой туннель между двумя компьютерами, вам нужно будет сгенерировать специальный ключ. Делается это при помощи запроса: openvpn –genkey –secret static.key. Созданный ключ нужно перенести как на сервер, так и на клиент в сгенерированную при инсталляции папку openvpn, размещенную в каталоге Etc. Внутри этой папки вам предстоит создать файл с конфигурациями, который назовете по-разному для сервера и клиента. На сервере сгененрируйте server.conf, а для клиента пропишите client.conf. Стандартные настройки файла конфигураций вы сможете найти на сайте приложения Open VPN.

После добавления специальных конфигураций, которые вы скопируете на официальном сайте Open VPN, вам нужно будет лишь запустить приложение и на сервере, и на компьютере, проверить ping по каналу и активировать постоянный автозапуск приложения после активации системы при помощи кода: chkconfig openvpn on. После этого вы уже сможете обмениваться данными между сервером и клиентом.

С одной стороны, Open VPN – это весьма удобное приложение, которое позволяет быстро сгенерировать туннель между серверами, но с другой – у вас не получится так же легко создать VPN для соединения множества клиентов с хостом. Для этого реально нужно будет прыгнуть выше головы и утонуть в настройках – настолько это сложно. Так что лучше для решения подобных задач используйте другие утилиты.

Проверяем, как работает autossh

Во второй части мы решали две задачи:

  1. Пробросить ssh-туннель от до через промежуточный , чтобы иметь возможность подключаться с физической машины к серверу БД на виртуальной машине
  2. Пробросить ssh-туннель от до через промежуточный , чтобы иметь возможность подключаться с виртуальной машины к серверу БД на физической машине

Мы сейчас посмотрим, как работает , пробрасывая туннель от до (правая половина первого рисунка). Для проверки того, что туннель работает, установим на виртуальную машину клиент БД MySQL:

$ sudo apt install mysql-client

Теперь с виртуальной машины выполним команду создания туннеля:

$ autossh -M 0 -N remote-forward-ssh-server

А с виртуальной машины соединяемся с сервером БД MySQL:

$ mysql -uroot -pqwerty --protocol=TCP

Соединение прошло успешно. Теперь выключим сетевой интерфейс на виртуальной машине :

$ sudo ip link set dev enp0s3 down

Удостоверимся, что подключиться к серверу БД MySQL теперь нельзя:

$ mysql -uroot -pqwerty --protocol=TCP
mysql:  Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)

И посмотрим, как отреагирует утилита на машине :

$ autossh -M 0 -N remote-forward-ssh-server
Timeout, server 192.168.110.8 not responding. # прошло 90 секунд, сервер не отвечает
ssh: connect to host 192.168.110.8 port 2222: No route to host # попытка соединения с сервером
ssh: connect to host 192.168.110.8 port 2222: No route to host # попытка соединения с сервером
ssh: connect to host 192.168.110.8 port 2222: No route to host # попытка соединения с сервером

При включении сетевого интерфейса на виртуальной машине :

$ sudo ip link set dev enp0s3 up

Туннель будет восстановлен. Это можно проверить, если выполнить команду на :

$ mysql -uroot -pqwerty --protocol=TCP
mysql:  Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.28-0ubuntu0.18.04.4 (Ubuntu)
..........

Если возникли какие-то проблемы с , можно запустить утилиту в режиме отладки:

$ AUTOSSH_DEBUG=1 autossh -M 0 -N remote-forward-ssh-server
autossh: port set to 0, monitoring disabled # мы отключили мониторинг
autossh: checking for grace period, tries = 0
autossh: starting ssh (count 1) # запуск ssh (попытка 1)
autossh: ssh child pid is 2747
autossh: check on child 2747
autossh: set alarm for 600 secs
autossh: execing /usr/bin/ssh
Timeout, server 192.168.110.8 not responding.
autossh: check on child 2747
autossh: ssh exited with error status 255; restarting ssh
autossh: expired child, returning 1
autossh: checking for grace period, tries = 1
autossh: starting ssh (count 2) # запуск ssh (попытка 2)
autossh: ssh child pid is 2754
autossh: check on child 2754
autossh: set alarm for 559 secs
autossh: execing /usr/bin/ssh
ssh: connect to host 192.168.110.8 port 2222: No route to host
autossh: check on child 2754
autossh: ssh exited with error status 255; restarting ssh
autossh: expired child, returning 1
autossh: checking for grace period, tries = 2
autossh: starting ssh (count 3) # запуск ssh (попытка 3)
autossh: ssh child pid is 2755
autossh: check on child 2755
autossh: set alarm for 524 secs
autossh: execing /usr/bin/ssh
ssh: connect to host 192.168.110.8 port 2222: No route to host
autossh: check on child 2755
autossh: ssh exited with error status 255; restarting ssh
autossh: expired child, returning 1
autossh: checking for grace period, tries = 3
autossh: starting ssh (count 4) # запуск ssh (попытка 4)
autossh: ssh child pid is 2756
autossh: check on child 2756
autossh: set alarm for 521 secs
autossh: execing /usr/bin/ssh

Поиск:
CLI • Linux • Ubuntu • SSH • Виртуальная машина • Команда • Конфигурация • Настройка • Сервер • Туннель

Сначала основы

Разбор командной строки SSH

В следующем примере используются обычные параметры, часто встречающиеся при подключении к удалённому серверу .

  • : вывод отладочной информации особенно полезен при анализе проблем аутентификации. Можно использовать несколько раз для вывода дополнительной информации.
  • : порт для подключения к удалённому серверу SSH. 22 не обязательно указывать, потому что это значение по умолчанию, но если протокол на каком-то другом порту, то указываем его с помощью параметра . Порт прослушивания указывается в файле в формате .
  • : сжатие для соединения. Если у вас медленный канал или вы просматриваете много текста, это может ускорить связь.
  • : строка перед символом @ обозначает имя пользователя для аутентификации на удалённом сервере. Если не указать его, то по умолчанию будет использоваться имя пользователя учётной записи, в которую вы вошли в данный момент (~$ whoami). Пользователя также можно указать параметром .
  • : имя хоста, к которому подключается , это может быть полное доменное имя, IP-адрес или любой хост в локальном файле hosts. Для подключения к хосту, который поддерживает и IPv4, и IPv6, можно добавить в командную строку параметр или для правильного резолвинга.

Все вышеперечисленные параметры являются необязательными, кроме .

Использование файла конфигурации

Хотя многие знакомы с файлом , есть ещё файл конфигурации клиента для команды . Значение по умолчанию , но его можно определить как параметр для опции .

В приведённом выше примерном файле конфигурации ssh две записи хоста. Первая обозначает все хосты, для всех применяется параметр конфигурации Port 2222. Вторая говорит, что для хоста remoteserver следует использовать другое имя пользователя, порт, FQDN и IdentityFile.

Файл конфигурации может сэкономить много времени на ввод символов, позволяя автоматически применять продвинутую конфигурацию при подключении к конкретным хостам.

Копирование файлов по SSH с помощью SCP

SSH-клиент поставляется с двумя другими очень удобными инструментами для копирования файлов по зашифрованному ssh-соединению. Ниже см. пример стандартного использования команд scp и sftp

Обратите внимание, что многие параметры для ssh применяются и в этих командах

В этом примере файл mypic.png скопирован на remoteserver в папку /media/data и переименован в mypic_2.png.

Не забывайте о разнице в параметре порта. На этом попадаются многие, кто запускает из командной строки. Здесь параметр порта , а не , как в ssh-клиенте! Вы забудете, но не волнуйтесь, все забывают.

Для тех, кто знаком с консольным , многие из команд похожи в . Вы можете сделать push, put и ls, как сердце пожелает.

Reconfigure PuTTY for Remote Desktop Protocol (RDP) tunneling through ssh

To tunnel Remote Desktop Protocol over ssh using PuTTY, all you need is an account on the premises. For example a firewall or Linux server with ssh access, and PuTTY on your Windows desktop. PuTTY is a nifty ssh client for Windows that you can download here.

Once you are connected to your remote network with ssh/PuTTY, you need to reconfigure the connection to support SSH-tunneling. In the PuTTY Reconfiguration screen, go to Connection → SSH → Tunnels. This is where we can set up an SSH tunnel for Remote Desktop.

Under Source port, add your local IP address and port. Because the RDP 6+ client in Windows has issues with the loopback to TCP Port 3390, you need to use a different port. I use TCP port 3388 on IP address 127.0.0.2, and my remote internal IP address and RDP port 3389 as Destination (192.168.48.211:3389). See the image:

SSH port forwarding in PuTTY

After clicking Apply, the SSH-tunnel for remote desktop is active, and you can connect the Remote Desktop Connection to 127.0.0.2:3388:

Remote Desktop Connection through SSH tunnel

Что такое SSH туннелирование, для чего оно необходимо

На самом деле все предельно просто. К примеру, у вас есть удаленный сервер и локальный компьютер. В один прекрасный момент вам понадобится загрузить на хост какие-либо данные, или наоборот скачать с сервера какие-то файлы на компьютер. Поскольку сетевой протокол работает не совсем, как обычный веб-интерфейс, для загрузки информации вам понадобится создать SSH туннель. Это будет подобие канала, по которому вы сможете обмениваться данными с серверами, причем есть как прямой, так и обратный SSH туннель.

Именно таким образом вы и сможете внедрить в сетевой протокол туннель. Но вам для этого понадобится специальная утилита, каких хватает на данный момент в Интернете. Одна из лучших в своем роде – это SSH Tunnel Easy. С ее обзора мы и начнем.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *