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.

usr
quelle

Antworten:

44

Der OpenSSH-Client verwendet nur die HostZeile als Abschnittskennung und alles andere sind Einstellungen. Wenn Sie eine Verbindung herstellen [email protected], 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 [email protected].

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.

Grawity
quelle
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