I know. This post has been written many times. However, this one has my own flavor. This post assumes that the reader knows how to use the ssh protocol and to create ssh keys. If in doubt, visit the github instructions here.
The ssh protocol uses the ssh-agent program defined as follows:
ssh-agent is a program to hold private keys used for public key authentication (RSA, DSA, ECDSA, ED25519). The idea is that ssh-agent is started in the beginning of an X-session or a login session, and all other windows or programs are started as clients to the ssh-agent program. Through use of environment variables the agent can be located and automatically used for authentication when logging in to other machines using ssh.
When there is only one ssh-key, the ssh-agent loads it automatically it seems (I need to investigate further as I seem to be running polkit-gnome-authentication-agent instead of ssh-agent).
Start by identifying how many keys you need, depending on the sites you usually connect to. In my case that is gtihub, heroku, bitbucket, computers in my local network, and a remote computer. Remove the current keys located in the ~/.ssh
directory, which names have patterns like id_{rsa,dsa}*
. As I tend to be paranoiac, I put them in a directory called original in case I needed to do a rollback.
Github
The next step is to create the key, by using the command:
ssh-keygen -f ~/.ssh/id_rsa.github -C "myemail@example.com"
I tend to omit the paraphrase by just typing enter when prompted.
This created two files: id_rsa.github
, id_rsa.github.pub
. The latter is the actual key to copy on the github account settings part.
The next to steps are new:
First add the key to ssh-agent:
ssh-add ~/.ssh/id_rsa.github
Second add the specification of the site to the ~/.ssh/config
file:
Host github
Hostname github.com
User bluciam
IdentityFile ~/.ssh/id_rsa.github
You can check if the connection is working by issuing the command
ssh -T git@github.com
which, if successful, will respond with
Hi bluciam! You’ve successfully authenticated, but GitHub does not provide shell access.
bluciam is my github username. To get all the information on the handshake, add a -v:
ssh -Tv git@github.com
Adding the other ssh keys follows the same process, obviously replacing with the correct names and hosts.
Heroku
Heroku has also a page with full instructions here. There are two commands I would like to highligh:
1. To check if the connection is working issue the command
ssh -v git@heroku.com
2. To add the key without logging into the site:
heroku keys:add
Local machines
For my local machines, the added local instead of the name of the server. The adding to the ssh-agent is done once
ssh-add ~/.ssh/id_rsa.local
but there must be an entry for each machine in the config file.
And that is all!
Further reading: https://gist.github.com/jexchan/2351996/