MacOS, SSH для Git
Суть проблемы
При работе с Git в macOS, особенно через HTTP/HTTPS, часто возникает всплывающее окно:
git-credential-osxkeychain wants to use your confidential information...
Даже если нажать Always Allow, окно может продолжать появляться при каждом открытии проекта или выполнении команды git pull/push
.
Основные причины:
- Репозиторий подключён по HTTP (или HTTP → редирект на HTTPS).
- macOS Keychain блокирует доступ или хранит старый пароль.
- Несоответствие между путём Git (
/usr/bin/git
vs/opt/homebrew/bin/git
) и сохранёнными кредами.
Надёжное и безопасное решение — перейти с HTTP/HTTPS на SSH-аутентификацию. Это полностью убирает зависимость от Keychain и избавляет от всплывающих запросов пароля.
Диагностика проблемы
Перед переходом на SSH стоит убедиться, что причина действительно в Keychain + HTTP:
Проверить remote-URL
git remote -v
Если он начинается с
http://
илиhttps://
— это первый признак проблемы.Проверить путь к Git
which git
Если используется Homebrew, путь будет вроде
/opt/homebrew/bin/git
.
Иногда VS Code использует другой Git (/usr/bin/git
), что вызывает повторный запрос Keychain.Проверить наличие записей в Keychain
- Keychain Access (
Cmd + Space
→ Keychain Access). - Находим записи с именем сервера (например,
gitlab.example.com
). - Если есть дубликаты или устаревшие пароли, Git может снова и снова запрашивать доступ.
- Keychain Access (
Проверка блокировки связки
login
- В Keychain Access слева выбираем
login
. - Если замок закрыт — разблокируем паролем.
- Проверяем настройки: Keychain Access → Settings… → убираем галочки
Lock after X minutes
иLock when sleeping
.
- В Keychain Access слева выбираем
Если всё это совпадает — решение через SSH уберёт проблему.
Пошаговое решение
1. Проверяем текущий remote
git remote -v
Если видим:
origin http://gitlab.example.com/group/project.git (fetch)
origin http://gitlab.example.com/group/project.git (push)
— значит используем HTTP. Будем переводить на SSH.
2. Запускаем SSH-агент и добавляем ключ в Keychain
Если приватный ключ уже есть (обычно ~/.ssh/id_rsa
), добавляем его:
eval "$(ssh-agent -s)"
ssh-add --apple-use-keychain ~/.ssh/id_rsa
Если ключа нет — создаём:
ssh-keygen -t ed25519 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
3. Настраиваем ~/.ssh/config
Откроем файл (создаём, если нет):
nano ~/.ssh/config
Добавляем:
Host gitlab.example.com
HostName gitlab.example.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
gitlab.example.com
замените на адрес вашего GitLab.
4. Добавляем публичный ключ в GitLab
Смотрим публичный ключ:
cat ~/.ssh/id_rsa.pub
Копируем весь вывод.
В GitLab:
- User → Preferences → SSH Keys
- В поле Key вставляем содержимое
- Title — любое название (например, "MacBook Pro")
- Expiration date — можно оставить пустым.
5. Меняем URL репозитория на SSH
git remote set-url origin git@gitlab.example.com:group/project.git
Проверяем:
git remote -v
Должно быть:
origin git@gitlab.example.com:group/project.git (fetch)
origin git@gitlab.example.com:group/project.git (push)
6. Тестируем подключение
ssh -T git@gitlab.example.com
При успешном подключении увидим:
Welcome to GitLab, @username!
7. Проверка работы
Пробуем обычную команду:
git pull
Если всё настроено правильно:
- Пароль больше не спрашивается.
- Keychain Access не показывает всплывающих окон.
Итог
Переход на SSH-аутентификацию в Git на macOS:
- полностью убирает зависимость от
git-credential-osxkeychain
; - ускоряет работу с репозиториями;
- повышает безопасность (ключи безопаснее паролей).