There a different ways of achieving this.
you could use the same key for all your git repos.
you could use different keys and specify which one to use when logging into a remote system:
$ ssh -i ~/.ssh/bitbucket-key user@host
$ ssh -i ~/.ssh/gitlab-key user@host
Selects a file from which the identity (private key) for public key authentication is read. The default is ~/.ssh/id_dsa,
~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa. Identity files
may also be specified on a per-host basis in the configuration file.
It is possible to have multiple -i options (and multiple identities
specified in configuration files). If no certificates have been
explicitly specified by the CertificateFile directive, ssh will also
try to load certificate information from the filename obtained by
appending -cert.pub to identity filenames.
I would create a key pair for each git repo, then in Bitbucket you would upload the key to the Bitbucket website. Gitlab and Github work the same way.
Once you uploaded your key to your repository it is enough to
git push without need to specify your key.