I want to connect to a server via SSH with a public key when GitLab pipeline succeeds.
As I see, I need to generate a key with ssh-keygen on GitLab side and add it to server where I want to connect.
I can generate a key during the pipeline but as the public key is not added to the target server, it makes no sense.
I suppose it's a common scenario to connect from a CI build to a remote SSH with a key.
How can I make it work?
Log into GitLab and click on your account preferences. Click the SSH Keys link and paste the copied value into the text field. Set an expiration date, and then click the blue button to persistently add the GitLab SSH key. Configure GitLab SSH keys under your account preferences.
You can run ssh-keygen from wherever you want as long as you use the appropriate keys on the appropriate server.
Here is what you need:
SSH_PRIVATE_KEY
)~/.ssh/authorized_keys
fileIn order to do that last step, just add the following to your .gitlab-ci.yml
in the script or before_script section of the job of interest:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
Then do your SSH connections and voilà !
EDIT: I couldn't remember where I had found this info the first time but here it is : https://docs.gitlab.com/ee/ci/ssh_keys/README.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With