2026 облачный Mac: принудительные SSH-команды для подрядчиков и проверяемые шаблоны authorized_keys на арендованном Apple Silicon
Когда подрядчики и сотрудники делят один арендованный Mac mini на Apple Silicon, файл ~/.ssh/authorized_keys быстро превращается в «каждый публичный ключ = полный shell». Вывод 2026: для каждого ключа добавляйте command=, restrict и явное no-port-forwarding, проверяйте сценариями с негативными тестами и логируйте принятие отпечатка вместе с ID аренды в CMDB. Ниже — матрица «обёртка против git-shell», пятибалльная таблица возможностей, семь шагов для регионов MacLogin (Гонконг, Токио, Сеул, Сингапур, США) и FAQ для пакетов SOC2.
Перед добавлением ключей пройдите чеклист доверия к хосту при первом SSH, а если нужны интерактивные shell, читайте управление общими сессиями. Базовые инструкции — в справке, сравнение узлов — на странице цен, VNC — только для диалогов согласия macOS.
Облачные Mac чаще переустанавливаются, чем офисные рабочие станции: ежемесячный diff authorized_keys резко снижает число сбоев из‑за кавычки. Разделяйте строфы по организации подрядчика, чтобы сузить радиус отзыва ключа.
Кому нужны принудительные команды на арендованном облачном Mac
Не только анонимным CI-ботам. Если закупки не успевают выдать «один лиз на подрядчика» до конца квартала, принудительная команда — самый дешёвый компенсирующий контроль.
- Регулируемые SaaS, которым нужно доказать, что read-only Git не превращается в сканирование VPC.
- Мобильные релизы с временной загрузкой без sudo-shell.
- Команды AI-автоматизации, где deploy-ключ должен запускать ровно один оркестратор.
- MSP с десятками лизингов MacLogin и комментариями к тикетам.
Сигналы, что обычный shell слишком широк
- Один и тот же ключ в более чем трёх группах хостов без даты ротации.
- Следы
ssh -Rу учётных записей, которые должны быть только для чтения. - Пентест цепляет локальный форвардинг к внутренним admin API при отключённом пароле.
- Опросники комплаенса требуют allow-list команд, а ответ остаётся на уровне «мы используем SSH-ключи».
command="..." полностью ломает ключ. Редактируйте через sudo -e, версионируйте, тестируйте одноразовым ключом.Матрица: обёртка против подсистемы
| Сценарий | Предпочтение | Почему проходит аудит | Риски облака |
|---|---|---|---|
| Только чтение Git у вендора | git-shell как принудительная команда | Форма argv задокументирована | Пути репозиториев вне домашнего каталога, если политика требует |
| Один артефакт CI | Маленькая обёртка с белым списком argv | Простой git diff | Закрепите интерпретатор |
| Аварийный админ на 48 часов | Отдельный ключ с датой в комментарии | Ясная временная граница | Не переиспользуйте материал ключа после срока |
| Телеметрия через бастион | Минимальный приёмник + сеть режет латераль | Минимальная поверхность | Сочетайте с политикой TCP forwarding на sshd |
Какие опции комбинировать
| Набор | Порт‑форвардинг | PTY | Стиль scp | Agent forwarding | Остаточный риск |
|---|---|---|---|---|---|
только restrict | обычно блокируется | часто блокируется | нужен явный путь | блокируется | низкий (проверьте версию) |
command= + ручные опции | зависит от no-port-forwarding | настраивается | нужна обёртка | добавьте no-agent-forwarding | средний (ошибки редактирования) |
| без ограничений | часто разрешён | разрешён | разрешён | часто разрешён | высокий |
ssh -G на ноутбуке подрядчика, считайте уникальные IP за 24 часа (для человека обычно < 5), медиану длительности интерактивных сессий (> 45 минут — разбор).Семь шагов для продакшена
- Инвентаризация: экспорт с комментариями; без владельца, срока и тикета — отклонять.
- Классификация: человек, машина только чтение, аварийный доступ.
- Черновик: машинные ключи с
restrict,command="/usr/local/bin/ci-git-bridge.sh". - Синтаксис:
sshd -T(если можно) и тестовый пользователь. - Негативные тесты:
RequestTTY, запрещённыйscp,-R— всё должно жёстко падать. - Канареечный период: одна региональная площадка 72 часа.
- Доказательства: diff, транскрипты, выдержки из единого журнала.
git-shell или своя обёртка
Если нужен только Git, git-shell самый быстрый путь. Как только появляются defaults, API Xcode или несколько ACL, переходите на подписанную обёртку с JSON-логами argv, IP и имени лиза.
Советы по логам
Файл 0600 или logger; добавляйте код региона HK/JP/KR/SG/US.
Поля аудита, которые реально запрашивают
| Артефакт | Минимум хранения | Владелец | Заметки |
|---|---|---|---|
| diff authorized_keys | 365 дней | Платформа | Ссылка на тикет SSH-FRC-2026 |
| Негативные тесты | 180 дней | AppSec | Покажите заблокированные форварды |
| Журналы AcceptedPublicKey | 90 дней | SOC | Сопоставление с обновлением списка подрядчиков |
FAQ
Заменяет ли Match User опции per-key? Грубо; смешанный CI и люди на одном UNIX-аккаунте требуют per-key.
FIDO2-ключи? Аппаратная аутентификация не снимает фильтрацию команд.
VS Code Remote SSH? Ожидается форвардинг и часто PTY — отдельный класс ключей.
Почему Mac mini M4 подходит для экспериментов
Стек OpenSSH + launchd совпадает с настольными Mac, поэтому проверки в Токио совпадают со скриншотами аудита из Сингапура. Память M4 тянет git pack и лёгкие валидаторы Python. Арендуйте по регионам MacLogin и используйте VNC для TCC без расширения прав shell.
При росте нагрузки разделяйте среды через цены, сохраняя один текстовый runbook.
Изолированный лиз для проверки ключей
Проверьте принудительные команды в продоподобном регионе до правок общего authorized_keys.