AI Development

Развёртывание Claude Code на удалённом Mac по SSH

Развёртывание Claude Code на удалённом Mac по SSH

Победитель — отдельный удалённый Mac с SSH-доступом, если проект требует Xcode, Simulator, Keychain или другого инструментария macOS. Для обычного кроссплатформенного кода такой узел не нужен: дополнительные расходы не дадут сопоставимой пользы. Развёртывание Claude Code на удалённом Mac следует начинать с отдельной учётной записи и ключевой авторизации, а не с запуска агента. Затем необходимо настроить проектные права, песочницу, границы credentials и восстановление после разрыва SSH.

Последняя проверка материала выполнена 17 августа 2026 года. Команды и названия параметров следует повторно сверить с официальной документацией Claude Code и Apple перед публикацией: эти страницы могут обновляться независимо от версии macOS.

Статья предназначена для разработчиков Windows и Linux, которым нужна настоящая macOS-среда, мобильных разработчиков, желающих изолировать AI-задачи от основного Mac, и платформенных инженеров, создающих воспроизводимый удалённый узел.

Решение о необходимости macOS

Перед арендой или подготовкой узла составьте список зависимостей проекта. В нём должны присутствовать конкретные команды и системные компоненты:

  • xcodebuild;
  • iOS Simulator;
  • подписание приложения через Keychain;
  • macOS-версия инструмента, отсутствующая в Linux или Windows;
  • сборка на Apple Silicon;
  • длительные задания, которые не должны зависеть от рабочего ноутбука.

Если проект использует только Git, Node.js, Python, Go, HTTP-тесты и контейнеры, отдельный Mac может быть лишним. Claude Code в таком случае можно запускать на уже доступной системе.

Удалённый узел оправдан, когда хотя бы одна команда из CI или локального процесса не имеет полноценной замены вне macOS. Xcode и Simulator — типичный пример. Linux-сервер может выполнять подготовительные задачи, но не становится эквивалентом macOS-узла для всей цепочки iOS-разработки.

Скрытые ограничения также нужно оценить заранее:

  • SSH даёт терминальный доступ, но не гарантирует готовую графическую сессию;
  • Keychain зависит от учётной записи и контекста запуска;
  • PATH интерактивного shell может отличаться от PATH в скрипте;
  • оборванная SSH-сессия может остановить процесс без tmux или аналогичного менеджера;
  • доступ пользователя к Mac не равен праву Claude Code выполнять любые команды.

Рабочее правило простое: если проектный dependency list содержит Xcode, Simulator или Keychain, удалённый Mac имеет техническое основание. Если таких зависимостей нет, сначала сравните стоимость и сложность с текущей системой.

Подготовка отдельного узла

До установки Claude Code подготовьте четыре независимых слоя:

  1. отдельную учётную запись macOS;
  2. Remote Login только для этой учётной записи;
  3. рабочий каталог с резервной копией;
  4. отдельный способ авторизации для интерактивной работы и автоматизации.

Apple описывает включение Remote Login в настройках общего доступа и позволяет ограничить вход списком выбранных пользователей. Полный доступ удалённых пользователей к диску не следует включать без отдельного обоснования. Официальная инструкция Apple по Remote Login содержит актуальный путь к настройкам и ограничения этой функции.

В примерах используются вымышленные имя узла, пользователь и репозиторий:

ssh -i ~/.ssh/claude_mac_ed25519 devrunner@mac-node.example

Псевдоним для ~/.ssh/config:

Host claude-macos-lab
    HostName mac-node.example
    User devrunner
    IdentityFile ~/.ssh/claude_mac_ed25519
    IdentitiesOnly yes
    ServerAliveInterval 30
    ServerAliveCountMax 3

mac-node.example не является реальным адресом. В рабочей конфигурации его заменяют на адрес выделенного Mac.

Перед первым входом проверьте отпечаток узла через доверенный канал. Сообщение о неожиданном изменении host key нельзя игнорировать: причиной может быть переустановка системы, смена оборудования или попытка подмены узла.

SSH-цепочка

Один успешный вход недостаточен. Канал должен выдерживать повторное подключение, передачу файлов и проверку shell-окружения.

ssh claude-macos-lab 'whoami; hostname; pwd; echo "$SHELL"'

Проверяемые результаты:

  • пользователь совпадает с выделенной учётной записью;
  • имя узла соответствует назначенному Mac;
  • рабочий каталог не указывает на случайную системную директорию;
  • shell не завершается ошибкой при загрузке профиля.

