Глиф Учебники

Как добавить SSH-ключ для GitHub

Справочник · Git · 2 минуты чтения

Коротко: создайте ключ, скопируйте его открытую часть в настройки учётной записи на сайте и проверьте вход. Команды одинаковы в Git Bash (Windows), Linux и macOS.

1. Создайте ключ

Bash
ssh-keygen -t ed25519 -C "ivan@example.com"

-C — подпись ключа, обычно почта; на работу она не влияет. На вопрос, куда сохранить, нажмите Enter — ключ ляжет в ~/.ssh/id_ed25519. Затем программа предложит задать фразу-пароль: она защищает ключ, если файл кто-то скопирует. Лучше задать.

Получится два файла:

В Windows папка ~/.ssh — это C:\Users\<имя>\.ssh (вместо <имя> — имя вашего пользователя Windows).

Закрытый ключ (файл без .pub) — как пароль ко всем репозиториям, куда он добавлен. Не отправляйте его в чат, не кладите в репозиторий и в облачные папки общего доступа. Если он попал к чужим — удалите ключ в настройках сайта и создайте новый.

2. Скопируйте открытый ключ

Bash
cat ~/.ssh/id_ed25519.pub

Команда выводит одну строку вида ssh-ed25519 AAAA… ivan@example.com. Выделите и скопируйте её целиком. В Git Bash скопировать сразу в буфер обмена можно командой clip < ~/.ssh/id_ed25519.pub.

3. Добавьте ключ на сайт

На GitHub: щёлкните фото учётной записи в правом верхнем углу → Settings → в боковом меню, в разделе «Access», SSH and GPG keys → New SSH key. В поле Title напишите, что это за компьютер (например, «Домашний ноутбук»), тип оставьте Authentication Key, в поле Key вставьте скопированную строку и нажмите Add SSH key. Сайт может попросить подтвердить вход.

На GitLab ключи добавляются в настройках пользователя, раздел SSH Keys, — так же: вставить строку ключа и сохранить.

4. Проверьте подключение

Bash
ssh -T git@github.com

При первом подключении SSH спросит, доверять ли серверу (The authenticity of host 'github.com' can't be established), и покажет отпечаток его ключа. Сверьте его со списком отпечатков ключей GitHub и ответьте yes. Если всё верно, GitHub ответит:

Текст
Hi ivan! You've successfully authenticated, but GitHub does not provide shell access.

Слова «does not provide shell access» — не ошибка: GitHub не даёт командную строку, только работу с Git. Для GitLab проверка — ssh -T git@gitlab.com.

5. Используйте адрес SSH

Клонируйте по адресу SSH — он начинается с git@:

Bash
git clone git@github.com:ivan/todo.git

Если репозиторий уже склонирован по HTTPS, поменяйте адрес:

Bash
git remote set-url origin git@github.com:ivan/todo.git
git remote -v

Подводные камни