Hermes Agent уже выполняет команды оболочки на удалённой машине. Его SSH-бэкенд терминала нацелен на один хост и запускает каждую команду через ssh. Для единственного сервера это нормально. Но как только их становится больше одного — или вы не хотите, чтобы приватный ключ лежал на машине, где работает агент, — этот бэкенд становится не тем инструментом. Чище — подключить Hermes к удалённому MCP-серверу, который дотягивается до серверов за него: без ключа на машине с агентом, много хостов, правила для каждого подключения и журнал аудита. Этот пост про оба: как SSH-бэкенд работает сегодня и как вместо него подключить Termalin в качестве MCP-сервера.
Оговорюсь: мы делаем Termalin. Детали о Hermes Agent ниже — из его публичной документации и трекера задач, проверенных 15 октября 2026 года.
Как Hermes Agent использует SSH сегодня
Hermes Agent выполняет свои инструменты через терминальный бэкенд. Один из таких бэкендов — SSH. Вы задаёте его в ~/.hermes/config.yaml:
terminal:
backend: ssh
Учётные данные идут в ~/.hermes/.env:
TERMINAL_SSH_HOST=my-server.example.com
TERMINAL_SSH_USER=ubuntu
TERMINAL_SSH_PORT по умолчанию 22, а TERMINAL_SSH_KEY — это путь к приватному ключу (если оставить пустым, берётся системный по умолчанию). Документация описывает механизм прямо: он «выполняет команды на удалённом сервере по SSH», переиспользует соединение через ControlMaster с 5-минутным keepalive по простою, и каждая команда — это свежий ssh … bash -c.
Из этой схемы следуют три факта, и именно они — причина, по которой люди ищут что-то другое:
- Один бэкенд — это один хост.
TERMINAL_SSH_HOSTиTERMINAL_SSH_USERоба обязательны, а у бэкенда нет инвентаря на много хостов. Чтобы поработать со вторым сервером, вы перенастраиваете. - Приватный ключ живёт на машине Hermes — либо как файл, либо через системный
ssh-agent. Всё, что может прочитать эту машину, может воспользоваться ключом, а ключ открывает каждый хост, который ему доверяет. - Hermes копирует собственные учётные данные на удалённую машину. В документации отмечено, что для бэкендов SSH, Modal и Daytona Hermes заливает ваше состояние
~/.hermes/— файлы учётных данных, навыки, кэш — в удалённую песочницу на время сессии и синхронизирует изменённые файлы состояния обратно при завершении.
У документации есть и справедливый довод в пользу SSH-бэкенда: поскольку агент работает на другой машине, он «не может изменить собственный код». Эта изоляция реальна, и мы вернёмся к ней ниже.
Проблемы, с которыми сталкиваются
В трекере hermes-agent есть узнаваемая группа открытых задач вокруг этих SSH-путей. Приводим по номерам, не преувеличивая, что каждая из них значит для вас:
- SSH-бэкенд падает с «path too long for Unix domain socket» при использовании именованных профилей (#133436).
/reloadне очищает закэшированные SSH-окружения после смены конфигурации (#71085).- У десктопного режима SSH свой набор: проба на macOS, которая падает примерно через секунду (#80836), и зависания и таймауты OpenSSH на Windows (#118983, #138378, #127320).
- Шторм повторных попыток при старте — около 25 входов по SSH в минуту (#134197).
hermes updateпадает в сетях, которые блокируют порт 22 (#133439).
Часть из них — про десктоп-приложение, а не про бэкенд, и часть, возможно, уже исправлена к тому моменту, как вы это читаете. Важна закономерность: SSH-бэкенд — это тонкая обёртка над одним ssh-соединением, так что он наследует все острые углы этого соединения — включая необходимость того, чтобы порт 22 был достижим.
Вариант без ключа: Termalin как удалённый MCP-сервер
Hermes Agent поддерживает MCP. Он умеет общаться с stdio-серверами и с удалёнными HTTP-серверами — либо через заголовок Bearer, либо через OAuth. Вот и зацепка. Вместо того чтобы давать агенту ключ и один хост, вы направляете его на удалённый MCP-сервер, который уже умеет дотягиваться до вашего парка.
Termalin — это SSH-клиент с облачным MCP-сервером. На каждом сервере, который должен быть достижим, работает Connector — установка в одну строку, которая звонит наружу и никогда не слушает порт, так что он работает за NAT и CGNAT, и порт 22 открывать не нужно. При подключении sshd сервера доверяет удостоверяющему центру SSH (CA) Termalin. Каждый вход затем использует краткосрочный сертификат, ограниченный вашим аккаунтом. На машине не лежит долгоживущий ключ, и ни один не передаётся агенту.
MCP-серверы идут под корневым ключом mcp_servers в ~/.hermes/config.yaml. Аутентифицироваться можно двумя способами. На VPS — обычном месте, где работает Hermes, — API-ключ проще, так что начните с него.
Вариант A — API-ключ (лучше всего на VPS)
Создайте API-ключ в веб-кабинете Termalin, ограничьте его область серверами, которых этот агент должен касаться, поставьте только чтение или список разрешённых и задайте срок действия. Положите его в ~/.hermes/.env:
TERMALIN_API_KEY=tk_live_your_key_here
Затем добавьте сервер. Hermes разрешает ссылки ${VAR} в момент подключения к серверу, в том числе внутри headers:
# ~/.hermes/config.yaml
mcp_servers:
termalin:
url: "https://termal.in/api/v1/mcp"
headers:
Authorization: "Bearer ${TERMALIN_API_KEY}"
Проверьте соединение, затем перезагрузите MCP внутри сессии:
hermes mcp test termalin
/reload-mcp
Streamable HTTP — транспорт по умолчанию для серверов с url, и именно на нём говорит termal.in, так что строка transport: вам не нужна.
Вариант B — вход через OAuth (для ноутбука)
Если Hermes работает на вашей собственной машине с браузером, OAuth позволяет не хранить ключ:
# ~/.hermes/config.yaml
mcp_servers:
termalin:
url: "https://termal.in/mcp"
auth: oauth
hermes mcp login termalin
При первом подключении Hermes печатает URL авторизации, открывает браузер, когда может, и ждёт колбэк OAuth на локальном loopback-порту. Вход в Termalin принимает такой loopback-редирект (http://127.0.0.1:<port>/callback), так что auth: oauth работает с нашей стороны.
На headless-VPS loopback-колбэк не может достучаться до вашего ноутбука. С Termalin работают два обхода: вставить redirect-URL обратно в приглашение Hermes или пробросить порт через ssh -N -L <port>:127.0.0.1:<port> user@host и завершить вход в браузере ноутбука. У Hermes есть ещё device-code-флоу, но вход в Termalin его не предлагает — на сервере API-ключ из Варианта A — путь попроще.
Что вы получаете после подключения
После hermes mcp test termalin (или hermes mcp login termalin) и /reload-mcp инструменты Termalin появляются у агента: hosts_list — посмотреть, до каких серверов он может дотянуться, ssh_exec и ssh_exec_many — выполнять команды на одном или многих, sftp_list / sftp_read / sftp_write — для файлов, server_metrics и alerts_list — для здоровья, и job_start / job_status / job_stop / job_list — для работы, которая переживает один вызов.
Практические отличия от SSH-бэкенда:
- Много серверов разом.
ssh_exec_manyзапускает одну и ту же команду по набору хостов. Нет ограничения в один хост и не нужно перенастраивать, чтобы переключить машину. - Правила для каждого подключения. В карточке «AI-приложения» вы задаёте для этого подключения политику команд: полный доступ, список разрешённых или только чтение. Начните с только чтения, расширьте позже.
- Журнал аудита. Каждая команда агента помечена как его, записана и показана в живой сетке наблюдения. «Это сделал агент» — это фильтр, а не реконструкция. См. аудит того, что агент делает на серверах (на английском).
- Фоновые задачи. Долгая миграция или сборка идёт как фоновая задача, так что медленная работа не блокирует сессию и не упирается в фиксированный таймаут.
- Без открытого порта. Connector звонит наружу, что заодно обходит класс проблем «порт 22 заблокирован».
Отзыв доступа — это один переключатель, а не ротация ключа по каждому хосту. О логике этого размена — в почему не стоит отдавать агенту свой SSH-ключ и радиусе поражения (оба — на английском).
Когда оставить SSH-бэкенд
Это не тот случай, когда один вариант выигрывает по всем пунктам.
- Если у вас ровно одна машина, ключ на машине Hermes уже лежит и ничего лишнего в цепочке не нужно — SSH-бэкенд требует меньше всего настройки.
- Довод документации про изоляцию верен: работа на отдельном хосте означает, что агент не может править собственный код. Путь через MCP сохраняет это свойство тоже, ведь команды выполняются на ваших серверах, а не на машине с агентом, — но если SSH-бэкенд уже даёт вам это и больше ничего не нужно, переходить незачем.
- Инструменты MCP и мониторинга Termalin требуют тарифа Pro ($10/мес, или $8/мес при оплате за год — $96/год) или 14-дневного пробного периода, и Connector на каждом сервере. Одинокий ключ и SSH-бэкенд не стоят ничего.
Берите Termalin, когда у вас несколько серверов, когда вы не хотите ключ на машине с агентом, когда серверы сидят за NAT или когда вам нужны правила для каждого подключения и журнал аудита. Оставьте SSH-бэкенд, когда один ключ на одном хосте — действительно всё, что вам нужно.
Устранение неполадок
- Инструменты не появляются. Запустите
hermes mcp test termalin, убедитесь, чтоurlверный и чтоTERMALIN_API_KEYзадан в~/.hermes/.env. Затем/reload-mcpвнутри сессии. 401от эндпоинта. API-ключ отсутствует, неверен или истёк. Создайте новый в кабинете и обновите~/.hermes/.env.- Ссылка
${TERMALIN_API_KEY}отправляется буквально. Hermes раскрывает${VAR}в момент подключения; убедитесь, что переменная есть в~/.hermes/.env(или в оболочке, которая запустила Hermes), и переподключитесь. - OAuth на headless-VPS не завершается. Loopback-колбэк не может достучаться до ноутбука. Пробросьте порт через
ssh -N -L <port>:127.0.0.1:<port> user@hostили вставьте redirect-URL обратно в приглашение. На сервере путь с API-ключом проще. - Неверный транспорт. Серверы с
urlпо умолчанию используют Streamable HTTP, на котором работаетtermal.in. Задавайтеtransport: sseтолько для серверов, которые говорят исключительно на SSE, — это не наш случай.
Вопросы и ответы
Поддерживает ли Hermes Agent MCP? Да. Он подключается к stdio-серверам и к удалённым HTTP-серверам — через заголовок Bearer или OAuth, — настраивается под ключом mcp_servers в ~/.hermes/config.yaml.
Можно ли использовать это с Hermes Agent на VPS? Да, и путь с API-ключом там проще всего. Для OAuth-флоу нужен браузер или один из обходов для headless выше.
Нужно ли открывать порт на моих серверах? Нет. Connector звонит наружу, так что он работает за NAT и CGNAT без единого входящего порта. См. SSH за NAT (на английском).
Передаётся ли мой SSH-ключ агенту? Нет. До серверов добираются краткосрочными сертификатами, выпускаемыми на каждый вход. Долгоживущий ключ не покидает Termalin, и ни один не попадает в окружение агента.
Termalin — кроссплатформенный SSH-клиент с облачным MCP-сервером, хранителем ключей и политикой агента для каждого хоста. Работаете с другим агентом? Та же настройка без ключа подходит для OpenClaw, Codex (на английском) и других — или скачайте приложение, чтобы начать.