Передача тестового файла:

printf 'ssh-check\n' > /tmp/ssh-check.txt
scp -F ~/.ssh/config /tmp/ssh-check.txt claude-macos-lab:/tmp/
ssh claude-macos-lab 'cat /tmp/ssh-check.txt'

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

Проверка Норма Действие при ошибке
Вход по псевдониму Открывается shell выделенного пользователя Проверить User, ключ и Remote Login
Отпечаток узла Совпадает с доверенным значением Остановить подключение до подтверждения
scp Файл передаётся в тестовый каталог Проверить права и сетевой маршрут
Повторный вход Авторизация проходит снова Проверить SSH-agent и конфигурацию
Shell Нет ошибок профиля Исправить .zprofile и PATH

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

Установка Claude Code

Официальная документация Claude Code указывает для текущего способа установки macOS 10.15 или новее, Node.js 18 или новее и минимум 4 ГБ оперативной памяти. Эти требования относятся к программной совместимости, а не к гарантированной скорости сборки или анализа проекта. Официальная инструкция по установке Claude Code содержит актуальные команды и варианты диагностики.

Проверка окружения:

node --version
npm --version

Установка через npm:

npm install -g @anthropic-ai/claude-code

Затем выполните:

claude doctor
claude --version

claude doctor важнее простого наличия бинарного файла. Диагностика помогает обнаружить проблемы с установкой и окружением. Не используйте sudo npm install -g без необходимости: смешение владельцев файлов часто осложняет обновления и удаление пакета.

Если глобальная установка сталкивается с ошибкой доступа, сначала исправьте npm-префикс для текущего пользователя или выберите официальный альтернативный способ установки. После изменения PATH откройте новую SSH-сессию и повторите диагностику.

Авторизация и credentials

Авторизацию необходимо разделить на ручную и автоматическую.

При интерактивной работе Claude Code может использовать браузерный поток входа. В SSH-сессии браузерный callback не всегда возвращается в удалённый терминал. Тогда браузер открывают на локальном компьютере, а процедуру завершают способом, предусмотренным текущей версией CLI. Токен нельзя вставлять в команду, сохранять в историю shell или отправлять в чат вместе со снимком экрана.

macOS Keychain может хранить credentials для конкретной учётной записи. Это не означает, что credentials доступны каждому пользователю, каждому shell или каждому CI-процессу. Авторизацию нужно проверять именно под тем пользователем, который запускает Claude Code.

Автоматизация не должна зависеть от личного браузерного входа. Для CI применяйте отдельную сервисную схему, переменную окружения или официальный корпоративный механизм хранения секретов. Токены и ключи не должны попадать в:

  • репозиторий;
  • каталог .git;
  • историю команд;
  • логи сборки;
  • CLAUDE.md;
  • shell-профили с общим доступом;
  • скриншоты и записи терминала.

Если узел работает через корпоративный прокси, сначала проверьте список разрешённых адресов и переменные HTTP_PROXY и HTTPS_PROXY. Официальные сведения о прокси-конфигурации Claude Code описывают сетевые параметры, которые нужно сверять с актуальной версией инструмента.

SSH-ключ, пользовательская авторизация Claude Code и API-credential — разные секреты. Отзыв одного из них не закрывает автоматически остальные каналы доступа.

Проектная среда

Создайте отдельный рабочий каталог и получите код внутрь него:

mkdir -p ~/work/ios-agent-demo
cd ~/work/ios-agent-demo
git clone git@example.invalid:mobile/sample-app.git .
git config user.name "Remote Developer"
git config user.email "developer@example.invalid"

Адрес репозитория вымышлен. В рабочем проекте применяйте корпоративный Git-сервер и не смешивайте ключ Git с ключом входа на Mac.

Проверьте инструменты в том же shell, из которого будет запускаться Claude Code:

command -v git
command -v node
command -v xcodebuild
xcode-select -p
xcodebuild -version

Особое внимание уделите PATH. Команда может находиться в интерактивном .zshrc, но отсутствовать в неинтерактивном вызове, скрипте или tmux. Критические пути лучше задавать явно.

В корне проекта создайте CLAUDE.md:

# Рабочие правила

- Изменять только каталог приложения и тесты.
- Перед изменением проверять состояние Git.
- Для проверки использовать ./scripts/test.sh.
- Не читать и не изменять файлы с секретами.
- Не выполнять публикацию и подписание без подтверждения.
- После изменения показывать diff и результат тестов.

