Ссылка скопирована

Настройка нескольких аккаунтов GitHub на Windows через SSH

DonVardix DonVardix

Введение

При одновременной работе с несколькими учетными записями GitHub (например, личной, рабочей и клиентской) на одном компьютере с Windows стандартная авторизация через HTTPS или один SSH-ключ приводит к конфликтам прав и случайным коммитам с неверным email-адресом.

Что будет сделано:

  • Сгенерированы независимые пары SSH-ключей алгоритма Ed25519 для каждого аккаунта;
  • Настроен файл ~/.ssh/config с хост-алиасами для автоматического выбора нужного ключа;
  • Активирован защитный режим user.useConfigOnly в глобальном Git-конфиге для исключения коммитов с некорректными данными автора;
  • Организована работа с консольным Git, GitHub Desktop и подготовлен готовый промпт для автоматической настройки репозиториев в ИИ-редакторах.

Результат: полностью изолированная среда разработки на Windows, позволяющая работать с любым количеством профилей GitHub без ввода паролей и риска перепутать рабочую почту с личной.


1. Генерация SSH-ключей

Откройте консоль PowerShell от имени текущего пользователя, создайте каталог .ssh в домашней папке ($HOME\.ssh, если он еще не существует) и сгенерируйте ключи Ed25519 для каждого профиля:

# Создание папки ~/.ssh
New-Item -ItemType Directory -Path "$HOME\.ssh" -Force

# 1. Ключ для основного/личного аккаунта (personal)
ssh-keygen -t ed25519 -C "personal@example.com" -f "$HOME\.ssh\id_ed25519_personal"

# 2. Ключ для рабочего аккаунта (work)
ssh-keygen -t ed25519 -C "work@company.com" -f "$HOME\.ssh\id_ed25519_work"

# 3. Ключ для стороннего/клиентского аккаунта (client)
ssh-keygen -t ed25519 -C "client@example.com" -f "$HOME\.ssh\id_ed25519_client"

При запросе кодовой фразы (Enter passphrase и Enter same passphrase again) нажимайте Enter, чтобы оставить ключ без пароля для бесшовной работы без всплывающих диалоговых окон.


2. Добавление публичных ключей в GitHub

Для каждого сгенерированного ключа скопируйте публичную часть в буфер обмена Windows и добавьте в соответствующий профиль GitHub.

2.1. Ключ основного профиля

Скопируйте публичный ключ:

Get-Content ~\.ssh\id_ed25519_personal.pub | Set-Clipboard
  1. Перейдите в браузере в настройки профиля: GitHub → Settings → SSH and GPG keys → New SSH key.
  2. В поле Title укажите идентификатор устройства (например, PC Main Windows).
  3. В выпадающем списке Key type выберите Authentication Key.
  4. Вставьте содержимое буфера в поле Key и нажмите Add SSH key.

2.2. Ключи дополнительных профилей

Повторите процедуру для каждого дополнительного профиля:

# Для рабочего аккаунта (work)
Get-Content ~\.ssh\id_ed25519_work.pub | Set-Clipboard
  • Авторизуйтесь в GitHub под рабочим аккаунтом и сохраните ключ в разделе SSH and GPG keys.
# Для клиентского аккаунта (client)
Get-Content ~\.ssh\id_ed25519_client.pub | Set-Clipboard
  • Авторизуйтесь в GitHub под клиентским аккаунтом и сохраните ключ.

3. Настройка конфигурации SSH

SSH-клиент должен понимать, какой ключ аутентификации использовать при обращении к каждому репозиторию. Для этого создаются хост-алиасы в файле ~/.ssh/config.

3.1. Создание файла config

Выполните команду в PowerShell для создания или перезаписи файла $HOME\.ssh\config в кодировке UTF-8:

@'
# 1. Основной / личный аккаунт (personal)
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    IdentitiesOnly yes

# 2. Рабочий аккаунт (work)
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

# 3. Клиентский аккаунт (client)
Host github-client
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_client
    IdentitiesOnly yes
'@ | Set-Content -Path "$HOME\.ssh\config" -Encoding utf8

Параметр IdentitiesOnly yes гарантирует, что SSH будет отправлять строго указанный в директиве ключ, игнорируя любые другие ключи из SSH-агента.

3.2. Проверка подключения

Протестируйте соединение со всеми настроенными хостами:

ssh -T git@github.com
ssh -T git@github-work
ssh -T git@github-client

Подтверждение отпечатка хоста

При первом подключении к каждому хосту появится предупреждение с вопросом 'Are you sure you want to continue connecting (yes/no/[fingerprint])?'. Введите 'yes' и нажмите Enter. Отпечаток запишется в ~/.ssh/known_hosts.

При успешной авторизации сервер вернет приветственные сообщения с именами соответствующих пользователей:

  • Hi personal-user! You've successfully authenticated...
  • Hi work-user! You've successfully authenticated...
  • Hi client-user! You've successfully authenticated...

4. Защита от случайных коммитов

