June 24

Два 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 remote указан:
git@github.com:username/repo.git

SSH смотрит секцию Host github.com → Используется личный ключ ~/.ssh/id_ed25519.

  • Когда в Git remote указан:
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
  • SSH ищет в конфиге секцию Host github.com.
  • Находит ключ ~/.ssh/id_ed25519 и использует его.

Если используешь:

git@github-work:username/repo.git
  • SSH ищет секцию Host github-work в конфиге.
  • Под капотом всё равно обращается на github.com (из HostName).
  • Но уже использует другой ключ ~/.ssh/id_rsa_work.

👉 Подписывайтесь на мой ТГ. Буду стараться писать что-то полезное и интересное https://t.me/+fhVmaCi66s9kMDBi