Конфігурація 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

Працює для імені користувача1:

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 у репортажі ім'я користувача2:

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 config повинен використовувати конкретний репо?

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

Відповіді:


44

Клієнт 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" . Сервери 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.


2
У деяких випадках вам може знадобитися додавати IdentitiesOnly=yesв кожен hostрозділ, щоб переконатися, що ssh вибере лише вибраний файл ідентифікації та не
замовчує
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.