Настройка SSH с Github
Подключение к GitHub по SSH
Работа по SSH позволяет клонировать и пушить в репозитории GitHub без постоянного ввода логина/пароля или токена.
Если вы уже подключались по SSH к другим сервисам (например, Gitea) и у вас есть ключ id_ed25519 или id_rsa, его не нужно затирать.
Можно:
- либо использовать один и тот же ключ для Gitea и GitHub;
- либо создать отдельный ключ для GitHub с другим именем и прописать его в
~/.ssh/config.
Общий план
1. Проверить существующие SSH-ключи
Посмотреть, какие ключи уже есть в ~/.ssh (или C:\Users\USER\.ssh).
2. Решить стратегию: один ключ или несколько
Либо используем уже существующий ключ, либо создаём новый с отдельным именем (например, id_ed25519_github).
3. Сгенерировать новый ключ (если нужно)
Создать пару ключей через ssh-keygen (ed25519 или rsa).
4. Обновить ~/.ssh/config
Добавить туда настройки для GitHub (и при необходимости Gitea), чтобы для каждого хоста использовался свой ключ.
5. Добавить публичный ключ в GitHub
Скопировать .pub-файл и вставить на сайте GitHub.
6. Проверить подключение по SSH
Проверить, что всё работает командой ssh -T [email protected].
1. Проверяем существующие SSH-ключи
Linux/macOS
ls -al ~/.sshОбратите внимание на файлы вида:
id_ed25519/id_ed25519.pubid_rsa/id_rsa.pub- или любые другие пары
что-тоичто-то.pub
Если, например, вы раньше настраивали Gitea, там уже может быть ключ, вроде:
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pubЕго можно:
- либо использовать для GitHub тоже;
- либо оставить как ключ для Gitea, а для GitHub создать новый, например
id_ed25519_github.
2. Один ключ или несколько?
Вариант B (чисто): отдельный ключ для каждого сервиса, плюс настройки в
~/.ssh/config.Вариант A — один ключ для всех
Если у вас уже есть, например, ~/.ssh/id_ed25519, можно:
- не генерировать новый ключ,
- а сразу перейти к разделу «4. Обновляем
~/.ssh/config» и добавить туда блок дляgithub.com, указывающий тот жеIdentityFile.
Вариант B — отдельный ключ для GitHub
Если хотите разнести доступы по ключам (Gitea отдельный, GitHub отдельный), создайте дополнительный ключ с другим именем, например:
id_ed25519_github(для GitHub)id_ed25519_gitea(для Gitea)
3. Генерируем новый SSH-ключ (опционально)
id_ed25519, id_ed25519_github без .pub) другим людям и не загружайте его в GitHub.В GitHub добавляется только файл с суффиксом
.pub.Linux/macOS
Создадим отдельный ключ для GitHub с именем id_ed25519_github:
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519_githubЕсли ed25519 недоступен:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_rsa_githubДальше:
- при запросе passphrase задайте пароль (желательно не пустой);
- в
~/.sshпоявятся файлы:
id_ed25519_github # приватный ключ
id_ed25519_github.pub # публичный ключWindows
Git Bash (рекомендовано)
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519_githubЛибо RSA:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_rsa_githubPowerShell
ssh-keygen -t ed25519 -C "your_email@example.com" -f $env:USERPROFILE\.ssh\id_ed25519_githubПосле генерации ключи лежат в:
C:\Users\ВАШ_ПОЛЬЗОВАТЕЛЬ\.ssh\id_ed25519_github
C:\Users\ВАШ_ПОЛЬЗОВАТЕЛЬ\.ssh\id_ed25519_github.pub4. Настраиваем ~/.ssh/config для GitHub и Gitea
Чтобы явно указать, какой ключ использовать для какого сервиса, создадим/отредактируем файл:
- Linux/macOS:
~/.ssh/config - Windows:
C:\Users\ВАШ_ПОЛЬЗОВАТЕЛЬ\.ssh\config
Если файла нет — просто создайте его.
config в каталоге .ssh и применяет блок Host в зависимости от того, к какому хосту вы подключаетесь (github.com, gitea.example.com и т.п.).Пример 1 — один ключ для Gitea и GitHub
Допустим, у вас есть только ~/.ssh/id_ed25519, и он уже используется для Gitea.
Файл ~/.ssh/config может выглядеть так:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Host gitea
HostName gitea.example.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yesТогда:
-
для GitHub вы используете URL вида:
git clone [email protected]:USERNAME/REPO.git -
для Gitea (через alias
gitea):git clone gitea:GROUP/REPO.git
Пример 2 — разные ключи для Gitea и GitHub
Пусть:
- Gitea:
~/.ssh/id_ed25519 - GitHub:
~/.ssh/id_ed25519_github
Тогда ~/.ssh/config:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
Host gitea
HostName gitea.example.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yesУбедитесь, что права на ~/.ssh/config ограничены:
chmod 600 ~/.ssh/configНа Windows это обычно не требуется, но файл тоже должен лежать в %USERPROFILE%\.ssh\config.
5. Добавляем ключ в ssh-agent (чтобы не вводить пароль каждый раз)
6. Копируем публичный ключ и добавляем в GitHub
Добавляем ключ на сайте GitHub
- Откройте GitHub → Settings.
- Слева выберите SSH and GPG keys.
- Нажмите New SSH key.
- В Title введите что-то вроде:
Laptop Linux (GitHub)илиWindows PC (GitHub). - В поле Key вставьте содержимое
.pub-файла. - Нажмите Add SSH key.
7. Проверяем подключение к GitHub
В любом терминале:
ssh -T [email protected]При первом подключении появится вопрос:
Are you sure you want to continue connecting (yes/no/[fingerprint])?Введите:
yesЕсли видите сообщение вида:
Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.— значит, ключ работает, конфиг настроен правильно, и можно использовать SSH-URL для репозиториев GitHub.