Секрет уже сохранён в интерфейсе, но непонятно, где он находится и кто сможет его использовать на общем Mac.
Самое быстрое решение: для личной пробы DeepSeek Harness оставьте ключ во встроенном Web UI, для Python SDK, CI и восстанавливаемых задач используйте переменную среды во время запуска, а в общей удалённой среде закрепите ключ за отдельной учётной записью, а не за всеми пользователями машины.
Эта статья для вас, если вы впервые настраиваете DeepSeek Harness на личном Mac, обслуживаете общий или удалённый Mac либо отвечаете за правила ротации и отзыва ключей в команде.
SECTION 01 Хранение ключа API DeepSeek Harness начинается с владельца
Вопрос «где лежит ключ?» недостаточно точен. Перед выбором способа хранения определите четыре роли:
- владелец — кто создаёт ключ и отвечает за его бюджет;
- исполнитель — какой пользователь или задача отправляет запросы;
- читатель — кто может получить значение или использовать уже настроенную сессию;
- оператор ротации — кто заменяет и отзывает ключ после инцидента, смены проекта или ухода сотрудника.
Именно эти границы важнее, чем удобство поля в Web UI. Файл может не показывать секрет в интерфейсе, но процесс с правами соответствующего пользователя всё равно способен прочитать его или использовать ссылку на сохранённое значение. Поэтому «ключ не виден» не означает «ключ недоступен».
В документации DeepSeek API подтверждается общий принцип: сначала создаётся ключ платформы, после чего клиент передаёт его при обращении к API. Для интеграций, запускаемых из терминала, официальные примеры используют переменные среды, а не вставку значения в исходный код. См. официальную документацию DeepSeek API и пример настройки переменных среды для интеграции с агентом. (api-docs.deepseek.com)
Что меняется в зависимости от среды
На личном Mac основной риск — не сама запись ключа, а резервные копии, общий вход в систему, журналы оболочки и удалённый доступ. Если каталог пользователя копируется целиком, вместе с настройками может уйти и ссылка на сохранённый секрет.
В Python SDK риск другой: разработчик часто добавляет export DEEPSEEK_API_KEY=... в файл запуска, README или конфигурацию проекта. После этого ключ может попасть в Git, систему сборки или журнал команд. Официальные примеры DeepSeek показывают использование переменной DEEPSEEK_API_KEY; это удобно для замены ключа без изменения программного кода. (api-docs.deepseek.com)
В автоматизированной задаче важен исполнитель. Если ключ передаётся всем пользователям общей машины, нельзя надёжно ответить, какой проект сделал запрос, кто должен был отозвать доступ и какие задания остановятся после ротации.
Для команды добавляются ещё три скрытые издержки:
- общий ключ смешивает клиентов, проекты или центры затрат;
- отзыв одного секрета может остановить несвязанные задачи;
- передача ключа через чат или файл создаёт копии, о которых владелец уже не знает.
SECTION 02 Какой способ выбрать для личного Mac, SDK и команды
Ниже — не рейтинг удобства, а сравнение по ответственности и восстановлению. Фактическое поведение DeepSeek Harness следует сверять с версией установленного инструмента и актуальным руководством провайдеров: согласно заданной границе проверки, Web UI записывает данные в $DSH_HOME/.credentials.yaml, а настройки сохраняют ссылку и возвращают только обезличенное описание, без показа полного значения.
| Сценарий | Предпочтительный способ | Кто владеет ключом | Основной риск | Как менять ключ |
|---|---|---|---|---|
| Личная интерактивная проба | Встроенный Web UI | Один пользователь Mac | Резервная копия профиля и доступ к учётной записи | Заменить запись в интерфейсе и проверить новый запрос |
| Python SDK | DEEPSEEK_API_KEY во время запуска |
Владелец проекта или запуска | Утечка через скрипт, shell history или CI-лог | Обновить секрет среды без правки кода |
| CI и фоновые задания | Инъекция в среду конкретной задачи | Учётная запись задачи или репозиторий | Логи, дампы ошибок, артефакты сборки | Обновить секрет в пуле исполнения и остановить старый запуск |
| Общий удалённый Mac | Ограниченная учётная запись исполнителя | Команда или проект | Чтение секрета другими пользователями | Ротация по проекту, а не для всей машины |
| Несколько клиентов или центров затрат | Раздельные ключи | Ответственный за каждый контур | Невозможность атрибуции расходов и действий | Отзывать только затронутый контур |
Такой выбор допускает смешанную схему. Один разработчик может использовать Web UI для ручной проверки, тот же проект — переменную среды для Python SDK, а общий удалённый Mac — отдельную учётную запись с ограниченными правами. Не нужно переносить один и тот же секрет между всеми режимами только ради единообразия.
SECTION 03 Где найти сохранённый ключ DeepSeek Harness
Если вы ищете, где хранится сохранённый API Key DeepSeek Harness, начните не с просмотра содержимого файла, а с определения домашнего каталога Harness. В подтверждённой конфигурации путь строится от переменной $DSH_HOME и заканчивается файлом .credentials.yaml.
Это означает следующее:
- в интерфейсе вы можете видеть только обезличенное описание записи;
- в настройках Harness может находиться ссылка или идентификатор учётных данных;
- отсутствие полного значения на странице не доказывает, что локальный процесс не может использовать секрет;
- копирование всего
$DSH_HOMEследует считать потенциальным копированием конфигурации доступа.
Не публикуйте содержимое .credentials.yaml, даже если в нём отображаются только ссылки: структура файла может раскрыть имена провайдеров, профилей, идентификаторы проектов или ожидаемые переменные. Не добавляйте этот файл в репозиторий, архив задачи или общий каталог, пока не проверили, какие поля фактически создаёт ваша версия.
Если после сохранения Web UI показывает лишь маскированное описание, это ожидаемое поведение, а не признак ошибки. Для проверки сделайте безопасный тест:
- сохраните тестовый ключ без публикации его значения;
- закройте и снова откройте Harness;
- убедитесь, что профиль определяется без повторного ввода;
- выполните короткий запрос;
- удалите или замените тестовую запись;
- проверьте, что старый профиль больше не используется новым запуском.
В этом тесте не требуется выводить файл на экран. Достаточно проверить результат запроса, состояние профиля и отсутствие значения в журнале терминала.
SECTION 04 Как Python SDK должен читать DeepSeek API Key
Для Python SDK оптимальна переменная среды DEEPSEEK_API_KEY, заданная на время запуска процесса. Такой вариант отделяет код от секрета: вы можете поменять ключ, не редактируя файл программы, не создавая новый коммит и не меняя зависимости проекта. Официальная документация DeepSeek для совместимых клиентов также показывает передачу ключа через переменную среды либо через параметр клиента; конкретный способ зависит от библиотеки и её версии. (api-docs.deepseek.com)
Безопасная последовательность выглядит так:
- создайте ключ в панели DeepSeek и сразу определите его владельца;
- сохраните значение в локальном менеджере переменных среды или в защищённом профиле запуска;
- передайте процессу только имя
DEEPSEEK_API_KEY; - запустите минимальный тестовый запрос;
- проверьте, что исключения и отладочный вывод не печатают заголовки авторизации;
- удалите временную переменную после проверки, если запуск не должен быть постоянным;
- для CI добавьте секрет в настройки конкретного проекта или пула задач, а не в общий скрипт машины.
Пример команды должен содержать только условное значение:
export DEEPSEEK_API_KEY="<значение_только_для_локального_запуска>"
python run_agent.py
unset DEEPSEEK_API_KEY
Не помещайте команду export с настоящим ключом в README, .command-файл, историю терминала, снимок экрана или общий шаблон запуска. Если нужен файл для локальной разработки, храните его вне репозитория, добавьте имя файла в .gitignore и не копируйте его в каталог проекта без необходимости.
credentials.yaml и переменная среды решают разные задачи. Файл удобен, когда интерактивный Harness должен восстановить сохранённый профиль. Переменная среды лучше подходит для краткоживущего процесса, независимого каталога сессии и автоматического запуска. Ни один из вариантов сам по себе не является полноценной системой ротации или корпоративным хранилищем секретов — официальная документация DeepSeek не подтверждает, что операционная связка с системной связкой ключей, внешним менеджером секретов или автоматической заменой встроена в Harness. (github.com)
SECTION 05 Что делать с ключом в CI и удалённой задаче
Для фоновой или длительной задачи привяжите секрет к исполнителю: учётной записи задания, репозиторию или отдельному пулу выполнения. Не связывайте его со всеми пользователями Mac. В этом случае остановка или ротация одного проекта не обязана прерывать чужие процессы.
Порядок внедрения:
- Опишите границу задачи. Укажите проект, рабочий каталог, учётную запись и ожидаемый срок жизни запуска.
- Создайте отдельный секрет. Не используйте личный ключ разработчика для общего задания.
- Инъецируйте значение перед стартом. Переменная должна появляться в окружении процесса, а не записываться в исходный файл конфигурации.
- Ограничьте чтение. Обычный пользователь должен запускать задачу, но не получать права на чтение каталогов администратора или чужих профилей.
- Проверьте журналы. Ищите значение ключа, заголовки запросов, трассировки исключений, дампы и архивы артефактов.
- Проверьте историю сессии. Harness может сохранять команды, результаты инструментов или служебные записи; убедитесь, что секрет не попадает туда через командную строку.
- Определите сигнал остановки. После отзыва ключа задача должна завершиться с контролируемой ошибкой, а не продолжать бесконечные повторы.
- Зафиксируйте доказательство. Сохраните дату замены, владельца, идентификатор проекта и результат проверки, но не само значение ключа.
Если задача запускается на удалённом Mac, отдельно проверьте SSH-доступ, удалённый рабочий стол, права на каталог сессий и возможность другого пользователя повторно использовать уже открытый процесс. Доступ к машине и право выполнять Harness — это не одно и то же право читать секрет.
SECTION 06 Можно ли нескольким пользователям удалённого Mac использовать один ключ
Технически один ключ может обслуживать несколько процессов, однако для общей среды это плохой исходный вариант. Он допустим только там, где владельцем является один контролируемый сервисный контур, пользователи не получают доступ к значению, а расходы и действия не требуется разделять между проектами.
Если на одном Mac работают разные люди, разделите как минимум:
- администратора, который меняет настройки и отзывает доступ;
- учётную запись выполнения, под которой запускается Harness;
- обычного пользователя, которому нужен результат, но не секрет;
- отдельные проектные профили для клиентов, внутренних задач и разных бюджетов.
Не выдавайте всем один общий ключ для удобства. После увольнения или смены подрядчика вы не сможете отозвать доступ одного человека, не затронув остальных. При подозрении на утечку придётся остановить все связанные задачи, а источник запроса останется неясным.
Для командной среды полезно записать в регламенте три условия допуска: кто утверждает выдачу, где регистрируется замена и кто подтверждает, что старый ключ больше не используется. Если хотя бы одно условие не выполняется, сначала изолируйте аккаунты и проекты, а уже затем запускайте агентные задачи.
SECTION 07 Что изменится после замены или удаления ключа
После замены ключа новые запросы должны проходить с новым значением только в тех процессах, которым оно действительно передано. Уже запущенный процесс может продолжать использовать старое значение до перезапуска, потому что переменная среды читается при создании процесса или клиента. Поэтому ротация не заканчивается изменением записи в интерфейсе.
Проверяйте такие этапы:
- новый запуск получает новый профиль;
- старый процесс остановлен или лишён старого окружения;
- повторные попытки не удерживают старый секрет;
- журналы не содержат прежнее значение;
- задания, которым ключ больше не принадлежит, завершились с ожидаемым сигналом;
- сессии, созданные до замены, отдельно проверены на сохранённые идентификаторы модели и провайдера.
Удаление ключа может повлиять на новые запросы, но это не означает автоматического удаления уже записанной истории. Старые сессии могут продолжать показывать модель, провайдер или служебные метаданные, поэтому после смены провайдера либо удаления профиля проверьте журнал и состояние сессий отдельно. Не делайте вывод, что отзыв ключа стирает данные прошлых запусков.
SECTION 08 Решение по условиям: интерфейс, среда или разделение контуров
Используйте такой порядок выбора:
- Если работа интерактивная, выполняется одним пользователем на личном Mac, а ключ принадлежит этому пользователю, то выберите встроенное хранилище Web UI.
- Если код запускается из Python SDK, CI или временной рабочей директории, то выберите
DEEPSEEK_API_KEYво время старта процесса. - Если задача должна быть полностью пересоздана на другом Mac, то выберите инъекцию переменной среды и храните отдельно описание профиля без значения ключа.
- Если один Mac обслуживает несколько пользователей, то вернитесь к отдельной учётной записи выполнения и ограничьте чтение каталога с credentials.
- Если разные проекты имеют разные бюджеты или требования к аудиту, то создайте отдельные ключи и не объединяйте их в один общий профиль.
- Если вы не можете назвать владельца, читателя и ответственного за отзыв, то не запускайте задачу с этим ключом до исправления границ доступа.
- Если после ротации невозможно доказать остановку старого процесса, то считайте замену незавершённой и повторите её с принудительным завершением старых запусков.
Перед выпуском проверьте пять контрольных точек: владелец, исполнитель, область чтения, журналирование и процедура отзыва. Это даёт более устойчивое решение, чем выбор «файл против интерфейса» по одному признаку удобства.
SECTION 09 Итог для вашей текущей среды
Если сейчас вы храните ключ в общем профиле Mac, главные недостатки уже очевидны: нет точной атрибуции запросов, смена сотрудника требует массового отзыва, а единая ротация может остановить несвязанные задачи. Если ключ зашит в стартовый файл Python, добавляются риск коммита, утечки через резервные копии и сложность замены без изменения проекта. Если вся команда работает через один Web UI-профиль, вы получаете удобный вход, но слабое разделение ответственности.
Поэтому сначала определите владельца и исполнительную учётную запись, затем выберите интерфейс для личной пробы или переменную среды для автоматизации. Если общей среде не хватает изоляции, временный удалённый Mac от VPSNIX может быть разумнее, чем продолжать делить один профиль между всеми пользователями: вы сможете заранее закрепить рабочий контур, проверить права и только после этого запускать длительные задачи. Перед выбором ознакомьтесь с условиями удалённой инфраструктуры VPSNIX и, если нужен временный ресурс для теста, сравните доступные варианты аренды Mac.
На этой неделе зафиксируйте владельца каждого ключа, перенесите Python и CI-запуски на переменные среды, проверьте логи и подготовьте копию регламента ротации без самих секретов. Если вы не можете чётко ответить, кто читает ключ и кто отзывает его после инцидента, сначала разделите учётные записи и проекты — и только затем включайте DeepSeek Harness в общей среде.