Поиск по сайту:

Как переключить репозиторий Github на аутентификацию SSH


Github предоставляет два способа аутентификации в вашем репозитории — через HTTPS с паролем и через SSH с использованием закрытых ключей. Хотя оба работают нормально, если вы хотите переключиться, вам нужно настроить локальное репо для использования новых учетных данных.

Переход на SSH-аутентификацию

Github по умолчанию использует аутентификацию HTTPS, используя пароль для вашей учетной записи Github. Всякий раз, когда вы собираетесь клонировать репозиторий, вам придется вручную выбирать «SSH» в качестве опции для URL-адреса клонирования, если вы предпочитаете его использовать.

Хотя SSH часто лучше всего подходит для аутентификации подключений к серверам Linux, Github рекомендует HTTPS, потому что это легко для людей и вызывает меньше путаницы. Однако это хуже для автоматизации, технически не так безопасно, как ключ RSA, и может вызывать раздражение при вводе его каждый раз, даже при кэшировании учетных данных.

Переключиться довольно просто — вам нужно будет создать новый ключ SSH, если у вас его нет, добавить его в свою учетную запись, а затем переключить локальное репо на новую конечную точку, если вы уже клонировали.

Во-первых, проверьте, есть ли у вас уже ключ SSH. Ваш вариант по умолчанию обычно хранится здесь в Linux/macOS:

cat ~/.ssh/id_rsa.pub

В Windows это зависит от используемой вами программы. Иногда он хранится в %HOMEDRIVE%%HOMEPATH%.ssh, но может отличаться в зависимости от того, для чего вы используете Git. В большинстве случаев мы рекомендуем использовать подсистему Windows для Linux (WSL), которая работает как виртуальная машина и хранит ключ в традиционной среде Linux.

Если у вас его нет, вы можете создать его с помощью ssh-keygen:

ssh-keygen -t rsa -f ~/.ssh/id_rsa

Получив ключ, перейдите в пользовательские настройки Github в разделе «Ключи SSH и GPG» и вставьте содержимое id_rsa.pub в новый ключ.

После этого вы должны пройти аутентификацию, если Git настроен на использование этого ключа.

Замена репозитория HTTPS на аутентификацию SSH

Если вы клонировали Github с помощью HTTPS, ваш репозиторий уже будет связан с Github с помощью этого удаленного URL-адреса. Чтобы исправить это, вам нужно удалить удаленный HTTPS, обычно называемый origin, и добавить его обратно с правильным URI git@github, который использует SSH.

git remote rm origin
git remote add origin git@github.com:user/repo.git

Затем нажмите на источник как обычно:

git fetch origin
git push --set-upstream origin/master

Если вы клонируете новый репозиторий, вам просто нужно убедиться, что в будущем он настроен на «SSH» и что URI настроен как git@github.com.

Использование другого ключа SSH

Если у вас есть несколько ключей SSH, которые вам нужно использовать, все может усложниться, поэтому Github рекомендует пароли новичкам. Скажем, вы клонируете репозиторий на свой рабочий стол, но затем хотите работать с ноутбука. Вам нужно будет либо добавить новый ключ в свою учетную запись Github, либо перенести ключ на ноутбук.

Если вы можете, вы должны добавить новый ключ. Github поддерживает несколько из них по какой-то причине, и вы можете дать им разные имена, чтобы упорядочить их. Однако иногда у вас будет только один ключ, и вам нужно будет что-то исправить на стороне клиента.

Если вы просто хотите использовать тот же ключ, можно перенести id_rsa и id_rsa.pub на новый компьютер. Но если у этой машины уже есть собственный ключ SSH, вам нужно будет использовать несколько ключей.

Вы можете сделать это, отредактировав файл конфигурации хостов SSH:

nano ~/.ssh/config

Добавьте два блока с разными именами. В этом случае это настройка разных ключей для личной учетной записи и учетной записи компании.

Host personal
  Hostname github.com
  IdentityFile ~/.ssh/githubpersonal
  IdentitiesOnly yes

Host work
  Hostname github.com
  IdentityFile ~/.ssh/githubwork
  IdentitiesOnly yes

Вам понадобятся два ключа с именами githubpersonal.pub  и githubwork.pub или любые другие имена, которые вы им решите дать. Наконец, вам нужно снова удалить пульт и добавить его обратно, указав имя блока в файле конфигурации хоста (которое может не совпадать с именем ключа):

git remote rm origin
git remote add origin git@personal:username/repository.git

В этой команде «личное» заменяет имя хоста github.com в URL-адресе. Причина, по которой это необходимо, заключается в том, что конфигурация SSH по умолчанию выбирает ключ на основе имени хоста, который в обоих блоках personal и work — это просто github.com. Вы должны указать вручную, чтобы Git мог выбрать правильный.