(This is currently in pre-release stage, contributions by testing, reporting and bug-fixing are much appreciated)
╔═══════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ ███████╗███████╗██╗ ██╗ ║
║ ██╔════╝ ██╗ ██╗ ██╔════╝██╔════╝██║ ██║ ║
║ ██║ ███╗══╝████║███████╗███████╗███████║ ║
║ ██║ ██║██║ ██║ ╚════██║╚════██║██╔══██║ ║
║ ██████╔╝██║ ██║ ███████║███████║██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝v0.1.0-Oz ║
║ <-POSIX Compliant-> ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
Manage Multiple SSH Git and GitHub Account Sessions With Ease!
USAGE:
gitssh <command> [subcommand] [options]
SETUP & INITIALIZATION:
init Initialize GitSSH configuration
onboard Interactive first-time setup wizard
validate Validate system configuration
USER MANAGEMENT:
user add Add new user account
user remove <user> Remove user account
user list List all configured users
user switch <user> Switch to user globally
user status Show current user status
SESSION MANAGEMENT:
session set Set user for current repository
session show Show current session status
session clear Clear session data
session forget Remove persistent config for repo
session list List all session repositories
SSH MANAGEMENT:
ssh status Show SSH configuration status
ssh doctor Diagnose SSH connection issues
ssh repair Fix common SSH problems
ssh test <host> Test SSH connection
SETUP WIZARDS:
setup github Setup GitHub SSH authentication
setup gitlab Setup GitLab SSH authentication
REPOSITORY OPERATIONS:
clone <url> Enhanced git clone with auto-setup
status Enhanced git status with user info
info Show detailed repository information
commit [opts] Enhanced git commit with verification
push [opts] Enhanced git push with verification
REMOTE MANAGEMENT:
remote convert Convert HTTPS remote to SSH
remote add <name> <url> Add remote with SSH conversion
remote check Check remote configuration
remote list List all remotes with details
CONFIGURATION:
config show Show current configuration
config reset Reset configuration to defaults
config backup Backup configuration files
config restore <path> Restore from backup
INSTALLATION/UNINSTALLATION/UPDATE MANAGEMENT:
gitssh reinstall Reinstall GitSSH system
gitssh uninstall Completely remove GitSSH
gitssh update Update to latest version
gitssh verify Verify installation integrity
gitssh diagnose Run installation diagnostics
INFORMATION:
help [command] Show help (general or command-specific)
version Show version information
EXAMPLES:
gitssh onboard # First-time setup
gitssh user add # Add new user
gitssh user switch work # Switch to work identity
gitssh session set # Configure current repo
gitssh clone git@github.com:user/repo.git
gitssh remote convert # Convert HTTPS to SSH
gitssh ssh status # Check SSH setup
A small tool to manage multiple Git accounts (GitHub, GitLab etc.) with SSH — without losing your mind.
If you’ve ever had to juggle a personal GitHub, a work GitHub, maybe a client’s GitLab, and even a random Bitbucket repo — you already know the pain:
- SSH keys get mixed up → wrong key, wrong account, failed authentication.
- Git configs change constantly →
user.nameanduser.emailnever stay correct. - HTTPS is annoying → constantly typing passwords or PATs.
- Identity confusion → commits end up under the wrong user.
- Manual SSH config edits → one mistake, and nothing works.
GitSSH makes all of that simpler.
Instead of constantly adding/removing keys, tweaking configs, and hoping for the best, GitSSH automates it.
The old way (annoying):
ssh-add ~/.ssh/id_rsa_work
git config user.name "Work Name"
git config user.email "work@company.com"
git clone git@github.com-work:company/project.gitWith GitSSH (cleaner):
gitssh switch work
gitssh clone https://github.com/company/project.git
cd project
gitssh commit -m "fix"GitSSH keeps track of which account is active, sets the right SSH key, updates your Git config, and makes sure you’re committing/pushing as the correct user.
- No more SSH key guessing — GitSSH manages them for you.
- Correct identity every time — no accidental commits under the wrong email.
- Works with GitHub, GitLab, Bitbucket, and custom servers.
- Remembers settings across sessions and projects.
- Switch accounts with a single command.
- Converts HTTPS clone URLs to SSH automatically.
curl -fsSL https://raw.githubusercontent.com/gitssh-cli/gitssh/refs/heads/main/install-gitssh | shgit clone https://github.com/gitssh-cli/gitssh.git
cd gitssh
chmod +x install
./installThe installer supports:
./install install # Install (default)
./install update # Update GitSSH
./install uninstall # Remove everything
./install verify # Check installation
./install diagnose # Run diagnosticsgitssh onboardor
gitssh init
gitssh user addgitssh switch github-work
gitssh clone https://github.com/company/project.gitcd personal-project
gitssh session set github-personalgitssh switch <user>→ switch global accountgitssh user add→ add a new user (GitHub/GitLab/etc.)gitssh session set <user>→ set account just for current repogitssh remote convert→ change HTTPS remotes to SSHgitssh ssh doctor→ debug SSH issuesgitssh commit/gitssh push→ safer versions of Git commands
Account management:
gitssh user add # Add new account
gitssh user list # Show all accounts
gitssh switch <user> # Switch globally
gitssh session set # Set for current repo onlyWorking with repos:
gitssh clone <url> # Enhanced clone with auto-setup
gitssh remote convert # Convert HTTPS remotes to SSH
gitssh status # Git status + user info
gitssh commit # Commit with identity verificationTroubleshooting:
gitssh ssh doctor # Diagnose SSH problems
gitssh ssh status # Check SSH setup
gitssh validate # Verify installationThere's more (gitssh help shows everything), but these cover most daily use.
GitSSH uses simple JSON files you can read and edit:
~/.gitssh-users.json- your accounts and SSH keys~/.gitssh-sessions.json- per-repo user mappings
Example user config:
{
"users": {
"github-personal": {
"name": "John Doe",
"email": "john@example.com",
"ssh_key": "~/.ssh/github_personal_id_ed25519",
"host": "github.com"
},
"github-work": {
"name": "John Doe",
"email": "john.doe@company.com",
"ssh_key": "~/.ssh/github_work_id_ed25519",
"host": "github.com"
}
},
"default_user": "github-personal"
}# Add accounts
gitssh user add # Follow prompts for 'github-personal'
gitssh user add # Follow prompts for 'github-work'
# Switch contexts
gitssh switch github-work
gitssh clone git@github.com:company/project.git
gitssh switch github-personal
gitssh clone git@github.com:myuser/personal-project.git# Set specific user for this repo
cd work-project
gitssh session set github-work
cd personal-project
gitssh session set github-personal
# GitSSH remembers these settings# Convert HTTPS to SSH
cd existing-repo
gitssh remote convert
# Check what's configured
gitssh info
gitssh ssh statusGitSSH installs as a modular system:
~/.local/bin/gitssh-libs/ # Main installation
├── gitssh # CLI dispatcher
├── install # Installer
└── modules/ # Core functionality
├── gitssh-utils.sh # Utilities
├── gitssh-users.sh # User management
├── gitssh-sessions.sh # Session handling
├── gitssh-remotes.sh # Remote management
├── gitssh-commands.sh # Git command wrappers
├── gitssh-init.sh # Initialization
└── gitssh-setup.sh # Setup wizards
~/.local/bin/gitssh # Symlink for easy access
You need these installed:
git- obviouslyssh- OpenSSH or compatiblejq- for JSON config handling
Install with your package manager:
# Ubuntu/Debian
sudo apt install git openssh-client jq
# macOS
brew install git openssh jq
# Others: yum, dnf, pacman, etc.Command not found:
# Check installation
./install verify
source ~/.bashrc # Reload shellSSH problems:
gitssh ssh doctor # Auto-diagnose issues
gitssh ssh test github.com # Test specific hostIdentity issues:
gitssh user status # Check current user
gitssh session show # Check repo mappings
gitssh session clear # Reset if confusedNuclear option:
./install uninstall
./install install # Fresh startInteractive setup wizards:
gitssh setup github # GitHub-specific setup
gitssh setup gitlab # GitLab-specific setupConfiguration management:
gitssh config backup # Backup settings
gitssh config restore # Restore from backup
gitssh config migrate # Upgrade config formatBatch operations:
# Check SSH for all configured hosts
gitssh ssh status
# Get recommendations for current repo
gitssh remote recommendationsThe codebase is modular and POSIX-compatible. Each module handles a specific area (users, sessions, SSH, etc.) with comprehensive error handling.
To contribute:
- Fork the repo
- Follow POSIX shell conventions
- Add proper error handling
- Test with
./install verify(Might not work as intended, through testing is necessary for verification of working features) - Submit a pull request
MIT - use it however you want.
- Issues: Report problems
- Discussions: Get help
- Wiki: Detailed docs