Описание настройки SSH для работы с одним или двумя профилями на GitHub без ввода пароля для авторизации.
Работа с одним профилем на GitHub
При выполнении некоторых операций (например, при загрузке изменений из
локального репозитория в репозиторий на GitHub с помощью git push
) требуется
авторизация на GitHub. Процедура авторизации зависит от того механизма
подключения к репозиторию на GitHub:
- По протоколу https. В этом случае для авторизации каждый раз придется вводить логин и пароль.
- По протоколу SSH. В этом случае пароль вводить не нужно, авторизация происходит по ключу SSH.
Конечно, по SSH работать удобнее. Чтобы настроить взаимодействие с GitHub по SSH, нужно сгенерировать на локальной машине закрытый и открытый ключи SSH и зарегистрировать открытый ключ в своем профиле на GitHub.
Генерация SSH-ключа на локальной машине
Для генерации новой пары публичного (открытого) и приватного (закрытого) ключа используется команда ssh-keygen
.
По умолчанию новый ключ предлагается создать в файле ~/.ssh/id_rsa. Если мы будем работать только с одним профилем на GitHub, то имя файла можно оставить по умолчанию. Дополнительный пароль для ключа (passphrase) можно не указывать.
Итак, если оставить предлагаемое по умолчанию имя файла, то в каталоге ~/.ssh/ будут созданы два файла:
- id_rsa – закрытый ключ. Этот файл должен быть только на локальном компьютере, его никуда нельзя передавать.
- id_rsa.pub – открытый ключ. Его содержимое нужно будет сохранить в настройках профиля на GitHub.
Регистрация открытого ключа в профиле на GitHub
Список SSH-ключей, зарегистрированных для доступа к профилю на GitHub, хранятся в разделе SSH and GPC keys настроек профиля. В этот список нужно добавить новую запись:
- Название (поле Title) произвольное.
- В поле Key скопировать содержимое созданного файла с открытым ключом (id_rsa.pub по умолчанию).
После этого обращения к репозиторию по SSH должны проходить без запроса пароля.
Работа с двумя профилями на GitHub
Бывают ситуации, когда необходимо работать с двумя различными профилями на GitHub. Рассмотрим настройку SSH для доступа с одной машины к профилям andpop (основной) и andpop-mrsu (дополнительный).
Настройка SSH на локальной машине
- Доступ к основному профилю andpop настраиваем по предыдущему пункту (открытый ключ в файле id_rsa.pub, закрытый ключ в файле id_rsa.pub).
- Генерируем новую ключевую пару для профиля andpop-mrsu командой
ssh-keygen -t rsa -b 4096 -C “andrvpopov@gmail.com”
В качестве имени файла указываем ~/.ssh/andpop-mrsu.
- Редактируем конфигурационный файл ~/.ssh/config (если такого файла нет, то создаем его), добавляем две записи:
# andpop Github
Host github.com
HostName github.com
User git
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
# andpop-mrsu Github
Host github.com-mrsu
HostName github.com
User git
AddKeysToAgent yes
IdentityFile ~/.ssh/andpop-mrsu
Регистрация открытого ключа в дополнительном профиле на GitHub
Добавляем содержимое открытого ключа ~/.ssh/andpop-mrsu.pub в список зарегистрированных SSH-ключей для профиля andpop-mrsu на GitHub.
Настройка локального Git-репозитория для связи с дополнительным профилем на GitHub
При клонировании репозитория из дополнительного профиля нужно изменять SSH-адрес этого репозитория, вместо github.com указывать github.com-mrsu. Например:
git clone git@github.com-mrsu:andpop-mrsu/test_repo.git .
При этом в файл .git/config добавится раздел с настройками для доступа к этому репозиторию на GitHub:
[remote "origin"]
url = git@github.com-mrsu:andpop-mrsu/402_test.git
fetch = +refs/heads/*:refs/remotes/origin/*
Теперь при пуше в GitHub из этого репозитория будет использоваться дополнительный SSH-ключ для доступа к профилю adnpop-mrsu.