SSH-реле и туннели
Как работает реле
Заголовок раздела «Как работает реле»Оба участника — ваш ноутбук с nyx-operator (или агент-хост) и целевая машина — уже держат исходящие WebSocket-соединения к серверу управления. Реле использует их:
ssh -p 2222 127.0.0.1 nx.3fe.ru машина B┌────────────────┐ WS (out) ┌──────────┐ WS (out) ┌────────────┐│ nyx-operator │──────────>│ relay │<──────────│ агент → :22││ слушает :2222 │ binary │ registry │ binary │ (loopback) │└────────────────┘ └──────────┘ └────────────┘- Инициатор просит панель открыть поток к порту машины B.
- Панель проверяет: обе стороны в одной организации, машина B online, у неё включено «Реле». Каждое открытие попадает в аудит.
- Агент на B подключается только к
127.0.0.1:port— реле нельзя использовать для сканирования её сети. - Дальше сервер переключает бинарные кадры между двумя соединениями, не разбирая их.
Что видит панель: SSH-протокол шифруется между вашим клиентом и sshd машины, поэтому сервер управления переносит только шифротекст. Он знает, кто, когда и к какому порту какой машины открыл поток, но не содержимое сессии. Аутентификация тоже сквозная — ваши обычные SSH-ключи и пароли; панель ключей не выпускает и не хранит.
Что нужно на целевой машине
Заголовок раздела «Что нужно на целевой машине»- Включённое «Реле» в «Админ → Агенты» (или токен регистрации с отметкой «С реле»). По умолчанию реле выключено.
- Работающий sshd на
127.0.0.1:22(или другой сервис на нужном порту). На Windows установщик ставит OpenSSH Server галочкой; входящий порт в брандмауэре открывать не нужно.
Свои ключи или пароль для входа по SSH на машину у вас должны быть заранее — реле их не заменяет. Если ключа на машине ещё нет, администратор может положить туда ваш публичный ключ через агента, не заходя на машину: панель передаёт одну строку authorized_keys, а агент кладёт её туда, откуда её читает локальный sshd — на Linux в ~/.ssh/authorized_keys указанного пользователя, на Windows в administrators_authorized_keys с нужными правами. Повторная установка того же ключа ничего не меняет. Машина должна быть online, а само действие пишется в аудит: в журнал попадают только тип ключа и комментарий.
Туннель со своего ноутбука: nyx-operator
Заголовок раздела «Туннель со своего ноутбука: nyx-operator»Если nyx-operator ещё не установлен, поставьте его одной командой, см. Рабочее место оператора.
- В кабинете «Настройки → API-токены» нажмите «Создать токен», задайте имя (например
laptop) и скопируйте значение — оно показывается один раз. - Сохраните его в CLI:
nyx-operator login --server https://app.nx.3fe.ru --token nyxop_…Конфигурация записывается в ~/.config/nythronix/operator.json; переменные окружения NYX_SERVER и NYX_TOKEN имеют приоритет над файлом.
- Найдите машину. Список выглядит как в кабинете: имя, hostname, состояние, ОС, версия, реле и теги.
nyx-operator agents # весь паркnyx-operator agents --online --tag env:prod # только нужное- Откройте туннель и подключайтесь. Машина называется по имени, hostname, логину или ID, хватает уникальной подстроки. Если подходит несколько записей и online ровно одна, выбирается она.
nyx-operator tunnel web-01 --port 22 --listen 127.0.0.1:2222
ssh -p 2222 user@127.0.0.1scp -P 2222 ./backup.tgz user@127.0.0.1:/tmp/rsync -e 'ssh -p 2222' -av ./dist/ user@127.0.0.1:/srv/app/--port — порт на loopback машины (по умолчанию 22), --listen — локальный адрес (по умолчанию 127.0.0.1:2222). Каждое принятое соединение становится отдельным потоком через реле; Ctrl-C закрывает всё. Порт любой, не только 22: --port 3389 для RDP, --port 5432 для Postgres. На странице «Туннели» и в «Админ → Агенты» есть кнопка «Копировать команду nyx-operator», которая подставляет выбранную машину.
Те же туннели умеет открывать Claude Code через MCP для операторов.
Отозвать API-токен можно там же в настройках — CLI с ним сразу перестанет работать.
Туннель на агенте: страница «Туннели»
Заголовок раздела «Туннель на агенте: страница «Туннели»»Если вам нужно, чтобы одна управляемая машина достучалась до другой (например, rsync между серверами за разными NAT), откройте туннель в кабинете, пункт «Туннели»:
- Агент-хост (A) — машина, на которой откроется локальный порт;
- Целевой агент (B) — машина, к чьему loopback-порту он ведёт;
- Удалённый порт и Адрес прослушивания.
После «Открыть туннель» в таблице появится Локальный адрес на машине A и счётчик Соединения. Туннели эфемерны: живут в памяти агента A и исчезают при его перезапуске; кнопка «Остановить» закрывает туннель вместе со всеми соединениями.
То же самое из командной строки самой машины A (нужен root для чтения /etc/nythronix/agent.json):
sudo nythronix-agent tunnel <agent-id-B> --port 22 --listen 127.0.0.1:2222SSH в браузере
Заголовок раздела «SSH в браузере»В форме «Новая сессия» поле «SSH на другой агент» запускает ssh на агенте-хосте до выбранной машины через то же реле и показывает его как обычный терминал в кабинете. См. Терминал и сессии.
Прямой SSH-терминал из браузера без агента-хоста пока недоступен.
Консоль порта и веб-прокси
Заголовок раздела «Консоль порта и веб-прокси»Пункт «Консоль порта» открывает сырой TCP-поток к порту машины прямо в терминале кабинета. Подходит для текстовых протоколов и отладочных портов, а для оболочки используйте SSH.
Там же кнопка «Открыть как веб-страницу»: панель откроет в новой вкладке адрес
https://app.nx.3fe.ru/proxy/<agent-id>/<port>/и будет проксировать HTTP-запросы к сервису, который слушает на loopback машины — админке роутера, Grafana, внутреннему дашборду. Доступ проверяется так же, как для реле: нужна ваша сессия в кабинете и машина вашей организации.
Ограничения текущей версии прокси: каждый запрос — отдельный поток через реле, ответ ограничен 16 МиБ и 30 секундами, WebSocket не проксируется; относительные ссылки на HTML-страницах переписываются, абсолютные — нет. Для сложных веб-приложений надёжнее туннель nyx-operator до нужного порта и обычный http://127.0.0.1:<локальный порт>/.