Git und SSH, welcher Schlüssel wird verwendet?

90

Angenommen, Ihr .sshVerzeichnis enthält 30 Schlüssel (15 private und 15 öffentliche).

Wo in Git kann man überprüfen, welche verwendet wird, um eine Verbindung zu einem bestimmten Remote-Repository herzustellen?

James Raitsev
quelle
10
Wer auch immer für "Schließen" gestimmt hat, diese Frage - steht aus dem gleichen Grund in direktem Zusammenhang mit der Programmierung. Fragen zu GIT sind hier erlaubt
James Raitsev
1
Wohl ... Dies ist wirklich eine Super-User-Frage, das Problem hier ist nicht Git, sondern die Plattform, auf der es läuft. Sie können "in git" nicht auf das Problem überprüfen, da es git egal ist, es bezieht sich nur darauf, wie Sie ssh verwenden und wie es konfiguriert ist. Verwenden Sie ssh-agent, irgendeine Art von Schlüsselverwaltungssystem, welches Betriebssystem verwenden Sie, welche Version usw.?
Arafangion

Antworten:

66

Der folgende Eintrag in der .ssh/configDatei löst das Problem

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

Wo ~/.ssh/whateverist ein Pfad zu Ihrem privaten Schlüssel?

Zusätzlich können Benutzer und Host von abgeholt werden

git push [email protected]:repo_name.git
         ^__ ^_______________
         user host
James Raitsev
quelle
Wenn ich also einen anderen SSH-Schlüssel für einen anderen Host verwenden möchte, würde ich das gleiche nach dem ersten wiederholen? Bezieht sich die Identitätsdatei auf den ersten Host davor?
MikeSchem
ok, ja, es scheint, dass dies der Fall ist cyberciti.biz/faq/…
MikeSchem
64

Wenn Sie ssh im ausführlichen Modus ausführen ssh -v user@host, wird eine große Menge an Debugging-Informationen gedruckt, die auch Details zu den Schlüsseldateien enthalten, die für die Anmeldung versucht werden.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Wenn Sie dies nun mit Schritt 4 auf Gits eigener SSH- Hilfeseite kombinieren , ssh -vT [email protected]können Sie die Antwort erhalten.

Hinweis: Sie können den -iSchalter auch verwenden , um ssh während der Befehlsausführung mitzuteilen, welche Schlüsseldatei verwendet werden soll.

Vajk Hermecz
quelle
1
Sie können auch die Standardfehlerausgabe des Befehls ssh durchsuchen, um die Schlüsseldatei wie ssh -vv user@host 2> >(grep Offering)folgt zu finden: - Dies erleichtert die Arbeit. Die letzte Datei sollte der öffentliche Schlüssel sein. Zum Beispiel:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.
1
githubist nicht dasselbe wie git.
ForeverWintr
9

Sofern nicht auf dem angegeben .ssh/config, wird die standardmäßige private Schlüsseldatei verwendet.

Die Standarddatei ist ~/.ssh/id_rsaoder ~/.ssh/id_dsaoder ~/.ssh/identityabhängig von der Protokollversion.

Rodrigo Flores
quelle
5

Da gitnur eine sshVerbindung verwendet wird, wird der Schlüssel sshverwendet, der für die Verbindung zum Remote-Host verwendet wird. ~/.ssh/configEinzelheiten finden Sie in der Datei. Der hostBlock verwendet die IdentityFileDirektive, um den zu verwendenden privaten Schlüssel anzugeben. Die ssh_config(5)Manpage enthält alle Details.

Sarnold
quelle
Hmm .. die Datei existiert nicht auf meinem System. Sollte es?
James Raitsev
1
@JAM Welches Betriebssystem verwenden Sie? Manchmal ist die Konfigurationsdatei auch um/etc/ssh/ssh_config
Ich bin auf MACOS. Gefunden, /etc/ssh_configwas eine Datei voller kommentierter Einträge zu sein scheint
James Raitsev
@sarnold Du könntest dich ~/.ssh/configselbst erschaffen .
Xdazz
5

Ich würde sagen, am praktischsten für meinen Geschmack wäre:

GIT_SSH_COMMAND='ssh -v' git …

Abhängig von den Umständen kann es natürlich von Vorteil sein, es nur in die aktuelle SHELL-Umgebung zu exportieren, damit Sie es nicht jedes Mal manuell voranstellen müssen. Dann wäre es so:

export GIT_SSH_COMMAND='ssh -v'
git …

- Wie bereits erwähnt man git, gibt es einige Umgebungsvariablen, die sich bei Verwendung von SSH auf den Betrieb von Git auswirken würden. Laut man sshkönnen Sie einige Debugging-Informationen bei der Bereitstellung der -vOption erhalten (nicht nur, sondern lesen Sie auch das Handbuch, wenn Sie neugierig auf mehr sind).

Welcher Schlüssel wird verwendet?

In der Ausgabe würden Sie etwas sehen wie ...

debug1: Offering public key: …

… Welches ist die Antwort auf Ihre Frage.

poige
quelle
1
JA. Dies sollte die akzeptierte Antwort sein. Verwenden Sie:, damit es unter Windows CMD (ugh) funktioniert set GIT_SSH_COMMAND=ssh -v. Dies half mir herauszufinden, dass der ssh-config Inlcude-Path unter Windows ungefähr so ​​aussehen sollte: Include /C/Users/YourUserName.ssh/configUm ssh und damit git zu erstellen, verwenden Sie eine Konfigurationsdatei, die dann beispielsweise einen HOST *Eintrag verwendet, um die Identitätsdatei anzugeben, die git / ssh verwendet.
icyerasor
4

Dies mag ein Super-Edge sein, aber nachdem ssh -vT [email protected]es ausgeführt wurde, zeigte es mir, dass /root/.sshnach den Schlüsseln gesucht wurde. Ich hatte erwartet, dass es mein Home-Verzeichnis überprüft, und dann wurde mir klar, dass ich als root angemeldet war!

Moak
quelle
Diese Technik ist unter anderem die gleiche sshArt der Befragung die richtige Lösung. Vielen Dank.
Eigenfeld
1

Bearbeiten Sie auf dem Remote-Server die Datei sshd_config, ändern Sie LogLevel von INFO in VERBOSE und starten Sie ssh neu.

Jetzt enthält Ihre Protokolldatei den Fingerabdruck des Schlüssels, mit dem jeder Benutzer authentifiziert wurde.

Unter Ubuntu sind diese Dateien:

/etc/ssh/sshd_config
/var/log/auth.log

aber sie können auf einer anderen Distribution unterschiedlich sein. Google einfach nach ihrem Standort (einige verwenden zum Beispiel / var / log / secure).

Seumasmac
quelle