DevOpsДругой язык

Git authentication failed и 403: как вернуть push в GitHub

Диагностируем ошибки GitHub Authentication failed и HTTP 403: проверяем remote, учётную запись, токен, права репозитория и SSO без передачи секретов.

Кодик

Автор

6 мин чтения

При Authentication failed или HTTP 403 сначала выполните git remote -v и проверьте две вещи: в какой репозиторий идёт push и есть ли у текущей учётной записи право записи. GitHub больше не принимает пароль аккаунта для Git-операций по HTTPS. Используйте personal access token через менеджер учётных данных либо настройте SSH-ключ. Никогда не вставляйте токен в URL, код, скриншот или сообщение.

Коммиты готовы, git status чистый, но git push просит пароль или отвечает 403. Кажется, что сломан Git, хотя соединение уже состоялось: сервер понял запрос, но не принял удостоверение или не разрешил запись. Частая причина особенно проста: remote указывает на чужой учебный репозиторий, который вы клонировали для чтения.

1Проверяем адрес

Смотрим git remote -v, владельца репозитория и протокол HTTPS или SSH.

2Проверяем доступ

Уточняем активную учётную запись, разрешение на запись, срок токена и SSO организации.

3Обновляем способ входа

Удаляем только неверную сохранённую запись и авторизуемся через token или SSH.

Чем Authentication failed отличается от HTTP 403

Оба сообщения связаны с доступом, но указывают на разные этапы. Authentication failed чаще означает, что сервер не принял предоставленное удостоверение: устаревший пароль, отозванный токен или неверную сохранённую запись. Код 403 означает, что запрос распознан, но действие запрещено: у пользователя нет write-доступа, токен не имеет нужного разрешения или доступ организации ограничен SSO.

СимптомВероятная зонаПервая проверка
Authentication failedУчётные данныеАккаунт, token и сохранённый credential
403 при pushАвторизацияПраво write и владелец remote
Repository not foundАдрес или доступgit remote -v и видимость репозитория
Permission denied (publickey)SSHКлюч, агент и аккаунт GitHub
Push защищённой ветки отклонёнПравило веткиРазрешённый workflow и pull request

Схема проверки git push от remote до прав репозитория
Push проходит адрес, удостоверение, право на репозиторий и правило ветки.

403 не всегда означает неверный token. Удостоверение может быть правильным, но у аккаунта нет права писать именно в этот репозиторий или ветку.

Собираем безопасную диагностику remote и текущей ветки

Начните с команд, которые не показывают секреты. Адрес remote можно читать и исправлять, имя ветки определяет цель push, а конфигурация credential helper подсказывает, где система хранит авторизацию. Не выполняйте git config --list --show-origin в публичной переписке целиком: пользовательские настройки иногда содержат приватные адреса.

git status
git branch --show-current
git remote -v
git remote get-url origin
git config --get credential.helper

# HTTPS выглядит так:
# https://github.com/OWNER/REPOSITORY.git

# SSH выглядит так:
# git@github.com:OWNER/REPOSITORY.git

# После проверки владельца и точного адреса:
git push -u origin YOUR_BRANCH
Что нужно записать перед изменениями
  • Точный OWNER/REPOSITORY и совпадает ли он с проектом, куда вы вправе отправлять код.
  • Протокол remote: HTTPS и SSH используют разные способы удостоверения.
  • Имя текущей ветки и не защищена ли целевая ветка правилами репозитория.

Сравнение аутентификации GitHub по HTTPS token и SSH ключу
Оба маршрута безопасны при корректном хранении секрета, но диагностируются по-разному.

Выбираем HTTPS с token или SSH-ключ

Оба способа подходят для обычной работы. HTTPS проще начать и удобно интегрируется с менеджером учётных данных: при входе вместо пароля используется personal access token, а современный helper может открыть браузер. SSH один раз связывает публичный ключ с аккаунтом и затем подписывает подключение локальным закрытым ключом. Не смешивайте диагностику протоколов.

