Перейти к содержимому
17.3k

Удалённая связь

Связь между машинами соединяет компьютер OpenCodex Home с компьютером Child по SSH. Home обслуживает Child через SSH-туннель, а оба компьютера сохраняют локальную службу OpenCodex на порту 10100. Панель передаёт ключ связи для Child через SSH, поэтому вводить токен вручную не нужно.

  • Home может войти на Child по ключу OpenSSH.
  • Для связи, инициированной со стороны Child, Child должен входить на Home по ключу OpenSSH (вход по паролю не поддерживается).
  • На Child установлен OpenCodex 2.66.0 или новее (для связи со стороны Child — и на Home).
  • Оба компьютера работают под macOS или Linux.
  • Панель для добавления Child со стороны Home открыта на Home или через сопряжённую сессию Hub. Чтобы превратить текущий компьютер в Child, нужна сессия панели, сопряжённая оператором; локальная сессия без учётных данных не может подтвердить это изменение маршрутизации.

SSH с паролем и Windows сейчас не поддерживаются. Связь можно начать с любой стороны: с Home, как описано ниже, или с Child, как описано в разделе «Подключение этого компьютера как Child».

  1. Откройте #remote в панели и включите Remote Link.
  2. Выберите Home, затем Continue. Откроется список SSH-хостов.
  3. Выберите хост среди кандидатов SSH или введите псевдоним из конфигурации SSH.
  4. Запустите проверку соединения и сравните показанный отпечаток хоста с отпечатком нужного компьютера. Сравнение помогает обнаружить неправильный компьютер или изменённый ключ хоста до того, как SSH начнёт ему доверять.
  5. Подтвердите отпечаток и подключите Child.

Панель не просит вводить токен. Сначала выполняется проверка хоста, и применить связь можно только после явного подтверждения отпечатка.

Окно добавления Child поясняет, что Child использует провайдеры этого Home через SSH, и показывает требования выше. Псевдонимы берутся из ~/.ssh/config на Home, где работает OpenCodex, а не обязательно на компьютере с браузером. Если поиск успешен, но хостов нет, добавьте запись Host, как ниже, и повторите поиск. Существующий псевдоним можно ввести вручную; выбор или ввод включает проверку соединения. В окне есть ссылка на это руководство.

Host devbox
HostName devbox.example.com
User you
IdentityFile ~/.ssh/id_ed25519

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

На компьютере, который должен использовать провайдеров Home:

  1. Откройте панель на #remote и включите Remote Link.
  2. Выберите Child. Откроется список SSH-хостов.
  3. Выберите SSH-хост Home, запустите проверку подключения, затем сравните и подтвердите отпечаток хоста.
  4. Прочитайте предупреждение и выберите Connect as Child.

При подключении OpenCodex на этом компьютере перезапустится. Уже идущие запросы Codex сначала завершатся, а новые запросы могут не проходить до минуты, пока идёт перезапуск. Затем панель перезагрузится сама и покажет связь Child. Codex продолжит использовать http://127.0.0.1:<port>/v1 на этом компьютере без токена и без переменных окружения: локальный OpenCodex передаёт каждый запрос на Home, а Home обслуживает его своими провайдерами и учётными записями.

Если Child просит сначала выполнить сопряжение этого компьютера, откройте на нём HTTP-панель по настроенному IP-адресу обратной петли, например http://127.0.0.1:<configured-port>. Локальная форма сопряжения появляется только при отсутствии сопряжения, когда панель и API используют один и тот же origin обратной петли. Скопируйте из формы команду ocx gui pair --origin "http://127.0.0.1:<configured-port>", выполните её в терминале на этом компьютере и вставьте одноразовый код в форму. Используйте точно тот origin, который показан в форме; API-ключ провайдера или токен администратора не является кодом сопряжения. Отсутствие сопряжения и несовпадение настроенного порта — разные причины.

Роль Child также требует, чтобы OpenCodex работал в автономном режиме на настроенном порту, потому что Child перезапускается именно на нём. Если панель сообщает, что OpenCodex работает не на настроенном порту, сначала перезапустите его на этом порту.

  • Connected означает, что SSH-туннель готов и Child может использовать связь Home.
  • Reconnecting означает, что туннель переподключается. Во время повторных попыток запросы могут временно получать 503 с Retry-After. На Child, подключённом из собственной панели, запрос сначала до 15 секунд ждёт восстановления туннеля.
  • Failed означает, что связь требует действий. Проверьте SSH-аутентификацию, подтверждённый ключ хоста, перенаправление или причину тайм-аута. Сторона, которая держит SSH-туннель, сама повторяет попытки после сна, сбоя или перезапуска (Home — для добавленного им Child, Child — для связи, к которой он подключился из собственной панели): примерно раз в минуту после тайм-аута или ошибки перенаправления и каждые пять минут после ошибки аутентификации. Изменённый ключ хоста никогда не повторяется. Чтобы переподключиться сразу, нажмите Retry в панели Home или выполните ocx link reconnect --link-id <id> на Home. Туннель этой связи перезапустится без перезапуска OpenCodex.

При сбое связи система молча не переключается на локального провайдера.

Выберите Disconnect для Child и подтвердите псевдоним. Home остановит туннель, отзовёт ключ связи этого Child и удалит сохранённую запись.

Если Home не может подключиться к Child для выполнения команды отключения, выберите Remove here only. Это удаляет локальные туннель, ключ и запись. Затем войдите на Child и выполните:

Terminal window
ocx disconnect

Чтобы отключить связь, инициированную со стороны Child, выполните ocx disconnect на Child. Команда отключает клиентский туннель и по SSH отзывает связь на Home. Если отзыв на Home не удался, команда выводит: Home revoke failed; run ocx link revoke --link-id <linkId> on the home.

Child использует через связь провайдеров и учётные данные провайдеров компьютера Home. Home создаёт отдельный ключ связи для каждого Child; удаление связи отзывает этот ключ. Сравнивайте отпечаток хоста перед подтверждением, чтобы случайно не принять другой компьютер или изменённый ключ. Сессии панели, выданные удостоверением Tailscale, не могут управлять связями машин. На Child ключ остаётся внутри OpenCodex: учётные данные, которые Codex или Claude Code отправляют на Child, не передаются на Home, а любая программа на Child, которая обращается к 127.0.0.1:<port>, использует Home без ключа; это то же локальное доверие, что и у автономной установки. Веб-страницы с других сайтов отклоняются.

ocx link probe <alias> [--json]
ocx link add <alias> [--expect-fingerprint SHA256:…] [--json]
ocx link port [--json]
ocx link issue --alias <alias> --tunnel-port <port> [--json]
ocx link status [--json]
ocx link revoke --link-id <id> [--json]
ocx link reconnect --link-id <id> [--json]

Без интерактивного терминала (TTY) параметр --expect-fingerprint обязателен. В интерактивном терминале его можно опустить, если явно подтвердить предложенный отпечаток.

ocx link probe <alias> --json · ocx link add <alias> --expect-fingerprint SHA256:… --json — CLI, restart, relay verification and recovery.