514 Stimmen

Angabe eines SSH-Schlüssels für Git-Push für eine bestimmte Domäne

Ich habe den folgenden Anwendungsfall: Ich möchte in der Lage sein, Push zu git@git.company.com:gitolite-admin unter Verwendung des privaten Schlüssels des Benutzers gitolite-admin , während ich auf git@git.company.com:some_repo mit "meinem eigenen" privaten Schlüssel. AFAIK kann ich das Problem nicht lösen, indem ich ~/.ssh/config , da der Benutzername und der Servername in beiden Fällen identisch sind. Da ich meistens meinen eigenen privaten Schlüssel verwende, habe ich diesen in ~/.ssh/config para git@git.company.com . Kennt jemand eine Möglichkeit, den Schlüssel zu überschreiben, der für eine einzelne Taste verwendet wird? git Anrufung?

(Nebenbei bemerkt: gitolite unterscheidet anhand des Schlüssels, wer den Push ausführt, so dass es im Hinblick auf Zugriff, Besitz und Prüfung kein Problem ist, dass die Zeichenkette user@server für verschiedene Benutzer identisch ist).

13voto

Châu Hồng Lĩnh Punkte 1960

Bei Unix-basierten Systemen (Linux, BSD, Mac OS X) wird die Standardidentität im Verzeichnis $HOME/.ssh , in 2 Dateien: private key: $HOME/.ssh/id_rsa public key: $HOME/.ssh/id_rsa.pub Wenn Sie ssh ohne Option -i verwendet es den standardmäßigen privaten Schlüssel zur Authentifizierung beim entfernten System.

Wenn Sie einen anderen privaten Schlüssel haben, den Sie verwenden möchten, zum Beispiel $HOME/.ssh/deploy_key müssen Sie verwenden ssh -i ~/.ssh/deploy_key ...

Das ist ärgerlich. Sie können die folgenden Zeilen in Ihr $HOME/.bash_profile : ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa

Jedes Mal, wenn Sie also ssh ou git ou scp (grundsätzlich ssh auch), müssen Sie nicht die Option -i mehr.

Sie können in der Datei beliebig viele Schlüssel hinzufügen $HOME/.bash_profile .

10voto

rabexc Punkte 571

Eine andere Alternative ist die Verwendung von ssh-ident, um Ihre ssh-Identitäten zu verwalten .

Es lädt und verwendet automatisch verschiedene Schlüssel basierend auf dem aktuellen Arbeitsverzeichnis, den ssh-Optionen und so weiter... was bedeutet, dass Sie leicht ein Arbeitsverzeichnis und ein privates Verzeichnis haben können, die transparent unterschiedliche Schlüssel und Identitäten mit ssh verwenden.

8voto

user1738546 Punkte 491

Ich verwende Git Bash unter Win7. Das Folgende hat bei mir funktioniert.

Erstellen Sie eine Konfigurationsdatei unter ~/.ssh/config oder c:/users/[Ihr_Benutzername]/.ssh/config. Geben Sie in die Datei ein:

Host your_host.com
     IdentityFile [absolute_path_to_your_.ssh]\id_rsa

Ich denke, der Host muss eine URL sein und nicht nur ein "Name" oder eine Bezeichnung für Ihren Host. Zum Beispiel,

Host github.com
     IdentityFile c:/users/[user_name]/.ssh/id_rsa

Der Pfad kann auch im Format /c/users/[user_name]/.... angegeben werden

Auch die von Giordano Scalzo vorgeschlagene Lösung ist großartig. https://stackoverflow.com/a/9149518/1738546

6voto

Mansour Punkte 1694

Wie schon jemand anderes erwähnt hat, core.sshCommand config kann verwendet werden, um SSH-Schlüssel und andere Parameter zu überschreiben.

Hier ist ein Beispiel, bei dem Sie einen alternativen Schlüssel mit dem Namen ~/.ssh/workrsa und wollen es für alle Repositories verwenden, die unter ~/work .

  1. Erstellen Sie eine neue .gitconfig ablegen unter ~/work :

    [core] sshCommand = "ssh -i ~/.ssh/workrsa"

  2. In Ihrer globalen Git-Konfiguration ~/.gitconfig , hinzufügen:

    [includeIf "gitdir:~/work/"] path = ~/work/.gitconfig

4voto

Andrew Murphy Punkte 1211

Wenn Sie die Git-Version von ssh unter Windows verwenden, sieht die Zeile der Identitätsdatei in der ssh-Konfiguration wie folgt aus

IdentityFile /c/Users/Whoever/.ssh/id_rsa.alice

donde /c ist für c:

Um das zu überprüfen, führen Sie in der Bash von Git aus

cd ~/.ssh
pwd

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X