Wie kann man den privaten SSH-Schlüssel angeben, der beim Ausführen von Shell-Befehlen auf Git verwendet werden soll?

Eine eher ungewöhnliche Situation, aber ich möchte einen privaten SSH-Schlüssel angeben, der beim Ausführen eines Shell-Befehls (git) vom lokalen Computer aus verwendet werden soll.

Im Grunde wie folgt:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

Oder noch besser (in Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

Ich habe Beispiele für die Verbindung zu einem entfernten Server mit Net::SSH gesehen, der einen bestimmten privaten Schlüssel verwendet, aber dies ist ein lokaler Befehl. Ist das möglich?

Lösung

So etwas sollte funktionieren (vorgeschlagen von orip):

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

Wenn Sie Subshells bevorzugen, können Sie Folgendes versuchen (obwohl es anfälliger ist):

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git ruft SSH auf, das seinen Agenten über eine Umgebungsvariable findet; dieser wiederum hat den Schlüssel geladen.

Alternativ kann man auch HOME setzen, vorausgesetzt, man ist bereit, ein Verzeichnis einzurichten, das nur ein .ssh-Verzeichnis als HOME enthält; dieses kann entweder eine identity.pub enthalten oder eine Konfigurationsdatei, die IdentityFile setzt.

Kommentare (17)

Inhalt von my_git_ssh_wrapper:

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

Dann können Sie den Schlüssel verwenden, indem Sie Folgendes tun:

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git
Kommentare (5)

Sie könnten die Umgebungsvariable GIT_SSH verwenden. Allerdings müssen Sie ssh und Optionen in ein Shell-Skript verpacken.

Siehe Git-Handbuch: man git in Ihrer Befehlsshell.

Kommentare (0)