SSD Nodes Learn 🎉 VPS от $4.99/мес
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-07

Как получить доступ к агенту Hermes с телефона

Настройте удаленное управление агентом Hermes на VPS через Tailscale, HTTPS-прокси или SSH. Инструкция для версии v0.20.0 описывает безопасные методы защиты доступа к серверу.

Три способа доступа к агенту Hermes с телефона

Чтобы получить доступ к агенту Hermes с телефона, используется его веб-панель управления, и ключевой вопрос заключается в том, что именно находится перед этой панелью. Первый вариант — частная mesh-сеть, где панель управления слушает только адрес Tailscale, а порты не выведены в интернет. Второй вариант — публичная точка доступа за reverse proxy с TLS (transport layer security) и авторизацией, где эта авторизация является единственной защитой терминала вашего сервера. Третий вариант — SSH (secure shell) через терминальное приложение, что требует минимум настройки и предоставляет максимум доступа.

Это руководство начинается с того момента, на котором заканчивается запуск агента Hermes на собственном VPS. Агент установлен, он отвечает в командной строке, и теперь вы хотите получить к нему доступ со своего мобильного устройства.

Приведенные ниже команды написаны для тега v2026.8.3, опубликованного 3 августа 2026 года и обозначенного как v0.20.0 в примечаниях к релизу. Hermes выпускает обновления часто, поэтому зафиксируйте версию на машине с помощью тега, вместо того чтобы следовать за main. Установщик принимает коммит:

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --commit 3c27eb6234bf
hermes version

hermes version выводит информацию о том, что именно установлено. Сравните её с тегом, прежде чем доверять любому флагу на этой странице.

Что входит в репозиторий и чего в нем нет

В репозитории Hermes нет приложений для iOS или Android. Нативный клиент — это hermes desktop (псевдоним hermes gui), приложение на базе Electron для macOS, Windows и Linux. Оно может подключаться к удаленному агенту вместо локального: установите удаленный URL в http://<server-address>:9119 в разделе настроек Gateway или экспортируйте переменную HERMES_DESKTOP_REMOTE_URL=http://<server-address>:9119 перед запуском. Это решает вопрос с использованием второго ноутбука. Для телефона это решение не подходит.

Интерфейс, который вы используете с телефона, — это hermes dashboard, веб-интерфейс. Он управляет конфигурацией, сессиями, заданиями cron, навыками, логами и платформами обмена сообщениями, а также содержит встроенный терминал: сервер запускает hermes --tui через PTY (псевдотерминал) и передает вывод на страницу. На узком экране переключатель сессий сворачивается в выдвижную панель, поэтому верстка адаптируется под телефон.

По умолчанию панель управления слушает 127.0.0.1:9119 и открывает вкладку браузера на самом сервере, что бесполезно на headless VPS (виртуальном выделенном сервере). Запустите ее без браузера и проверьте сокет:

hermes dashboard --no-open
ss -lntp | grep 9119

Слушатель на 127.0.0.1:9119 доступен только с самого сервера. Слушатель на 0.0.0.0:9119 доступен из любой сети, к которой подключена машина, включая публичную. Эта единственная строка определяет уровень вашей открытости, поэтому проверяйте ее, а не полагайтесь на предположения.

Вариант 1: частная mesh-сеть с Tailscale

Выберите этот вариант, если у вас нет причин поступать иначе. Tailscale — это mesh VPN (виртуальная частная сеть), построенная на базе WireGuard. Каждое устройство, которое вы добавляете в сеть, получает стабильный адрес и взаимодействует с остальными напрямую. Ваш телефон подключается к той же сети, поэтому панели управления вообще не требуется публичный порт.

На сервере:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale ip -4

Установите приложение Tailscale на телефон и войдите в ту же учетную запись. Команда tailscale status на сервере покажет телефон в списке по его имени. Теперь привяжите панель управления к адресу, который вывела команда tailscale ip -4:

hermes dashboard --host 100.101.102.103 --port 9119 --no-open

Привязка к адресу mesh-сети, а не к 0.0.0.0, означает, что слушающий сокет существует только в интерфейсе Tailscale. Сканирование портов вашего публичного IP-адреса ничего не обнаружит на порту 9119, так как там никто не слушает, поэтому ваш межсетевой экран больше не является единственной защитой. Подтвердите это снова с помощью ss -lntp | grep 9119.

