For a slightly more general guide for using ssh and ssh-based tools from a pipeline (not just for cloning another Bitbucket repository) see this other question:
It is similar to Philip's answer but also covers server key fingerprints and uploading your public key to other types of servers.
There's a few steps required to do this.
First, you need to generate a key-pair to use for Bitbucket.
Generate a new SSH key-pair for use in Bitbucket.
$ ssh-keygen -t rsa -b 4096 -C "
Do not use a passphrase, when prompted.
Once you have generated the key-pair, add the public key to your account:
If you already had an SSH key, and skipped the set up, start reading from here.
Now, we can set up SSH in Bitbucket Pipelines:
First, we will add the SSH key as an environment variable.
As of right now, Pipelines does not support line breaks in the environment variable, so we need to encode the private key first:
$ base64 <path>/<to>/id_rsa | pbcopy # probably path is ~/.ssh/id_rsa
Now create a secured environment variable in Bitbucket Pipelines called PRIVATE_KEY, with the contents of the base64 encoded private key:
Now, create a bitbucket-pipelines.yml with the following content (I can't find the original source of this example sorry, share if you know ):
# You can use a Docker image from Docker Hub or your own container # registry for your build environment. pipelines: default: - step: script: # Modify the commands below to build your repository. - echo $PRIVATE_KEY > ~/.ssh/id_rsa.tmp - base64 -d ~/.ssh/id_rsa.tmp > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - base64 ~/.ssh/id_rsa - git clone firstname.lastname@example.org:<account_name>/<repo_name>.git
You should see that the build successfully cloned your repository.
Q: The clone asks for a passphrase:
A: There are two things you should double check. When you created the SSH key-pair, did you create them without a passphrase? (If there's a passphrase, things get much more complicated than expected). If you did not have a passphrase, double check that the key (the private key) you have stored is base64 encoded.
Maybe this will help... I have configured the SSH key-pair without passphrase but when i tried to clone the repo with the above code i get the the request to enter some passphrase . For me the solution was to add -i to the command that write the key . I dont know why i have this behavior. The encoding was done with version 8.25 and decoded with 8.21.
base64 -d -i ~/.ssh/id_rsa.tmp > ~/.ssh/id_rsa
git clone email@example.com:account_name/repo_name.git
+ git clone firstname.lastname@example.org:account_name/repo_name.git
Cloning into 'repo_name'...
The authenticity of host 'bitbucket.org (220.127.116.11)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?
and can't do anything else
That will work, but it's not very secure (it's essentially bypassing host key checking because the key scan is performed on every build). A better option is to do the key scan just once locally and then include the full host key in your script or add a known_hosts file to your repository. That way your build will fail if the host key changes (which would indicate a potential security issue). You can find more details in step 4 of the following answer: How do I set up ssh public-key authentication so that I can use ssh, sftp or scp from my Bitbucket Pipelines pipeline?