ВариантЧто хранится локальноКогда удобен
HTTPS + credential managerToken в защищённом хранилищеПервый GitHub-проект и вход через браузер
HTTPS + fine-grained tokenToken с ограниченным доступомНужны точные репозитории и разрешения
SSHЗакрытый ключ на машинеРегулярная работа и несколько push
Deploy keyКлюч одного репозиторияАвтоматизация, а не личная работа
Пароль аккаунтаНе подходитGitHub не принимает его для Git по HTTPS
Секретом является token и закрытый ключ. Публичный SSH-ключ можно добавлять в GitHub. Файл без суффикса .pub, token и коды восстановления нельзя отправлять даже помощнику.

Практика: исправляем push по HTTPS без утечки token

Предположим, remote правильный и у вашего аккаунта есть write-доступ. Тогда нужно обновить сохранённую авторизацию. Используйте системный менеджер учётных данных или официальный клиент, удаляя только запись GitHub для неверного аккаунта. Следующий push запустит новый вход. Если репозиторий принадлежит организации, проверьте, нужно ли отдельно разрешить token через SSO.

Контрольный маршрут
  1. Откройте репозиторий в браузере под нужной учётной записью и убедитесь, что можете видеть Settings или создавать ветку согласно своей роли.
  2. Сверьте OWNER/REPOSITORY из адресной строки с выводом git remote get-url origin.
  3. Если это ваш fork, замените origin только на точный URL fork командой git remote set-url origin ....
  4. Откройте системный Credential Manager или Keychain и удалите только устаревшую запись для github.com, если она привязана не к тому аккаунту.
  5. Повторите push и завершите официальный браузерный вход либо используйте token вместо пароля в защищённом запросе.
  6. После успеха обновите страницу веток GitHub и проверьте SHA последнего коммита, а не только отсутствие ошибки в терминале.
Признаки, что доступ восстановлен
  • Push сообщает имя ветки и переданный диапазон объектов без Authentication failed или 403.
  • На GitHub появилась нужная ветка с тем же последним коммитом.
  • Token не оказался в remote URL, истории shell, файлах проекта или скриншотах.

Дерево причин Authentication failed и HTTP 403 в Git
Точный текст ошибки помогает не менять token, когда проблема находится в remote или правах.

Почему новый token не помогает и что ещё проверить

Создание ещё одного token не исправит неправильный remote, отсутствие роли или правило защищённой ветки. Fine-grained token действует только для выбранных репозиториев и разрешений. В организациях SAML SSO может требовать отдельной авторизации доступа. При нескольких аккаунтах credential manager способен снова подставить старую запись.

Token вставлен прямо в URL

Он попадает в конфигурацию, историю и логи. Храните секрет через credential manager и сразу отзывайте случайно раскрытый token.

Проверяется только имя пользователя в git config

user.name подписывает коммит, но не определяет аккаунт, которым сервер авторизует push.

Push идёт в upstream вместо fork

Читать публичный репозиторий можно без права записи. Направьте origin на свой fork, а upstream оставьте для получения обновлений.

Token не имеет доступа к репозиторию

Проверьте выбранные repositories, Contents write и требования организации, не расширяя права без необходимости.

Защищённую main пытаются обойти

Ошибка может требовать ветку и pull request. Следуйте правилу репозитория, а не меняйте авторизацию.

Меняйте один слой за раз. Сначала URL и владелец, затем право аккаунта, потом credential, после этого разрешения token или SSH. Такой порядок не создаёт лишних ключей и секретов. Технические детали сверены с официальной документацией GitHub по аутентификации из командной строки.
Короткие ответы
Можно ли вводить пароль GitHub для git push по HTTPS?

Нет. Используйте personal access token или браузерный вход через credential helper.

Что первым показывает git remote -v?

Адрес репозитория и протокол, через который выполняются fetch и push.

Связан ли git config user.name с аккаунтом для push?

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

Почему 403 возможен с правильным token?

У аккаунта или token может не быть write-доступа к выбранному репозиторию, организации или ветке.

Что делать с случайно опубликованным token?

Немедленно отозвать его в GitHub, создать новый с минимальными правами и удалить утечку из доступных мест.

Сделайте Git предсказуемым до первой командной работы

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

Затем откройте Git и GitHub для новичков, настройте работу с ветками и сохраните пошаговый материал как загрузить проект на GitHub.