Как настроить аутентификацию для двух отдельных учетных записей GitHub из одного и того же клиента ssh?
Краткая версия:
Есть ли способ настроить автоматическую ssh-аутентификацию на основе открытого ключа с одной учетной записи Linux на две разные учетные записи Github?
У меня есть два аккаунта на Github: рабочий и личный, который я хочу сохранить отдельно.
Я уже настроил автоматическую аутентификацию ssh (используя мой ~/.ssh/id_rsa.pub) в моей рабочей учетной записи Github. Работает нормально.
Когда я пытаюсь добавить тот же ключ ssh в свою личную учетную запись Github, я получаю сообщение об ошибке, что "ключ уже используется".
РЕДАКТИРОВАТЬ: ОК, я думаю, что можно сделать то, что я хочу сделать с помощью подходящих настроек в ~/.ssh/config
, но я еще не понял, что это должно быть. Во-первых, мне не понятно, как указать две разные детали аутентификации (User
, IdentityFile
) для одного хоста (github.com
), и как только я это сделаю, я не вижу, как git знает, какой из двух ключей представить, когда я делаю git push
,
2 ответа
Вам необходимо создать два набора (открытых / закрытых) ключей, по одному для каждой учетной записи.
Вы можете ссылаться на них через конфигурационный файл ssh, как подробно описано в " GitHub: настройка нескольких учетных записей"/
#Account one
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile /c/Users/yourname/.ssh/id_rsa
User git
#Account two
Host ac2.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile /c/Users/yourname/.ssh/id_rsa_ac2
User git
Похоже, GitHub не позволяет использовать один и тот же ключ RSA для двух репозиториев.
В качестве обходного пути вы должны создать отдельные ключи RSA для каждого сайта:
ssh-keygen -t rsa -f rsa_site1
ssh-keygen -t rsa -f rsa_site2
Это сгенерирует закрытые и открытые ключи. Затем добавьте открытые ключи в GitHub для развертывания ключей.
Затем разверните ваши личные ключи в удаленном:
cat rsa_site1 | ssh user@remote "cat > ~/.ssh/rsa_site1 && chmod 600 ~/.ssh/rsa_site1"
cat rsa_site2 | ssh user@remote "cat > ~/.ssh/rsa_site2 && chmod 600 ~/.ssh/rsa_site2"
И чтобы получить ваш личный репозиторий на сервере, вы можете использовать что-то вроде:
ssh user@remote 'ssh-agent sh -c '\''cd /webroot/site1 && ssh-add ~/.ssh/rsa_site1 && git fetch git@github.com:priv/site1.git'\'
ssh user@remote 'ssh-agent sh -c '\''cd /webroot/site2 && ssh-add ~/.ssh/rsa_site2 && git fetch git@github.com:priv/site2.git'\'