Адрес привязки также определяет аутентификацию, и это тот момент, который часто упускают. На 127.0.0.1 панель управления не требует входа в систему. На любом другом адресе шлюз аутентификации обязателен, и если провайдер не настроен, сервер откажется запускаться. Проект называет это «безопасным отказом» (failing closed). Запустите его в интерактивном режиме в первый раз, и он предложит создать имя пользователя и пароль прямо на месте. Результат будет записан в ~/.hermes/.env:

HERMES_DASHBOARD_BASIC_AUTH_USERNAME=you
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD_HASH=scrypt$16384$8$1$...
HERMES_DASHBOARD_BASIC_AUTH_SECRET=a-long-random-string

Сгенерируйте этот секрет с помощью openssl rand -hex 32 и больше не трогайте его. Он подписывает сессионные cookie, поэтому изменение этого файла приведет к выходу из системы на всех устройствах. В том же файле хранятся ваши API-ключи для моделей, поэтому ограничьте к нему доступ с помощью chmod 600 ~/.hermes/.env.

Проверьте работу шлюза с другой машины в mesh-сети, прежде чем доверять ему:

curl -s http://100.101.102.103:9119/api/status | jq '.auth_required, .auth_providers'

true, за которым следует ["basic"], означает, что шлюз включен и отвечает провайдер паролей. Документация самого проекта прямо говорит об этом провайдере: он предназначен для доверенной сети или VPN и не подходит для панели управления, доступной из публичного интернета. В mesh-сети ситуация именно такая.

Для использования HTTPS внутри tailnet передайте порт Tailscale:

sudo tailscale serve --bg localhost:9119
sudo tailscale serve status

Tailscale завершает TLS с помощью сертификата, выданного для имени MagicDNS машины, поэтому браузер перестает выдавать предупреждения, а сессионный cookie получает флаг Secure. Сначала включите MagicDNS и HTTPS Certificates на странице DNS в консоли администратора Tailscale и ознакомьтесь с уведомлением: имена ваших машин и имя вашего tailnet DNS публикуются в публичном реестре прозрачности сертификатов, который может прочитать любой желающий.

Реальная цена здесь — это сервер координации. Трафик между вашим телефоном и VPS шифруется сквозным образом и не проходит через Tailscale, но учетная запись, которая решает, какие устройства принадлежат mesh-сети, находится не на вашем оборудовании. Если это важно, запустите плоскость управления самостоятельно с помощью Headscale, self-hosted сервера управления Tailscale и укажите клиентам использовать его с помощью tailscale up --login-server https://headscale.example.com. Если вы предпочитаете отказаться от mesh-сети и настроить узлы вручную, сравнение обычного WireGuard и Tailscale описывает, от чего вам придется отказаться.

Вариант 2: публичная HTTPS-точка и скрытая ловушка

Иногда mesh-сеть недоступна. На рабочий телефон может быть запрещена установка VPN-клиента. В таком случае панель управления выносится за reverse proxy. Оставьте панель на loopback-интерфейсе, а управление сертификатами доверьте Caddy:

hermes.example.com {
  reverse_proxy 127.0.0.1:9119
}

Caddy самостоятельно получает и обновляет сертификаты, а его reverse_proxy автоматически пропускает WebSocket-соединения без дополнительных директив, что необходимо для встроенного терминала панели. В nginx вам придётся самостоятельно добавить заголовки Upgrade и Connection, а руководство выпуск сертификата Let's Encrypt с помощью Certbot в nginx описывает TLS-часть этой задачи. Укажите Hermes его публичное имя, чтобы callback-адреса авторизации указывали на верный хост:

dashboard:
  public_url: "https://hermes.example.com"

Теперь о ловушке. Механизм аутентификации опирается на bind address, а не на адрес, с которого пришёл запрос. Панель, привязанная к 127.0.0.1 за прокси, видит loopback-адрес, решает, что вход не требуется, и предоставляет доступ любому, кого пропустил прокси. Проверьте, что именно вы опубликовали:

curl -s https://hermes.example.com/api/status | jq '.auth_required'

