Setting a custom path for git private SSH key on linux
-
24-10-2019 - |
Question
I'm trying to setup a git client on linux. I uploaded my private key to the machine, and I understand that I should put it in ~/.ssh, but I don't have access to that folder.
How can I tell git to look for the private key somewhere else?
Solution
One option is to use ssh-agent
and provide a file name to ssh-add
.
For example:
$ ssh-agent /bin/bash
$ ssh-add ~/mykeys/id_rsa
OTHER TIPS
You can achieve that using a ssh config file.
First create a file inside your ~/.ssh
folder named config
, you can use some command like the following
$ nano ~/.ssh/config
Then, the content of the file should have the location of your key based on each host name. for example:
Host github.com
IdentityFile ~/myPublicKeyFolder/myGitHubFile
Host heroku.com
IdentityFile ~/myPublicKeyFolder/myHerokuFile
So, when git tries to access each host it will follow the rules inside this config file based on the git host your trying to reach
I would have said put the file name in ~/.ssh/config
, but you likely would not have access to this file, too.
You can give ssh
the private key to use with the -i keyfile
option.
Now how to say git which options to pass to ssh?
The GitTips page says create a wrapper script and point to it with the GIT_SSH
environment variable.
It looks like you also can use the git configuration core.gitProxy
, but I did not find a good example and some mailing list message suggests it is only for the git:
protocol.
Use ssh-agent
ssh-agent bash -c 'ssh-add /home/me/my_private_key; git clone git@bitbucket.org:uname/test-git-repo.git'
For a project I am working on my app needs to spit out a shell script with all of the git commands to init/commit/push to an external repository. The ~/.ssh/config is off limits so I have my public/private keys in my app directory. I used vhallac's answer. This is what I had to do in my shell script to use my key:
eval `/usr/bin/ssh-agent`
ssh-add /path/to/.ssh/id_rsa
hope this helps someone