24

Я настроил две учетные записи GitHub, но я не могу заставить ssh-ключи работать правильно. Я пробовал разные конфиги.


Host github_username1
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github_username2
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Работает для username1:

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push в репозитории username2:

ERROR: Permission to username2/repo.git denied to username1.
fatal: The remote end hung up unexpectedly

Я также попробовал git push с настройками IdentityFile и User под тем же Host . Вывод такой же, как с последним конфигом.

Я думаю, что git автоматически ищет хост "github.com", потому что удаленный такой. Говорят, что хост может быть чем угодно (https://stackoverflow.com/a/3828682). Есть ли способ изменить, какой хост из конфигурации ssh должен использовать конкретное хранилище?

Было бы идеально, если бы я мог решить эту проблему только из ~/.ssh/config.

1 ответ1

35

Клиент OpenSSH использует только строку Host в качестве идентификатора раздела, а все остальное - настройки. Если вы подключитесь к foo@bar.com , SSH не будет искать " User foo "; он будет искать только « Host bar.com ».

Другими словами: если у вас есть « Host github_username2 » в вашей конфигурации SSH, то вы должны использовать тот же хост в ваших пультах Git - github_username2 , а не git@github.com .

Однако это не то, что вызывает ошибки аутентификации. В случае github.com , имя пользователя SSH должно быть « git ». SSH-серверы GitHub идентифицируют пользователей только по их SSH-ключу.


Правильная конфигурация SSH будет:

Host github_username1
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_1
Host github_username2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_2

Конфигурация Git:

[remote "origin"]
    url = git@github_username1:username2/repo.git

Примечание: Несмотря на то, что я указал имя пользователя git в обоих местах в моем примере, его нужно указывать только один раз - git@ в Git URL будет иметь приоритет над User git в конфигурации SSH.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .