SSH-Konfiguration - gleicher Host, aber unterschiedliche Schlüssel und Benutzernamen


31

Ich habe zwei GitHub-Konten eingerichtet, aber ich kann nicht erreichen, dass SSH-Schlüssel richtig funktionieren. Ich habe verschiedene Configs ausprobiert.


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

Funktioniert für Benutzername1:

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 bei username2's repo:

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

Ich habe es auch git pushmit beiden IdentityFileund UserEinstellungen unter gleichen probiert Host. Die Ausgabe ist die gleiche wie bei der letzten Konfiguration.

Ich denke, Git sucht automatisch nach Host "github.com", weil die Fernbedienung so ist. Es wird gesagt, dass Host alles sein kann, was Sie wollen ( /programming//a/3828682 ). Gibt es eine Möglichkeit, zu ändern, welchen Host von der SSH-Konfiguration aus ein bestimmtes Repo verwenden soll?

Es wäre ideal, wenn ich das nur mit ~ / .ssh / config lösen könnte.

Antworten:


44

Der OpenSSH-Client verwendet nur die HostZeile als Abschnittskennung und alles andere sind Einstellungen. Wenn Sie eine Verbindung herstellen foo@bar.com, sucht SSH nicht nach " User foo". Es wird nur nach " Host bar.com" gesucht .

Mit anderen Worten: Wenn Sie " Host github_username2" in Ihrer SSH-Konfiguration haben, müssen Sie denselben Host in Ihren Git-Fernbedienungen verwenden - github_username2nicht git@github.com.

Dies ist jedoch nicht die Ursache für Authentifizierungsfehler. Im Fall von github.commuss der SSH- Benutzername " git" lauten . GitHub-SSH-Server identifizieren Benutzer nur anhand ihres SSH-Schlüssels.


Eine korrekte SSH-Konfiguration wäre:

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 Konfiguration:

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

Hinweis: Obwohl ich den gitBenutzernamen in meinem Beispiel an beiden Stellen angegeben habe, muss er nur einmal angegeben werden - git@in der Git-URL hat er Vorrang vor der User gitSSH-Konfiguration.


2
In einigen Fällen müssen Sie möglicherweise IdentitiesOnly=yesjeden hostAbschnitt hinzufügen , um sicherzustellen, dass ssh nur die ausgewählte Identitätsdatei auswählt und keine anderen Standardeinstellungen
vornimmt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.