Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Manage Multiple SSH Git and GitHub Account Sessions With Ease!

License

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


AltStyle によって変換されたページ (->オリジナル) /