Как настроить аутентификацию для двух отдельных учетных записей 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'\'
Другие вопросы по тегам