Если эта команда выводит false, любой пользователь в интернете находится на расстоянии одного URL от терминала на вашем сервере. Здесь нет эксплойта, и в логах не будет никаких предупреждений. Существует два способа исправления, и вам следует применить хотя бы один из них. Либо настройте аутентификацию на стороне прокси, используя Authentik как self-hosted провайдер единого входа через forward auth, либо настройте собственный OIDC (OpenID Connect) провайдер панели управления:

HERMES_DASHBOARD_OIDC_ISSUER=https://auth.example.com/application/o/hermes/
HERMES_DASHBOARD_OIDC_CLIENT_ID=hermes-dashboard
HERMES_DASHBOARD_OIDC_SCOPES="openid profile email"

Даже при правильной настройке у этого варианта есть минимальный уровень риска, который нельзя снизить. Публичная страница входа доступна любому для атак, а за ней находится shell вашего VPS. Имя пользователя и пароль — слабая защита, поэтому документация рекомендует использовать OAuth или OIDC для публичных привязок. Ограничьте частоту запросов на вход (rate limit), держите ufw закрытым для всего, кроме портов прокси и SSH, и периодически просматривайте access logs.

Вариант 3: SSH и mosh с мобильного терминала

Самый простой путь: установите терминальное приложение на телефон, загрузите в него SSH-ключ и используйте текстовый интерфейс агента.

ssh you@vps.example.com
tmux new -A -s phone
hermes --tui

tmux new -A -s phone подключается к сессии с именем phone или создает её, если она отсутствует. Благодаря этому агент продолжает работу при разрыве соединения, и вы возвращаетесь в ту же точку при следующем входе. Этот шаблон совпадает с тем, что используется для управления Claude Code с телефона.

Обычный SSH в мобильных сетях неудобен, так как соединение обрывается при смене IP-адреса или переходе телефона в спящий режим. Mosh решает эту проблему. Он работает поверх UDP (user datagram protocol) и синхронизирует состояние терминала, а не поток байтов, поэтому сессия сохраняется при переключении с Wi-Fi на мобильный интернет:

sudo apt install -y mosh
sudo ufw allow 60000:61000/udp

Запустите mosh you@vps.example.com с телефона. Mosh запускает mosh-server поверх существующего SSH-соединения, а затем переносит сессию на UDP в диапазоне портов от 60000 до 61000. Именно поэтому данный диапазон должен быть открыт.

Цена безопасности — стандартная. SSH-сессия — это командная оболочка, а оболочка дает доступ ко всему, что может делать учетная запись. Запросы на подтверждение от агента становятся последним рубежом между украденным разблокированным телефоном и вашими файлами. Используйте для этого отдельную учетную запись без прав root, только с аутентификацией по ключу, и выполните укрепление SSH на VPS, прежде чем размещать ключ на устройстве, которое вы носите с собой.

Что перестает работать в мобильной сети

Есть четыре причины, и ни одну из них нельзя устранить настройками.

Панель управления разлогинивает вас, пока вы не смотрите. Токены доступа имеют TTL (время жизни) 15 минут, а текущий API-контракт не предусматривает токенов обновления. Когда срок действия токена истекает, страница получает ответ 401 и перенаправляет вас на /login. Откройте панель, уберите телефон в карман на двадцать минут, и вы вернетесь к экрану входа, потеряв все, что вводили. Ничего не сломалось. Просто войдите снова.

Встроенный терминал не переживает переход вкладки в фоновый режим. Сервер запускает TUI (текстовый пользовательский интерфейс) через PTY и корректно завершает его при закрытии вкладки, а повторное открытие создает новый процесс. Мобильные браузеры выгружают фоновые вкладки для освобождения памяти, поэтому переключение на другое приложение на длительное время завершает работу терминала. История чата сохраняется, так как сессии хранятся на сервере, и hermes sessions list по-прежнему их отображает. К самому терминалу нельзя подключиться повторно. Если вам нужна сессия, которая не прерывается, используйте tmux поверх SSH.

Неактивные соединения тихо разрываются. Мобильные операторы сбрасывают неактивные TCP-соединения для очистки записей в таблице NAT (трансляция сетевых адресов), а телефон почти полностью прекращает работу с сетью, когда экран выключен. WebSocket, который некоторое время молчал, обычно уже мертв к моменту разблокировки экрана, и страница восстанавливает соединение только после того, как вы к ней обратитесь. Именно поэтому mosh на телефоне кажется удобнее, чем SSH: у него нет соединения, которое можно потерять.

