Hoe specificeer je de private SSH-sleutel om te gebruiken bij het uitvoeren van shell commando's op Git?

Een nogal ongebruikelijke situatie misschien, maar ik wil een privé SSH-sleutel specificeren om te gebruiken bij het uitvoeren van een shell (git) commando vanaf de lokale computer.

In principe als volgt:

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

Of nog beter (in Ruby):

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

Ik heb voorbeelden gezien van het verbinden met een server op afstand met Net::SSH die een opgegeven privésleutel gebruikt, maar dit is een lokaal commando. Is het mogelijk?

Oplossing

Zoiets als dit zou moeten werken (voorgesteld door orip):

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

Als u de voorkeur geeft aan subshells, zou u het volgende kunnen proberen (hoewel het kwetsbaarder is):

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

Git zal SSH aanroepen die zijn agent zal vinden op omgevingsvariabele; deze zal, op zijn beurt, de sleutel geladen hebben.

Als alternatief kan het instellen van HOME ook de truc doen, mits je bereid bent om een directory in te stellen die alleen een .ssh directory bevat als HOME; deze kan ofwel een identity.pub bevatten, of een config bestand dat IdentityFile instelt.

Commentaren (17)

Inhoud van my_git_ssh_wrapper:

#!/bin/bash

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

Dan kunt u de sleutel gebruiken door te doen:

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

Je zou de GIT_SSH omgevingsvariabele kunnen gebruiken. Maar je zult ssh en opties in een shell script moeten verpakken.

Zie git handleiding: man git in je commandoregel.

Commentaren (0)