SSH к машине за NAT
Вам нужна оболочка на машине без публичного IP — компьютер в офисе, Raspberry Pi дома, сервер на линии с carrier-grade NAT — а вы сидите за своим ноутбуком, тоже за NAT. Ни одна из сторон не может принять входящее соединение. С LRO это не проблема: оба агента устанавливают исходящие соединения, и вы подключаетесь по SSH к локальному порту на ноутбуке, который ведёт на удалённую машину.
-
Убедитесь, что SSH работает на удалённой машине
На машине, к которой нужен доступ, демон SSH должен слушать локально — по умолчанию на порту 22. Ничего из этого не должно смотреть в интернет; LRO подключается к нему с той же машины.
$ ss -ltn | grep :22 # sshd listening on 127.0.0.1:22 or 0.0.0.0:22Удалённая машина запускает агента LRO в режиме Client, а ваш ноутбук — в режиме Support; зарегистрируйте обоих, как в вашем первом туннеле, если ещё не сделали этого.
-
Добавьте SSH-эндпоинт на агенте-клиенте
В панели — Endpoints → Create endpoint (эндпоинты → создать эндпоинт). Выберите клиентского агента (удалённую машину), назовите его, например, Office SSH, и задайте target (цель)
127.0.0.1и port (порт)22.
Рис. 1. SSH-эндпоинт живёт на агенте-клиенте — цель 127.0.0.1:22. -
Откройте туннель со своей машины
Tunnels → Add tunnel (туннели → добавить туннель). Выберите свой ноутбук как саппорт-агента, выберите эндпоинт Office SSH и задайте listen port (локальный порт) — любой свободный локально, например
2222. Создайте его; через мгновение он станет Active (активен).
Рис. 2. Активный SSH-туннель — ваша машина слушает на 2222 и пересылает на удалённый 127.0.0.1:22. -
Подключитесь по SSH к локальному порту
На своём ноутбуке подключитесь по SSH к локальному порту. Соединение попадает на sshd удалённой машины через зашифрованный туннель:
$ ssh user@127.0.0.1 -p 2222
Рис. 3. Настоящая оболочка на удалённой машине — через порт, который существует только на вашем ноутбуке. Всё, что работает поверх SSH, работает так же, будучи направленным на локальный порт:
$ scp -P 2222 file.tar.gz user@127.0.0.1:/tmp/ $ sftp -P 2222 user@127.0.0.1 $ rsync -e 'ssh -p 2222' -a ./dir user@127.0.0.1:/srv/Чтобы не вводить порт каждый раз, добавьте блок host в
~/.ssh/config:# ~/.ssh/config Host office HostName 127.0.0.1 Port 2222 User user… и тогда достаточно
ssh office.
Заметки
- Обе стороны за NAT — не проблема. Каждый агент устанавливает только исходящее соединение; ничего не открывается в интернет.
- Ограничьте доступ — задайте Allowed addresses (ACL) (разрешённые адреса) на туннеле, чтобы ограничить, кто на вашей машине может пользоваться слушателем, и оставьте аутентификацию по SSH-ключу на удалённом хосте.
- Любой TCP-сервис — те же три шага дают доступ к RDP (3389), базе данных или веб-панели администратора; меняется только целевой порт.
Достучитесь до своей машины, не открыв ни единого входящего порта.
Создать аккаунт →