Конфигурация SSH - тот же хост, но разные ключи и имена пользователей

31

Я настроил две учетные записи 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", потому что удаленный такой. Говорят, что Хост может быть чем угодно ( /programming//a/3828682 ). Есть ли способ изменить, какой хост из конфига ssh должен использовать конкретное хранилище?

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

USR
источник

Ответы:

44

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

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

Однако это не то, что вызывает ошибки аутентификации. В случае github.com, имя пользователяgit SSH должно быть " " . Серверы GitHub SSH идентифицируют пользователей только по их ключу 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.

grawity
источник
2
В некоторых случаях вам может потребоваться добавить информацию IdentitiesOnly=yesв каждый hostраздел, чтобы убедиться, что ssh выберет только выбранный файл идентификации и не будет использовать по умолчанию / что-либо еще.
TCB13