Ничто не отправляет push-уведомления. Ни панель управления, ни SSH-сессия не могут «разбудить» ваш телефон. На устройстве нет приложения Hermes, поэтому нет пути к службе push-уведомлений платформы. Длительное выполнение агента завершается, и вы узнаете об этом только тогда, когда снова посмотрите на экран.

Уведомления приходят через шлюз обмена сообщениями

Решением последней проблемы является шлюз, который предлагает совершенно иной способ связи с агентом. hermes gateway подключает агента к платформам обмена сообщениями, включая Telegram, Discord, Slack, WhatsApp, Signal и электронную почту. Вы общаетесь с агентом внутри приложения, у которого уже есть канал push-уведомлений на вашем телефоне, которое уже обрабатывает доставку в фоновом режиме и справляется с разрывами сетевого соединения.

hermes gateway setup
hermes gateway install
hermes gateway status

hermes gateway install регистрирует шлюз как службу systemd, чтобы он возобновлял работу после перезагрузки. Установщик Hermes не создает для вас никаких юнитов служб, поэтому hermes dashboard не запустится самостоятельно после перезапуска. Напишите юнит для тех компонентов, от которых вы зависите; в написании служб и таймеров systemd на VPS описано создание самого файла.

Запланированное задание может отправлять результат таким же образом, без необходимости ведения диалога:

hermes send -t telegram -s "Backup report" -f /home/you/report.txt

Авторизация здесь работает по принципу «запрещено по умолчанию». Если список разрешенных пользователей (allowlist) не задан, а GATEWAY_ALLOW_ALL_USERS не настроен, доступ будет отказан всем пользователям, что является правильной отправной точкой. Укажите учетные записи, которые вы хотите разрешить, в ~/.hermes/.env:

TELEGRAM_ALLOWED_USERS=123456789
GATEWAY_ALLOWED_USERS=123456789

Или включите сопряжение на основе кодов вместо вставки числовых ID, установив unauthorized_dm_behavior: pair в ~/.hermes/config.yaml. Неизвестная учетная запись, отправившая сообщение агенту, получит восьмизначный код, и до момента вашего подтверждения никаких действий происходить не будет:

hermes pairing list
hermes pairing approve telegram ABC12DEF
hermes pairing revoke telegram 123456789

Коды истекают через час, пользователь может запрашивать новый код каждые десять минут, а пять неудачных попыток блокируют эту учетную запись.

Ограничение радиуса поражения при краже телефона

Телефон, имеющий доступ к вашему агенту, может выполнять команды на сервере, а телефоны часто теряются. Заранее определите, что именно сможет сделать человек, в чьих руках окажется устройство.

Оставьте включенным подтверждение действий. approvals.mode по умолчанию использует smart, что задействует вспомогательную модель для оценки рисков и автоматически одобряет только команды с низким уровнем угрозы. Установка значения off равносильна выполнению всех команд с флагом --yolo, а HERMES_YOLO_MODE=1 делает это через переменные окружения. Не носите с собой телефон, который взаимодействует с агентом в таком состоянии. Установите approvals.cron_mode: deny, чтобы запланированные задачи не могли одобрять себя самостоятельно, пока вы спите.

approvals:
  mode: smart
  cron_mode: deny

Ограничьте область, в которой агент может нанести ущерб. terminal.backend: docker запускает команды внутри контейнера, который отключает все Linux capabilities, кроме минимального списка, устанавливает no-new-privileges и ограничивает количество процессов. Таким образом, границей доступа становится контейнер, а не командная строка. terminal.cwd фиксирует рабочую директорию. HERMES_WRITE_SAFE_ROOT ограничивает write_file и patch указанными вами директориями; попытка записи за их пределами блокируется без возможности подтверждения.

export HERMES_WRITE_SAFE_ROOT=/home/you/projects:/home/you/.hermes

Hermes уже блокирует запись в ~/.ssh, ~/.aws, ~/.kube и /etc/sudoers, запрещает запись файлов .env в любом месте на диске и отклоняет жестко заданный список деструктивных команд вне зависимости от ваших настроек подтверждения. Считайте это базовым уровнем защиты, а не полноценным планом безопасности. Запускайте агента от имени обычного пользователя, никогда не используйте root. Это же правило применимо к любому кодовому агенту, работающему без присмотра, а в статье безопасный запуск Claude Code на VPS этот вопрос разобран подробнее.

