SSH key setup for ssh and git
For me, ssh gets used daily, from logging to remove servers and virtual machines to pushing and pulling code with [[git]]. To make this process a bit better you can set up ssh key pairs. This provides better security and for your main production servers and passwordless auth for your git servers and any other lower priority server.
My main workflow is to have two ssh key pairs. One with a passphrase and one without. Then I use the one with the passphrase for high security mainly just production servers. And the one without for git and automation pipelines with Jenkins CI.
Now let's get into how I set all this up.
Generating your key pairs
For generating my keys I use ssh-keygen
and create the keys with the following commands.
ssh-keygen -t rsa -C "key-name" -b 4096
ssh-keygen -t rsa -C "key-name-no-passphrase" -b 4096
The first one I put in a passphrase and use as my main key. The second I leave the passphrase blank and change the file name to ~/.ssh/id_rsa_no_paraphrase
. I will explain how the two keys get configured below.
Adding the keys
Now that we have some keys we can get them on to our servers. For the production keys with the passphrases, you may need your system admin, however, git you can do yourself by going to your profile in git add configuring your account. I use gitlab and you can view there website for more information on using ssh with gitlab. If you use another git server you can refer to there docs on how to add your keys.
SSH Config
Because we have set up two keys. Shh will use the id_rsa
by default. So to use the key without a passphrase you need to configure ssh with a ~/.ssh/config
file. The config below will tell ssh that for gitlab.com to use the no passphrase key.
Host gitlab.com
HostName gitlab.com
IdentityFile ~/.ssh/id_rsa_no_paraphrase
The ssh config file is a really powerful tool if you're using a lot of remote machines. You can configure any parameter of the ssh command like Port
and User
. This allows you to set up ssh alias host and just run ssh remove.server
for complex ssh tunnelling commands. You can read more on the ssh config by running man ssh_config
SSH Agent
The final piece of the puzzle is ssh-agent
. This allows us to securely store our passphrase so we don't have to keep putting it in. This is super handy for build scripts where you are running multiple commands on a server via ssh. Before you start your script add your key to the agent ssh-add ~/.ssh/id_rsa
this will ask you to put in your passphrase. Once you do you can use that ssh key like it has no passphrase. Once you are done running your scripts you can run ssh-add -d ~/.ssh/id_rsd
to remove that identity from the agent, or you can run ssh-add -D
to remove all identities from the agent. Then you are back to putting in your passphrase.