Several posts around the Internet describe how to use a specific SSH Identity composer packages, but I can never find them when needed.
This is how I use a specific SSH identity file for packages deployed with GitHub via Deploy keys. GitHub allows a deploy key to be used with only a single repository, so if you have multiple repositories, you need a separate SSH key for each.
Create the SSH Key
ssh-keygen -t ed25519 -f ~/.ssh/repo-foobar -N '' -C "foobar-deploy"
Copy the contents of ~/.ssh/repo-foobar.pub
into the “Deploy Key” section of the Repository settings in GitHub.
Now, you can script a deploy, including a composer install
that includes that repository with the command
Use a custom GIT_SSH_COMMAND
during composer install
cd /path/to/codebase
export GIT_SSH_COMMAND="ssh -i /home/username/.ssh/repo-foobar -o 'IdentitiesOnly yes '"
COMPOSER_HOME="/home/username/" composer install
The composer_install
command uses the defined SSH command (instead of just plain ssh
). In doing so, it uses the identity only from the specified key.
Have multiple repos included in your composer.json file that each need a separate identity?
You’ll need to create the SSH key and upload a separate key to GitHub for each repo. However, you can only specify one SSH key to use during the composer install
. While there are more elegant solutions, I’ve found the simplest is just to run composer install
multiple times, one for each package, and change the identity file between each one. The first execution will fail, but will keep the downloaded code in the composer cache. The second one won’t need to re-download the first again since it is already in the cache, and if you with as many packages as you have, it will eventually succeed, having downloaded each of them.