Введение
При одновременной работе с несколькими учетными записями 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
- Перейдите в браузере в настройки профиля: GitHub → Settings → SSH and GPG keys → New SSH key.
- В поле Title укажите идентификатор устройства (например,
PC Main Windows). - В выпадающем списке Key type выберите Authentication Key.
- Вставьте содержимое буфера в поле 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
Подтверждение отпечатка хоста
При успешной авторизации сервер вернет приветственные сообщения с именами соответствующих пользователей:
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
Безопасность авторства коммитов
Итоговый файл ~/.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
- В приложении GitHub Desktop войдите в свой основной аккаунт через меню File → Options → Accounts.
- Репозитории дополнительных профилей добавляйте через меню File → Clone repository… → вкладка URL.
- В поле адреса вставляйте SSH-ссылку с настроенным хост-алиасом:
git@github-work:владелец/имя-репо.gitgit@github-client:владелец/имя-репо.git
- Операции 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 шагов:
- Клонируйте проект по SSH-алиасу:
git clone git@github-<alias>:<owner>/<repo>.git cd <repo> - Задайте данные автора локально:
git config user.name "<Имя>" git config user.email "<Email>" - Проверьте готовность: выполните тестовый коммит. При отсутствии локального конфига Git заблокирует операцию благодаря правилу
useConfigOnly.
2. Добавление нового аккаунта
Если появится необходимость подключить еще один GitHub-профиль:
- Сгенерируйте ключ:
ssh-keygen -t ed25519 -C "email@example.com" -f "$HOME\.ssh\id_ed25519_new" - Скопируйте публичный ключ и добавьте его в профиль GitHub:
Get-Content ~\.ssh\id_ed25519_new.pub | Set-Clipboard - Добавьте секцию в
$HOME\.ssh\config:Host github-new HostName github.com User git IdentityFile ~/.ssh/id_ed25519_new IdentitiesOnly yes - Проверьте соединение:
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