🎯 Как работать с несколькими SSH-ключами в Git и GitHub (личный + рабочий аккаунт)
Если вы используете GitHub и у вас есть личный и рабочий аккаунты, то быстро появляется боль:
Git не понимает, какой SSH-ключ подставить, и начинает всё ломаться — от доступа к репо до установки зависимостей.
Разбираем, как это решить красиво и автоматизировано.
🔐 Проблема
Git работает по SSH через ключи.
Обычно всё просто:
- генерируете приватный + публичный ключ,
- добавляете публичный в GitHub,
- клонируете по
git@github.com:user/repo.git.
Но вот если аккаунтов несколько, то возникает затык:
Git не знает, какой ключ выбрать для конкретного репозитория.
SSH ключи есть, но Git напрямую ими не управляет.
✅ Шаг 1. Создаём alias для SSH
В файле ~/.ssh/config настраиваем «виртуальный сервер» — алиас, который будет использовать нужный ключ:
Host github-company HostName github.com User git IdentityFile ~/.ssh/your-company-private-key IdentitiesOnly yes
ssh -T git@github-company # Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.
Теперь можно клонировать репозитории через:
git clone git@github-company:company/repo.git
❗ Почему
Потому что внутри проекта могут быть другие SSH-ссылки, например в Python-зависимостях, которые тоже ведут на git@github.com:company/....
И их приходится вручную менять на alias — иначе не скачивается.
Это ломает lock-файлы, требует ручных правок и очень легко случайно закоммитить.
✅ Шаг 2. Пусть Git сам подменяет адреса
Git умеет включать дополнительные конфиги в зависимости от пути к репозиторию.
Открываем (или создаём) ~/.gitconfig:
[user] name = Your Name email = your.email@example.com [includeIf "gitdir:~/workspace/work/"] path = .gitconfig-work
Теперь создаём файл .gitconfig-work в домашней директории:
[user] name = Your Name email = your.email@work.com [url "ssh://git@github.com-company/company/"] insteadOf = ssh://git@github.com/company/ [url "git@github.com-company:company/"] insteadOf = git@github.com:company/
🧠 Что теперь происходит
Если вы работаете внутри ~/workspace/work/, Git:
- видит SSH-ссылку вида
git@github.com:company/... - автоматически заменяет её на
git@github-company:company/... - SSH автоматически использует правильный ключ
- вам вообще ничего менять не нужно