Как добавить SSH-ключ для GitHub
Коротко: создайте ключ, скопируйте его открытую часть в настройки учётной записи на сайте и проверьте вход. Команды одинаковы в Git Bash (Windows), Linux и macOS.
1. Создайте ключ
ssh-keygen -t ed25519 -C "ivan@example.com"-C — подпись ключа, обычно почта; на работу она не влияет. На вопрос, куда сохранить, нажмите Enter — ключ ляжет в ~/.ssh/id_ed25519. Затем программа предложит задать фразу-пароль: она защищает ключ, если файл кто-то скопирует. Лучше задать.
Получится два файла:
~/.ssh/id_ed25519— закрытый ключ. Он остаётся только у вас, его никому не отправляют;~/.ssh/id_ed25519.pub— открытый ключ, его и добавляют на сайт.
В Windows папка ~/.ssh — это C:\Users\<имя>\.ssh (вместо <имя> — имя вашего пользователя Windows).
Закрытый ключ (файл без .pub) — как пароль ко всем репозиториям, куда он добавлен. Не отправляйте его в чат, не кладите в репозиторий и в облачные папки общего доступа. Если он попал к чужим — удалите ключ в настройках сайта и создайте новый.
2. Скопируйте открытый ключ
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. Проверьте подключение
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@:
git clone git@github.com:ivan/todo.gitЕсли репозиторий уже склонирован по HTTPS, поменяйте адрес:
git remote set-url origin git@github.com:ivan/todo.git
git remote -vПодводные камни
- Пользователь в адресе — всегда
git, а не имя вашей учётной записи:git@github.com:…. - Не запускайте
gitиsshчерезsudo: тогда ищется ключ пользователя root, а не ваш. - Ключ с другим именем файла SSH сам не найдёт — укажите его в
~/.ssh/config, как в справке Permission denied (publickey). - Один ключ можно добавить в несколько сервисов, но GitHub не примет один и тот же ключ во вторую учётную запись: для неё нужен отдельный ключ.