╔═══════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ ███████╗███████╗██╗ ██╗ ║
║ ██╔════╝ ██╗ ██╗ ██╔════╝██╔════╝██║ ██║ ║
║ ██║ ███╗══╝████║███████╗███████╗███████║ ║
║ ██║ ██║██║ ██║ ╚════██║╚════██║██╔══██║ ║
║ ██████╔╝██║ ██║ ███████║███████║██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝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|setup-wizard Interactive first-time setup wizard
validate|check|doctor Validate gitssh system configuration
ENHANCED GIT OPERATIONS:
clone <url> Enhanced git clone with auto-setup
status|st Enhanced git status with user info
commit|ci [opts] Enhanced git commit with user verification
push [opts] Enhanced git push with verification
fetch [opts] Enhanced git fetch with SSH verification
pull [opts] Enhanced git pull with SSH verification
info Show detailed repository information and SSH connection
USER MANAGEMENT:
switch|sw <user> Switch to user locally
switch|sw -g <user> Switch to user globally
user|users See user accounts and ssh accounts status
user add [opts] Add new user account
user remove|rm|delete <user> Remove user account
user list List all configured users
user switch <user> Switch to user locally
user switch -g <user> Switch to user globally
user status Show current user status
SESSION MANAGEMENT:
session|sess Show current repository and user session information
session set Set user for current repository
session status [options]Show current repository and user session information
session show [options] Show current repository and user session information
session clear Clear session data
session forget|remove Remove persistent config for repo
session list List all session repositories
session export <path> Export session data to file
session import <path> Import session data from file
session cleanup Cleanup stale session data
SSH MANAGEMENT:
ssh status|info Show SSH configuration status
ssh doctor Diagnose SSH connection issues
ssh repair Fix common SSH problems
ssh test <host> Test SSH connection
ssh backup Backup SSH configuration
ssh restore <path> Restore SSH configuration from backup
ssh learn Guide to adding new SSH hosts
SETUP WIZARDS:
setup github Setup GitHub SSH authentication
setup gitlab Setup GitLab SSH authentication
REMOTE MANAGEMENT:
remote|remotes Show git repository remotes
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
remote recommendations Show remote configuration recommendations
CONFIGURATION:
config show Show current configuration
config reset Reset configuration to defaults
config backup Backup configuration files
config restore <path> Restore from backup
config migrate Migrate from old configuration format
INSTALLATION/UNINSTALLATION/UPDATE MANAGEMENT:
gitssh reinstall Reinstall GitSSH system
gitssh uninstall|remove Completely remove GitSSH
gitssh update|upgrade Update to latest version
gitssh verify|test-install Verify installation integrity
gitssh diagnose|doctor-install 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.name
anduser.email
never 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.git
With 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 | sh
git clone https://github.com/gitssh-cli/gitssh.git
cd gitssh
chmod +x install
./install
The installer supports:
./install install # Install (default)
./install update # Update GitSSH
./install uninstall # Remove everything
./install verify # Check installation
./install diagnose # Run diagnostics
gitssh onboard
or
gitssh init
gitssh user add
gitssh switch github-work
gitssh clone https://github.com/company/project.git
cd personal-project
gitssh session set github-personal
gitssh 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 only
Working 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 verification
Troubleshooting:
gitssh ssh doctor # Diagnose SSH problems
gitssh ssh status # Check SSH setup
gitssh validate # Verify installation
There'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 status
GitSSH 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 shell
SSH problems:
gitssh ssh doctor # Auto-diagnose issues
gitssh ssh test github.com # Test specific host
Identity issues:
gitssh user status # Check current user
gitssh session show # Check repo mappings
gitssh session clear # Reset if confused
Nuclear option:
./install uninstall
./install install # Fresh start
Interactive setup wizards:
gitssh setup github # GitHub-specific setup
gitssh setup gitlab # GitLab-specific setup
Configuration management:
gitssh config backup # Backup settings
gitssh config restore # Restore from backup
gitssh config migrate # Upgrade config format
Batch operations:
# Check SSH for all configured hosts
gitssh ssh status
# Get recommendations for current repo
gitssh remote recommendations
The 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