Fixing 'Enter passphrase for /dev/fd/63' in a Gitlab CI job

gitlab-stacked_wm_no_bg.pngIf you're a Gitlab user you're probably hoping to use Gitlab CI to automate builds and deployments. You probably want to deploy something using rsync, using an SSH key for security. Unfortunately (in my opinion) the official Gitlab documentation is confusing. While the Gitlab team does provide example .gitlab-ci.yml files that are supposed to work, the actual specifics of what to do are sketchy, and I found myself puzzling over a curious error message: "Enter passphrase for /dev/fd/63" ... WTF?

The official example for using an SSH key in a .gitlab-ci.yml file is here:- https://gitlab.com/gitlab-examples/ssh-private-key/blob/master/.gitlab-c...

The instructions are to ensure ssh-agent is installed, then to run

eval $(ssh-agent -s)
ssh-add <(echo "$SSH_PRIVATE_KEY")

The "Enter passphrase for /dev/fd/63" message occurred right after that last command. The message is cryptic, however the ssh-add command for some reason thinks it must ask for a passphrase. For example, is it an ssh key which requires a secondary password?

What we have to do is revisit the process of attaching an SSH key to a Gitlab CI configuration.

The first step is to generate an SSH key that you'll use for this Gitlab CI job. On your laptop you do have OpenSSH tools installed, and have access to the ssh-keygen command, right?

Simply run:

$ ssh-keygen -f ~/Downloads/hmp.key

Just hit return for all the prompts. Give whatever filename you wish - that was simply the one I used. It generates the private key in the named file, then generates a second file containing the public key. In my case that file name was /Users/david/Downloads/hmp.key.pub.

It's important that this ssh key not have a passphrase associated with it. That's why it's important to just hit return for all the prompts. It's important that for this key, that SSH tools not prompt for a passphrase.

In Gitlab, go to the Variables section of the project configuration. Add a new Variable, named SSH_PRIVATE_KEY, whose contents is the text in the private key file just generated.

Then, on any server this Gitlab CI job needs to access, add the public key. For example, add it to ~/.ssh/authorized_keys on the server.

Once you've done these steps, the "ssh-add" shown above will execute properly.