MacOS, SSH для Git

12.08.2025

Суть проблемы

При работе с 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:

  1. Проверить remote-URL

    git remote -v
    

    Если он начинается с http:// или https:// — это первый признак проблемы.

  2. Проверить путь к Git

    which git
    

    Если используется Homebrew, путь будет вроде /opt/homebrew/bin/git.
    Иногда VS Code использует другой Git (/usr/bin/git), что вызывает повторный запрос Keychain.

  3. Проверить наличие записей в Keychain

    • Keychain Access (Cmd + SpaceKeychain Access).
    • Находим записи с именем сервера (например, gitlab.example.com).
    • Если есть дубликаты или устаревшие пароли, Git может снова и снова запрашивать доступ.
  4. Проверка блокировки связки login

    • В Keychain Access слева выбираем login.
    • Если замок закрыт — разблокируем паролем.
    • Проверяем настройки: Keychain Access → Settings… → убираем галочки Lock after X minutes и Lock when sleeping.

Если всё это совпадает — решение через 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;
  • ускоряет работу с репозиториями;
  • повышает безопасность (ключи безопаснее паролей).