Заранее запишите шаги по отзыву доступа, чтобы они были под рукой в нужный момент. Удаление устройства в консоли администратора Tailscale мгновенно прекращает доступ к mesh-сети. Изменение HERMES_DASHBOARD_BASIC_AUTH_SECRET и перезапуск сервиса аннулируют все сессии на всех устройствах, так как это значение используется для подписи cookie сессии. Удаление публичного ключа телефона из ~/.ssh/authorized_keys прекращает доступ по SSH. hermes pairing revoke telegram <user-id> удаляет аккаунт для обмена сообщениями. Если на устройстве хранились данные, позволяющие прочитать ключи вашего провайдера, аннулируйте их с помощью hermes auth logout <provider> и выпустите новые у провайдера.

Проверяйте результат, а не полагайтесь на предположения. Это команды для запуска на вашем собственном сервере, и их вывод зависит от вашей конфигурации:

tailscale status
hermes pairing list
hermes logs gateway -n 100
hermes status --deep

Логи находятся в ~/.hermes/logs/. Читайте их после инцидентов, а также периодически в штатном режиме.

FAQ

Существует ли официальное мобильное приложение Hermes для iOS или Android?

Нет. Репозиторий Hermes включает интерфейс командной строки, веб-панель управления и десктопный клиент Electron для macOS, Windows и Linux. Официальных сборок для iOS или Android не существует. С телефона можно использовать веб-панель в браузере, SSH-клиент или платформу обмена сообщениями, подключенную через hermes gateway. Сторонние мобильные клиенты существуют, но это сторонний код, которому вы доверяете учетные данные своего агента, поэтому изучите исходный код перед установкой.

Почему веб-панель Hermes разлогинивает меня на телефоне?

Токены доступа имеют TTL 15 минут, а текущий API-контракт не предусматривает использование refresh-токенов. Когда срок действия токена истекает, страница получает ошибку 401 и перенаправляет пользователя на /login. При работе с браузером на телефоне это становится заметно, так как двадцати минут в другом приложении достаточно для истечения сессии. Установите HERMES_DASHBOARD_BASIC_AUTH_SECRET в стабильное случайное значение, чтобы ключ подписи сессии оставался неизменным после перезагрузок; это устранит вторую причину принудительного выхода из системы.

Можно ли безопасно выставлять веб-панель Hermes в публичный интернет?

Только при условии, что вы самостоятельно настроили аутентификацию. Механизм авторизации активируется в зависимости от адреса привязки (bind address), поэтому панель, привязанная к 127.0.0.1 за обратным прокси-сервером, не будет запрашивать логин из интернета. Запустите curl -s https://your-host/api/status | jq '.auth_required' и изучите вывод. Используйте OAuth или OIDC вместо имени пользователя и пароля, так как в документации проекта указано, что встроенный провайдер паролей предназначен только для доверенных сетей и VPN. Использование частной mesh-сети полностью снимает этот вопрос, поэтому такой вариант является предпочтительным по умолчанию.

Нужен ли мне аккаунт Tailscale или я могу самостоятельно разместить control plane?

Вы можете разместить его самостоятельно. Headscale — это открытая реализация сервера координации Tailscale, к которой официальные клиенты Tailscale подключаются с помощью tailscale up --login-server https://headscale.example.com. В этом случае вы самостоятельно управляете списком устройств, допущенных в сеть. Минусом является необходимость обслуживания и резервного копирования этого сервера: пока он недоступен, вы не сможете зарегистрировать или повторно аутентифицировать устройство.

Как получать уведомления на телефон, когда агент завершает задачу?

Используйте шлюз обмена сообщениями. Веб-панель и SSH не могут «разбудить» телефон, так как на устройстве нет приложения Hermes для получения push-уведомлений. Подключите агента к Telegram, Signal, Discord или другой поддерживаемой платформе через hermes gateway setup, и тогда уведомления будут приходить через приложение соответствующей платформы. Также можно использовать cron-задачу для отправки сообщения через hermes send -t telegram -s "Job done" -f /path/to/report.txt, что позволит получить уведомление без обращения к модели.

#hermes#mobile#remote-access#tailscale#ai-agents