Search code examples
gitbashshellssh

How to specify the private SSH-key to use when executing shell command on Git?


A rather unusual situation perhaps, but I want to specify a private SSH-key to use when executing a shell (git) command from the local computer.

Basically like this:

git clone [email protected]:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

Or even better (in Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone [email protected]:TheUser/TheProject.git")
end

I have seen examples of connecting to a remote server with Net::SSH that uses a specified private key, but this is a local command. Is it possible?


Solution

  • Something like this should work (suggested by orip):

    ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone [email protected]:user/project.git'
    

    if you prefer subshells, you could try the following (though it is more fragile):

    ssh-agent $(ssh-add /somewhere/yourkey; git clone [email protected]:user/project.git)
    

    Git will invoke SSH which will find its agent by environment variable; this will, in turn, have the key loaded.

    Alternatively, setting HOME may also do the trick, provided you are willing to setup a directory that contains only a .ssh directory as HOME; this may either contain an identity.pub, or a config file setting IdentityFile.