Файл должен описывать операционные границы. Общие советы вроде «пишите качественный код» не заменяют список разрешённых каталогов и команд.

Проверочный сценарий должен быть небольшим и обратимым:

  1. Claude Code читает структуру проекта.
  2. Находит заранее выбранный файл.
  3. Вносит малое изменение.
  4. Запускает тест.
  5. Показывает diff.
  6. Изменение откатывается через Git.

Такой сценарий выявляет проблемы доступа и PATH быстрее, чем крупная задача, где трудно отделить ошибку агента от ошибки Xcode.

Права и песочница

Claude Code использует правила allow, ask и deny. Разрешения следует назначать по принципу минимально необходимого доступа:

  • allow — чтение проекта и просмотр Git diff;
  • ask — изменение исходников, установка зависимостей и запуск сборки;
  • deny — секреты, ключи подписи, production-конфигурации и команды публикации.

Официальное руководство по правам Claude Code описывает уровни настроек и порядок применения правил. Запреты должны защищать данные даже в том случае, если более широкое разрешение было задано выше по уровню конфигурации.

Не начинайте с --dangerously-skip-permissions. Такой флаг может быть оправдан только в отдельно изолированной среде с понятными последствиями. Для обычного рабочего узла он скрывает ошибки настройки вместо того, чтобы решить их.

Сценарий Политика Приёмочный результат
Чтение исходников Разрешить Читаются файлы рабочей области
Изменение тестового файла Запросить подтверждение После подтверждения появляется diff
Установка зависимости Запросить подтверждение Команда выполняется в проектном каталоге
Чтение ключа Запретить Операция блокируется
Публикация сборки Запретить или требовать ручное подтверждение Автоматический запуск невозможен
Запись за пределами проекта Запретить Выход из рабочей области блокируется

Если используется песочница, проверьте каталоги записи, сетевые домены и поведение при невозможности включить изоляцию. Для чувствительного проекта безопаснее остановить выполнение, чем незаметно продолжить без ожидаемой защиты.

После положительных тестов выполните отрицательные:

  • запросите чтение запрещённого файла;
  • попробуйте изменить его;
  • запустите команду за пределами проекта;
  • проверьте обращение к запрещённому домену.

Восстановление и приёмка

Длительную сессию запускайте внутри tmux:

tmux new -s claude-work
cd ~/work/ios-agent-demo
claude

После разрыва SSH:

ssh claude-macos-lab
tmux attach -t claude-work

Не запускайте второй экземпляр вслепую. Сначала проверьте, остался ли первый процесс активным и не выполняет ли он изменение файлов.

Для продолжения сохранённого контекста Claude Code предоставляет --continue и --resume. Официальный справочник CLI Claude Code содержит описание этих параметров и связанных режимов запуска. Восстановление следует проверять на тестовой задаче, а не впервые во время production-сборки.

Финальная приёмка должна включать:

  • вход только разрешённой учётной записью;
  • подтверждённый отпечаток узла;
  • исправный claude doctor;
  • рабочую авторизацию;
  • корректный Git-профиль;
  • доступные Xcode-инструменты;
  • чтение и изменение только разрешённых каталогов;
  • блокировку секретных файлов;
  • успешный тестовый запуск;
  • сохранение процесса после закрытия SSH;
  • восстановление после перезагрузки Mac.

После приёмки оформите список возврата среды: отозвать SSH-ключ, удалить временные credentials, зафиксировать изменения конфигурации, архивировать результаты теста и определить порядок обновления Claude Code.

Для этой задачи Linux-сервер или виртуальная macOS-среда имеют реальные недостатки: они могут не дать полноценный доступ к Xcode и системным компонентам, а восстановление окружения часто требует дополнительных обходных решений. Собственный Mac лучше подходит для постоянной тяжёлой нагрузки и работы с физическими устройствами. Но для временного проекта, командного тестового узла или постоянно доступной macOS-среды разумнее сначала проверить задачу без капитальной покупки. ProxyMac позволяет получить удалённый Mac, проверить SSH, права, инструменты и восстановление на небольшой обратимой задаче, а затем решить, нужен ли долгосрочный узел. Актуальные условия можно сопоставить на странице тарифов ProxyMac, а выданную среду — проверить через консоль ProxyMac.

Запустите Claude Code на удалённом Mac

Арендуйте выделенный физический Mac mini M4 от ProxyMac для работы с Claude Code по SSH.
Получите полноценную среду macOS с Xcode, Simulator, Keychain и нативными инструментами разработки.