Skip to content

gitssh-cli/gitssh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitSSH

╔═══════════════════════════════════════════════════════════════╗
║                                                               ║
║            ██████╗         ███████╗███████╗██╗  ██╗           ║
║           ██╔════╝ ██╗ ██╗ ██╔════╝██╔════╝██║  ██║           ║
║           ██║  ███╗══╝████║███████╗███████╗███████║           ║
║           ██║   ██║██║ ██║ ╚════██║╚════██║██╔══██║           ║
║            ██████╔╝██║ ██║ ███████║███████║██║  ██║           ║
║            ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝  ╚═╝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.


Why GitSSH?

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 constantlyuser.name and user.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.


What It Does

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.


Highlights

  • 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.

Installation

Quick Install

curl -fsSL https://raw.githubusercontent.com/gitssh-cli/gitssh/refs/heads/main/install-gitssh | sh

Manual

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

Basic Usage

First-time setup

gitssh onboard

or

gitssh init
gitssh user add

Switching accounts

gitssh switch github-work
gitssh clone https://github.com/company/project.git

Repo-specific identity

cd personal-project
gitssh session set github-personal

Commands You’ll Actually Use

  • gitssh switch <user> → switch global account
  • gitssh user add → add a new user (GitHub/GitLab/etc.)
  • gitssh session set <user> → set account just for current repo
  • gitssh remote convert → change HTTPS remotes to SSH
  • gitssh ssh doctor → debug SSH issues
  • gitssh commit / gitssh push → safer versions of Git commands

Essential 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.


Configuration

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"
}

Common Workflows

Multiple GitHub accounts

# 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

Per-repository identity

# 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

Fix existing repositories

# Convert HTTPS to SSH
cd existing-repo
gitssh remote convert

# Check what's configured
gitssh info
gitssh ssh status

Architecture

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

Requirements

You need these installed:

  • git - obviously
  • ssh - OpenSSH or compatible
  • jq - 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.

Troubleshooting

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

Advanced Features

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

Development

The codebase is modular and POSIX-compatible. Each module handles a specific area (users, sessions, SSH, etc.) with comprehensive error handling.

To contribute:

  1. Fork the repo
  2. Follow POSIX shell conventions
  3. Add proper error handling
  4. Test with ./install verify (Might not work as intended, through testing is necessary for verification of working features)
  5. Submit a pull request

License

MIT - use it however you want.

Links