When working with Github, you may need to manage deploy keys to allow automated deployments from external services. Deploy keys are SSH keys that grant read-only or read-write access to a single repository. You can add deploy keys to your repository from the settings page, but what if you need to revoke access for many repositories at once?
Today, there's no direct way to do this from the Github UI, but you can easily accomplish it with the APIs and the GitHub CLI
I have created the following script to achieve this:
if [ -z "$ORG" ]
echo "No organization provided"
REPOS=$(gh repo list $ORG -L 200 --json name --jq '..name')
for repo in $REPOS
echo "Deployment keys for $repo:"
KEYS=$(gh api repos/$ORG/$repo/keys | jq -r '. | [.id] | @tsv')
if [ -z "$KEYS" ]
echo -e '\t No Deployment Key'
for key in $KEYS
gh repo deploy-key delete -R $ORG/$repo $key
You can use it like this:
Let's take a closer look at the script itself. It starts by setting a variable named "
ORG" to the value passed as a parameter when the script is run. The script then uses the
gh CLI to retrieve a list of repositories for the organization and stores them in a variable named "
Next, the script loops through each repository and retrieves a list of deploy keys using the GH API. If there are no deploy keys, the script simply prints a message saying so. Otherwise, the script loops through each key and uses the
gh CLI to delete it using the command
gh repo deploy-key delete.
Overall, the script is a quick and easy way to revoke deploy keys for an entire organization's repositories. By combining the
gh CLI and Github API, you can automate this process and save time and effort.