Андрей Попов Заметки, переводы, ссылки на ресурсы

Настройка SSH для работы с одним или двумя профилями GitHub

2020-09-26
andpop

Описание настройки 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.


Содержание