Два ssh ключа для git
📂 У тебя личный и рабочий GitHub, и ты устал вручную менять ключи или заново логиниться?
Есть простое решение: настройка SSH с разными alias и автоматическая работа с нужным аккаунтом. Делюсь рабочим способом.
Вкратце для самых нетерпеливых содержимое файла ~/.ssh/config
# Конфигурация для личного аккаунта GitHub Host github.com HostName github.com User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519 # Личный ключ # Конфигурация для рабочего аккаунта GitHub Host github-work HostName github.com User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa_work # Рабочий ключ
Как это работает:
git@github.com:username/repo.git
SSH смотрит секцию Host github.com
→ Используется личный ключ ~/.ssh/id_ed25519
.
git@github-work:username/repo.git
SSH смотрит секцию Host github-work
→ Используется рабочий ключ ~/.ssh/id_rsa_work
.
Теперь чуть подробней с теорией
Основы SSH и ~/.ssh/config
Файл ~/.ssh/config
— это конфигурационный файл для SSH-клиента. В нём задаются алиасы (через Host
), которые позволяют использовать разные настройки (например, разные ключи) для подключения к разным хостам или, как в твоём случае, к одному и тому же хосту, но с разными ключами.
Что делает каждая строка:
Host github.com
— настройка для подключения по имениgithub.com
(то, что указывается в git remote).Host github-work
— это псевдоним (алиас), который необходимо придумать. С SSH точки зрения это "отдельный" хост.HostName github.com
— реальный адрес, куда идёт подключение. В обоих случаях это GitHub.User git
— имя SSH-пользователя для GitHub.IdentityFile
— путь к нужному приватному ключу для данного подключения.
Что происходит при команде git push
Если используешь:
git@github.com:username/repo.git
Если используешь:
git@github-work:username/repo.git
- SSH ищет секцию
Host github-work
в конфиге. - Под капотом всё равно обращается на
github.com
(изHostName
). - Но уже использует другой ключ
~/.ssh/id_rsa_work
.
👉 Подписывайтесь на мой ТГ. Буду стараться писать что-то полезное и интересное https://t.me/+fhVmaCi66s9kMDBi