<!--
.. title: SSH через сервер
.. slug: ssh-via-server
.. date: 2021-01-15 19:04:10 UTC+03:00
.. updated: 2021-01-18 02:10:13 UTC+03:00
.. tags: linux, ssh
.. category: 
.. link: 
.. description: 
.. type: text
-->

Для подключения одного ПК к другому по *ssh* через сервер (туннелирование)
можно использовать следующую схему:

![SSH via server diagram](/images/ssh-ms.png)

*(Рисунок сделан за 5 минут при помощи редактора [yEd](https://www.yworks.com/products/yed))*

## Создание туннеля

На ведомом ПК (к которому подключаются) надо установить
соединение с сервером, при этом "пробросить" порт 1234 на сервере
на свой порт 22, где запущен ssh-сервер (remote port forwarding).


```bash
ssh -R 1234:127.0.0.1:22 -N user@server
```

*user* - имя пользователя на сервере.

На ведущем ПК (который подключается) надо установить
соединение с сервером, при этом "пробросить" локальный порт 1234 на серверный
порт 1234 (local port forwarding).

```bash
ssh -L 1234:127.0.0.1:1234 -N user@server
```

*user* - имя пользователя на сервере (не обязательно такое же как и у ведомого).

## Подключение по SSH через туннель

На ведущем ПК (который подключается) надо установить
соединение с ведомым компьютером через туннель.

```bash
ssh -p 1234 userslave@127.0.0.1
```

*userslave* - имя пользователя на ведомом компьютере.

Происходит следующее:

1. ssh подключается на свой адрес на порт 1234
2. соединение туннелируется на сервер на порт 1234 (local forwarding)
3. соединение туннелируется на ведомый компьютер на порт 22 (remote forwarding)

P. S. [Ссылка](https://habr.com/ru/post/531590/) не совсем по теме, но тоже интересно.