Токен GitHub и авторизация Git: personal access token, Git Credential Manager, push без пароля
С августа 2021 года GitHub не принимает пароль от аккаунта при работе Git по HTTPS: вместо него нужен токен GitHub (personal access token) или вход через Git Credential Manager, который открывает браузер и сам хранит учётные данные. Токен создают в Settings → Developer settings на github.com, вводят вместо пароля при git push или git clone, а сохраняет его credential.helper.
Почему Git больше не принимает пароль от GitHub
Если при git push вы вводите логин и пароль от github.com и получаете отказ, дело не в опечатке. С 13 августа 2021 года GitHub отключил вход по паролю для операций Git по HTTPS. Вместо пароля нужен токен GitHub (personal access token, PAT) или авторизация через браузер, которую выполняет Git Credential Manager.
Сообщение об ошибке выглядит так:
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/... for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/user/project.git/'
Причина простая: пароль от аккаунта даёт полный доступ ко всему, его нельзя ограничить одним репозиторием и неудобно отзывать. Токен же создаётся под задачу, имеет срок жизни и набор прав, а при утечке его удаляют за минуту, не меняя пароль. GitLab и Bitbucket пошли тем же путём, поэтому всё, что описано ниже, по смыслу применимо и к ним.
Два способа авторизации: HTTPS и SSH
Git общается с удалённым репозиторием по одному из двух протоколов, и от этого зависит, как вы входите.
| Протокол | Адрес репозитория | Чем авторизуетесь |
|---|---|---|
| HTTPS | https://github.com/user/project.git | Токен или Git Credential Manager (вход через браузер) |
| SSH | git@github.com:user/project.git | Пара SSH-ключей: приватный у вас, публичный в настройках GitHub |
SSH-ключ настраивают один раз, и дальше Git вообще не спрашивает ни логина, ни пароля. Его создание и добавление на GitHub подробно разобраны в статье о настройке Git, здесь мы сосредоточимся на HTTPS: именно на нём новички чаще всего видят запрос пароля. Узнать, какой протокол у вашего репозитория, можно командой:
git remote -v
origin https://github.com/user/project.git (fetch)
origin https://github.com/user/project.git (push)
Как создать токен GitHub (personal access token)
Personal access token — это длинная случайная строка, которую GitHub выдаёт вам вместо пароля для программного доступа. Classic-токены начинаются с ghp_, fine-grained — с github_pat_. Токен показывается один раз, сразу после создания, поэтому скопируйте его в менеджер паролей.
Пошагово
- Войдите на github.com, нажмите на аватар в правом верхнем углу и откройте Settings.
- Внизу левого меню выберите Developer settings, затем Personal access tokens.
- Выберите тип: Fine-grained tokens (рекомендуется) или Tokens (classic), и нажмите кнопку создания нового токена.
- Задайте понятное имя (например, «ноутбук, работа»), срок действия и права.
- Нажмите кнопку генерации и сразу скопируйте токен.
Fine-grained или classic
Fine-grained токен ограничивается конкретными репозиториями и отдельными правами. Для обычной работы с кодом выберите нужные репозитории и в разделе прав на репозиторий дайте Contents: Read and write — этого хватает для clone, pull и push. Если только читаете приватный репозиторий, достаточно Read-only.
Classic-токен действует на все ваши репозитории сразу. Для push в репозитории нужна область repo, для изменения файлов в .github/workflows — дополнительно workflow. Classic проще, но опаснее: утечка открывает доступ ко всему аккаунту.
Срок действия
GitHub предлагает несколько вариантов срока и позволяет задать свою дату. Токен без срока создать можно, но не стоит: забытый вечный токен — классическая дыра в безопасности. Разумно ставить 30–90 дней и перевыпускать по напоминанию, которое GitHub пришлёт на почту перед истечением.
Git push и git clone с токеном
Пользоваться токеном проще, чем кажется: Git спрашивает «Password», и вы вставляете туда токен вместо пароля.
$ git push origin main
Username for 'https://github.com': your-login
Password for 'https://your-login@github.com': <вставьте токен>
В терминале символы пароля не отображаются — это нормально, просто вставьте токен и нажмите Enter. В Git Bash на Windows вставка работает через Shift+Insert или правую кнопку мыши.
Git clone with token
Приватный репозиторий клонируется так же: git clone спросит логин и токен. Если нужно обойтись без вопросов (например, в скрипте), токен можно подставить прямо в адрес:
git clone https://your-login:<TOKEN>@github.com/user/project.git
Учтите минус: адрес вместе с токеном сохранится в .git/config и может попасть в историю оболочки. После клонирования лучше убрать токен из адреса:
git remote set-url origin https://github.com/user/project.git
В CI-системах токен передают через секретные переменные окружения, а не пишут в файлы. В GitHub Actions для текущего репозитория уже есть встроенный GITHUB_TOKEN, отдельный PAT там часто не нужен.
GitLab: git clone с токеном
В GitLab токен создаётся в настройках профиля в разделе Access tokens; для работы с кодом нужны области read_repository и write_repository. Схема та же: логин GitLab как имя пользователя, токен как пароль.
git clone https://oauth2:<TOKEN>@gitlab.com/group/project.git
Имя oauth2 GitLab принимает для любого личного токена, вместо него можно указать свой логин.
Git pull и fetch
Для публичного репозитория git pull и git clone работают без авторизации. Логин и токен спросят только для приватного репозитория или при git push. Если pull в публичном проекте вдруг просит пароль, чаще всего в адресе опечатка: GitHub отвечает на несуществующий репозиторий так же, как на закрытый.
Git Credential Manager: что это
Вводить токен при каждом push неудобно. Эту работу берёт на себя credential helper — вспомогательная программа, которую Git вызывает, когда ему нужны учётные данные. Git передаёт ей адрес сервера, а она возвращает логин и пароль (или токен) из своего хранилища.
Git Credential Manager (GCM) — самый удобный из таких помощников. Это кроссплатформенная программа от GitHub и Microsoft: при первом push она открывает окно входа или браузер, вы авторизуетесь на GitHub (в том числе с двухфакторной аутентификацией), а GCM сам получает токен и прячет его в защищённое хранилище системы. Создавать PAT вручную в этом случае не нужно.
GCM поддерживает GitHub, GitLab, Bitbucket и Azure DevOps. В Git для Windows он устанавливается по умолчанию — это тот самый пункт выбора credential helper в установщике.
Какие бывают credential.helper
| Значение | Где хранит | Когда использовать |
|---|---|---|
manager | Git Credential Manager: Диспетчер учётных данных Windows, Связка ключей macOS, Secret Service в Linux | Рекомендуемый вариант для рабочих машин |
osxkeychain | Связка ключей macOS | Стандартный помощник Git на Mac |
cache | В памяти, по умолчанию 15 минут | Linux-сервер, где не хочется хранить токен на диске |
store | Открытым текстом в ~/.git-credentials | Только изолированные машины; токен читается любым, у кого есть доступ к файлу |
Настройка авторизации Git на Windows, macOS и Linux
Посмотреть, какой помощник уже настроен:
git config --show-origin --get-all credential.helper
Windows
Если при установке Git вы оставили настройки по умолчанию, GCM уже работает: при первом push в Git Bash, PowerShell или VS Code откроется окно входа в GitHub. Если помощник не настроен, включите его вручную:
git config --global credential.helper manager
macOS
Git на Mac обычно уже использует osxkeychain: введённый один раз токен попадает в Связку ключей. Чтобы получить вход через браузер, установите Git Credential Manager (например, через Homebrew: brew install --cask git-credential-manager), он сам пропишет себя в настройки.
Linux
В Linux GCM ставят отдельно (пакет .deb или архив с релизов проекта), затем выполняют настройку и выбирают хранилище:
git-credential-manager configure
git config --global credential.credentialStore secretservice
На сервере без графической оболочки проще временный кэш:
git config --global credential.helper 'cache --timeout=3600'
Альтернатива для GitHub: gh auth login
Если у вас установлен GitHub CLI, команда gh auth login проведёт через вход в браузере, а gh auth setup-git настроит Git так, чтобы он брал учётные данные у gh. Это удобный способ «залогиниться в Git Bash» одной командой.
Как сбросить или обновить сохранённый пароль Git
Самая частая ситуация: токен истёк или вы сменили аккаунт, а Git продолжает подставлять старые данные и получает Authentication failed. Нужно удалить сохранённую запись — тогда при следующем push Git спросит заново.
Универсальная команда
Работает с любым помощником:
printf "protocol=https\nhost=github.com\n\n" | git credential reject
Git reset credentials на Windows
Откройте «Панель управления» → «Диспетчер учётных данных» → «Учётные данные Windows», найдите записи вида git:https://github.com и удалите их. То же можно сделать в командной строке:
cmdkey /list | findstr git
cmdkey /delete:git:https://github.com
Если используется GCM, есть и его собственная команда для выхода из аккаунта: git credential-manager github logout <логин>.
macOS
Откройте «Связку ключей», найдите запись github.com типа «Пароль интернета» и удалите её. Или из терминала:
git credential-osxkeychain erase
host=github.com
protocol=https
После последней строки нажмите Enter ещё раз, чтобы передать пустую строку.
Linux и store
Для store удалите строку с github.com из ~/.git-credentials, для cache выполните git credential-cache exit.
Ошибки авторизации и как их исправить
Support for password authentication was removed
Вы ввели пароль от аккаунта. Создайте токен и вставьте его в поле Password или настройте Git Credential Manager. Если ошибка повторяется без запроса пароля, значит, старый пароль сохранён в хранилище — удалите его, как описано выше.
git push: Authentication failed
Причины по убыванию частоты: истёк срок токена; токен отозван; у fine-grained токена нет доступа к этому репозиторию или права Contents стоят только на чтение; в хранилище сохранились данные другого аккаунта. Проверьте срок и права токена в Developer settings и сбросьте сохранённые учётные данные.
remote: Permission denied (403)
Авторизация прошла, но у вашего аккаунта нет права записи в этот репозиторий. Владелец должен добавить вас в Collaborators, либо работайте через свой форк и pull request.
Repository not found
Для приватного репозитория GitHub не раскрывает, существует ли он, поэтому при неверном токене пишет «not found». Проверьте адрес через git remote -v и права токена.
Git clone запрашивает пароль каждый раз
Не настроен credential helper. Включите manager или osxkeychain — после первого успешного ввода Git перестанет спрашивать. Другой вариант — перейти на SSH.
Как хранить токен безопасно
- Давайте минимум прав: fine-grained токен на нужные репозитории вместо classic с
repo. - Ставьте срок действия и перевыпускайте токен, а не продлевайте его бесконечно.
- Не коммитьте токены и не вставляйте их в адреса remote; если токен попал в публичный репозиторий, GitHub может автоматически отозвать его, но считайте его скомпрометированным и удалите сами.
- Используйте системное хранилище (GCM, Связка ключей) вместо
store. - Один токен — одна машина или задача: так при утечке вы отзовёте только его.
Итог
Пароль от GitHub для Git по HTTPS не работает с 2021 года. Есть три рабочих пути: войти через Git Credential Manager в браузере, создать токен GitHub и вводить его вместо пароля или перейти на SSH-ключи. Токен создаётся в Settings → Developer settings, сохраняет его credential.helper, а при ошибке Authentication failed почти всегда помогает перевыпуск токена и сброс старых учётных данных. Подключение к GitHub и работа с удалёнными репозиториями разобраны на практике в курсе по Git.
Частые вопросы
Можно ли посмотреть токен GitHub после создания?
Нет, GitHub показывает токен только один раз. Если вы его не сохранили, удалите старый токен и создайте новый.
Нужен ли токен для git clone публичного репозитория?
Нет, публичные репозитории клонируются и обновляются через git pull без авторизации; токен нужен для приватных репозиториев и для git push.
Что будет, когда срок токена истечёт?
Git начнёт получать Authentication failed. Создайте новый токен (или нажмите Regenerate у старого), удалите сохранённые учётные данные и введите новый токен при следующем push.
Работает ли токен GitHub с двухфакторной аутентификацией?
Да, токен как раз и нужен при включённой 2FA: он заменяет пароль и код подтверждения для операций Git. Git Credential Manager при входе через браузер проходит 2FA сам.
Где Git хранит логин и пароль?
Сам Git их не хранит — это делает credential helper: Диспетчер учётных данных Windows, Связка ключей macOS, Secret Service в Linux или файл ~/.git-credentials при helper store.
Эта тема подробно разобрана с практикой в курсе «Git с нуля до уверенного разработчика».
- Установка и настройка: готовим Git к первому запуску
- GitHub и удалённые репозитории: ваш код в облаке