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
export GIT_SSH_COMMAND="ssh -i /home/username/.ssh/repo-foobar -o 'IdentitiesOnly yes '"
COMPOSER_HOME="/home/username/" composer install
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.