A CLI tool for managing multiple GitHub Deploy Keys on a single machine. Automates SSH key creation and ~/.ssh/config management.
- Generate Ed25519 SSH keys for each repository
- Automatically configure
~/.ssh/configwith unique host aliases - Support for multiple deploy keys on a single machine
- Simple commands:
add,list,show,remove,update - Self-update capability
# Linux (amd64)
wget https://github.com/ygncode/gdk/releases/latest/download/gdk-linux-amd64 -O gdk
chmod +x gdk
sudo mv gdk /usr/local/bin/
# Linux (arm64)
wget https://github.com/ygncode/gdk/releases/latest/download/gdk-linux-arm64 -O gdk
chmod +x gdk
sudo mv gdk /usr/local/bin/
# macOS (Intel)
wget https://github.com/ygncode/gdk/releases/latest/download/gdk-darwin-amd64 -O gdk
chmod +x gdk
sudo mv gdk /usr/local/bin/
# macOS (Apple Silicon)
wget https://github.com/ygncode/gdk/releases/latest/download/gdk-darwin-arm64 -O gdk
chmod +x gdk
sudo mv gdk /usr/local/bin/# Linux (amd64)
curl -L https://github.com/ygncode/gdk/releases/latest/download/gdk-linux-amd64 -o gdk
chmod +x gdk
sudo mv gdk /usr/local/bin/
# macOS (Apple Silicon)
curl -L https://github.com/ygncode/gdk/releases/latest/download/gdk-darwin-arm64 -o gdk
chmod +x gdk
sudo mv gdk /usr/local/bin/go install github.com/ygncode/gdk@latestgit clone https://github.com/ygncode/gdk.git
cd gdk
go build -o gdk .
sudo mv gdk /usr/local/bin/gdk add myorg/private-repoOutput:
Deploy key created successfully!
Public key (add this to GitHub deploy keys):
==================================================
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... gdk:myorg/private-repo
==================================================
Clone command:
git clone git@github.com-myorg-private-repo:myorg/private-repo.git
For existing repos, update remote:
git remote set-url origin git@github.com-myorg-private-repo:myorg/private-repo.git
Then add the public key to your GitHub repository:
- Go to your repository on GitHub
- Navigate to Settings > Deploy keys > Add deploy key
- Paste the public key and save
gdk listOutput:
REPOSITORY HOST ALIAS CREATED
---------- ---------- -------
myorg/private-repo github.com-myorg-private-repo 2025-01-15
myorg/another-repo github.com-myorg-another-repo 2025-01-15
JSON output:
gdk list --format jsongdk remove myorg/private-repoSkip confirmation:
gdk remove myorg/private-repo --yesgdk add myorg/private-repo --forcegdk show myorg/private-repoOutput:
Repository: myorg/private-repo
Host Alias: github.com-myorg-private-repo
Created: 2025-01-15 10:30:00
SSH Keys:
Private Key: /home/user/.ssh/deploy-keys/myorg-private-repo/id_ed25519
Public Key: /home/user/.ssh/deploy-keys/myorg-private-repo/id_ed25519.pub
Public Key Content:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... gdk:myorg/private-repo
Git Commands:
Clone: git clone git@github.com-myorg-private-repo:myorg/private-repo.git
Set Remote: git remote set-url origin git@github.com-myorg-private-repo:myorg/private-repo.git
Update to the latest version:
gdk updateCheck for updates without installing:
gdk update --check- Key Generation: Creates an Ed25519 SSH key pair for each repository
- Key Storage: Saves keys in
~/.ssh/deploy-keys/<owner>-<repo>/ - SSH Config: Adds a host alias to
~/.ssh/config:
# gdk:myorg/private-repo - Added by gdk on 2025-01-15
Host github.com-myorg-private-repo
HostName github.com
User git
IdentityFile ~/.ssh/deploy-keys/myorg-private-repo/id_ed25519
IdentitiesOnly yes
- Clone URL: Use the host alias in your git commands:
git clone git@github.com-myorg-private-repo:myorg/private-repo.git~/.ssh/
├── config # SSH config (modified by gdk)
└── deploy-keys/ # Created by gdk
├── .gdk-metadata.json # Tracks all managed keys
└── myorg-private-repo/
├── id_ed25519 # Private key (0600)
└── id_ed25519.pub # Public key (0644)
This project uses GitHub Actions for CI/CD:
- CI: Runs tests on every push to
masterand on pull requests - Release: Builds binaries for Linux, macOS, and Windows when a tag is pushed
git tag v1.0.0
git push origin v1.0.0This triggers the release workflow which:
- Runs all tests
- Builds binaries for all platforms
- Creates a GitHub release with downloadable binaries
- Go 1.21 or later
go build -o gdk .go test ./... -vgo test ./... -coverMIT License