Самая частая проблема при работе с несколькими аккаунтами — коммиты в рабочий репозиторий с личной почтой и наоборот. Чтобы исключить человеческий фактор, заблокируем неявное указание автора директивой useConfigOnly:

# Запретить коммиты, если имя и email не заданы локально в репозитории
git config --global user.useConfigOnly true

# Очистить глобальные имя и почту
git config --global --unset user.name
git config --global --unset user.email

Безопасность авторства коммитов

Параметр user.useConfigOnly true запрещает создание коммита, если в репозитории не выполнены команды 'git config user.name' и 'git config user.email'. Случайная утечка личной почты в корпоративный репозиторий исключена.

Итоговый файл ~/.gitconfig (C:\Users\<Имя_Пользователя>\.gitconfig) должен выглядеть следующим образом:

[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
[user]
	useConfigOnly = true

5. Работа с репозиториями и GitHub Desktop

5.1. Клонирование через консоль

Для репозиториев дополнительного аккаунта при клонировании вместо стандартного домена github.com указывается соответствующий хост-алиас из ~/.ssh/config:

# Клонирование с использованием алиаса хоста
git clone git@github-work:company/repo-name.git
cd repo-name

# Установка автора локально для проекта (без ключа --global)
git config user.name "work-user"
git config user.email "work@company.com"

Если репозиторий уже был склонирован ранее по HTTPS или стандартному SSH-адресу, обновите remote URL:

git remote set-url origin git@github-work:company/repo-name.git

5.2. Настройка в GitHub Desktop

  1. В приложении GitHub Desktop войдите в свой основной аккаунт через меню File → Options → Accounts.
  2. Репозитории дополнительных профилей добавляйте через меню File → Clone repository… → вкладка URL.
  3. В поле адреса вставляйте SSH-ссылку с настроенным хост-алиасом:
    • git@github-work:владелец/имя-репо.git
    • git@github-client:владелец/имя-репо.git
  4. Операции Fetch, Pull и Push в графическом интерфейсе будут выполняться прозрачно через системный SSH с нужным ключом.

6. Автоматизация через ИИ-промпт

При открытии нового репозитория в современных редакторах (Antigravity IDE, Cursor или VS Code) ручной ввод команд можно делегировать ИИ-ассистенту.

Сохраните следующий промпт в шаблоны инструкций:

Настрой этот репозиторий под профиль: [УКАЖИ 1, 2 ИЛИ 3]

Справочник профилей:
• Вариант 1 (Основной / Personal):
  Host: github.com
  User name: "personal-user"
  User email: "personal@example.com"

• Вариант 2 (Рабочий / Work):
  Host: github-work
  User name: "work-user"
  User email: "work@company.com"

• Вариант 3 (Клиентский / Client):
  Host: github-client
  User name: "client-user"
  User email: "client@example.com"

Инструкция к выполнению:
1. Выполни `git remote get-url origin` и определи путь к репозиторию (часть `owner/repo.git`, отрезав старый домен, схему https или ssh).
2. Сформируй новый SSH URL с Host выбранного профиля: `git@<Host>:<owner>/<repo>.git`.
3. Примени настройки локально в терминале проекта (без флага --global):
   git remote set-url origin git@<Host>:<owner>/<repo>.git
   git config user.name "<User name>"
   git config user.email "<User email>"
4. Проверь результат командами `git remote -v`, `git config user.name`, `git config user.email` и выведи итоговый отчет.

Вывод

Настройка завершена. Вся система работает на уровне системного SSH Windows и локальных параметров каждого Git-проекта.

1. Чек-лист нового проекта

При начале работы с новым репозиторием придерживайтесь последовательности из 3 шагов:

  1. Клонируйте проект по SSH-алиасу:
    git clone git@github-<alias>:<owner>/<repo>.git
    cd <repo>
  2. Задайте данные автора локально:
    git config user.name "<Имя>"
    git config user.email "<Email>"
  3. Проверьте готовность: выполните тестовый коммит. При отсутствии локального конфига Git заблокирует операцию благодаря правилу useConfigOnly.

2. Добавление нового аккаунта

Если появится необходимость подключить еще один GitHub-профиль:

  1. Сгенерируйте ключ:
    ssh-keygen -t ed25519 -C "email@example.com" -f "$HOME\.ssh\id_ed25519_new"
  2. Скопируйте публичный ключ и добавьте его в профиль GitHub:
    Get-Content ~\.ssh\id_ed25519_new.pub | Set-Clipboard
  3. Добавьте секцию в $HOME\.ssh\config:
    Host github-new
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_ed25519_new
        IdentitiesOnly yes
  4. Проверьте соединение:
    ssh -T git@github-new

3. Шпаргалка команд

  • Проверка SSH-подключения ко всем профилям:
    ssh -T git@github.com
    ssh -T git@github-work
    ssh -T git@github-client
  • Проверка текущего автора в репозитории:
    git config user.name && git config user.email
  • Проверка текущего удаленного адреса репозитория:
    git remote -v
  • Копирование любого публичного ключа в буфер обмена:
    Get-Content ~\.ssh\id_ed25519_personal.pub | Set-Clipboard