В этой статье рассказывается, как настроить на Windows SSH-протокол для обмена данными с GitHub-репозиторием.
SSH — самый распространенный протокол при работе с Git. В то время как при отправке данных (команда push) на сервер через протокол HTTP приходится вводить имя и пароль (по крайней мере, в первый раз), при работе через SSH-протокол можно настроить аутентификацию с помощью пары SSH-ключей.
Что же это за пара ключей? Один — закрытый ключ, он хранится в вашей локальной папке пользователя C:/users/имя/.ssh/, а другой — открытый ключ, он хранится на сервере GitHub.
Где взять ключ
Ключ (точнее, пару ключей) можно сгенерировать или взять готовый (возможно, он уже есть на вашем компьютере).
Если ключ есть
Чтобы понять, есть ли уже ключи на вашем компьютере, проверьте папку
C:/users/имя/.ssh/
Обычно ключи называются:
- id_rsa.pub – публичный ключ – тот, который надо хранить на сервере GitHub
- id_rsa – приватный ключ
В названии может фигурировать dsa вместо rsa.
Если ключи есть, их можно смело использовать.
Если же ключей нет, их легко сгенерировать.
Как сгенерировать ключ
Генератор ключей поставляется вместе с программой Git for Windows. Чтобы его сгенерировать:
- Откройте Git Bash и наберите (в кавычках ваш email):
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- Будет предложено ввести путь до файла и его файла, при этом сразу предлагается правильное расположение и имя по умолчанию:
C:/users/имя/.ssh/id_rsa
Чтобы его принять, нажмите Enter.
- Далее будет предложено ввести passphrase (пароль). Это дополнительная защита, и если вы ее поставите, то этот пароль придется вводить при каждой отправке данных. Обычно дополнительная защита не требуется. Просто нажмите Enter, чтобы отказаться.
- В заданной папке C:/users/имя/.ssh/ появятся два ключа – публичный и приватный.
Теперь наша задача – загрузить публичный ключ в аккаунт на GitHub.
Загрузка публичного ключа в GitHub-аккаунт
Что касается приватного ключа, он должен оставаться в вашей пользовательской папке. Если вы сгенерировали ключ в другом месте, переложите его в C:/users/имя/.ssh/, иначе ничего не будет работать.
А публичный ключ надо загрузить в GitHub-аккаунт. Для этого:
- Щелкните юзерпик и в открывшемся меню выберите Settings, а затем вкладку SSH и GPG keys. Щелкните New SSH Key
- Придумайте имя ключа и ведите его в первое поле:
- И наконец, откройте свой публичный ключ в текстовом редакторе и скопируйте его содержимое во второе поле.
Проверка
После проделанных действий обмен данными с сервером по SSH-протоколу должен заработать. Чтобы проверить это, попробуем склонировать репозиторий через SSH-протокол в новую папку:
git clone git@github.com:javakitt/example.git
Все должно работать без ввода логина и пароля.
Обратите внимание, что адрес репозитория при обмене по SSH-протоколу и HTTP-протоколу разный. По HTTP-протоколу мы бы клонировали репозиторий так:
https://github.com/javakitt/example
Можно выполнить вышеприведенную команду в отдельной папке и убедиться, что с одним и тем же репозиторием можно одновременно работать по двум протоколам из разных мест.
В общем случае URL выглядят так:
SSH-протокол
git@github.com:USERNAME/REPOSITORY.git
HTTPS-протокол
https://github.com/USERNAME/REPOSITORY.git
Ключи участникам команды
Технически с любого компьютера, на котором лежит ваш приватный ключ, можно отправлять изменения в репозиторий. Но свой приватный ключ никому отдавать не надо, это неправильная стратегия. Потому что ключ служит для аутентификации, и он должен быть у каждого свой.
Лучше будет, если каждый участник сгенерирует ключ вышеописанным способом, и вы его добавите в свой GitHub аккаунт как новый ключ. После этого каждый сможет вносить изменения в ваш репозиторий .
Заключение
Мы рассмотрели, как сгенерировать ключ и загрузить его в свой GitHub аккаунт.
Если все участники команды сгенерируют свои ключи вышеописанными способами, а вы загрузите их в свой аккаунт GitHub, то эти участники смогут вносить изменения ваш репозиторий.
Но существует и другая стратегия обмена изменениями – Forked репозиторий.