Skip to main content

Jump between servers with SSH aliases and PEMs, without touching ~/.ssh/config.

Project description

Skipper 🛶

Jump through your servers, not your configs.
A minimalist CLI tool to manage and connect to SSH servers using aliases and PEM file paths — without touching your ~/.ssh/config.

🚀 Why Skipper

  • Fast: Just run skipper connect web-01 and you're in.
  • Secure: Doesn’t store keys, only paths to your .pem files. Config file uses strict 600 permissions.
  • Git-friendly: Plain JSON config, optionally versionable.
  • Enterprise-ready: Supports bastion/ProxyJump, SSH flags, and PEM routing.

✨ Features

  • Register hosts via alias (IP/FQDN, user, port, PEM).
  • Support for bastion/jump hosts via alias or user@host:port.
  • Interactive launcher (skipper menu) with optional fzf integration.
  • Pass extra SSH flags after --, e.g., port forwarding or compression.

🧩 Requirements

  • Python 3.10+
  • (Optional) fzf for enhanced interactive menus

📦 Installation (recommended via pipx)

macOS: brew install pipx && pipx ensurepath

pipx install .

or directly from GitHub:

pipx install git+https://github.com/RchrdMrtnz/skipper.git

Check installation:

skipper --help

Local development

python3 -m venv .venv && source .venv/bin/activate
pip install -e .
skipper --help

🔐 Recommendation: Centralize your PEMs

Keep your .pem files in a private, secured folder:

mkdir -p ~/.pem
for f in ~/*.pem; do [ -f "$f" ] && mv -i "$f" ~/.pem/; done
chmod 600 ~/.pem/*.pem

⚙️ Basic Usage

Add a host:

skipper add --alias web-01 --hostname 54.12.34.56 --user ubuntu --pem ~/.pem/web-01.pem

List hosts:

skipper ls

Connect:

skipper connect web-01

Pass extra SSH flags:

skipper connect web-01 -- -L 5433:localhost:5432

Remove:

skipper rm web-01

🛰️ Bastion / ProxyJump

skipper add --alias bastion --hostname 3.88.77.66 --user ubuntu --pem ~/.pem/bastion.pem
skipper add --alias db-priv --hostname 10.0.2.15 --user ubuntu --pem ~/.pem/db.pem --bastion bastion
skipper connect db-priv

You can also use:

--proxy-jump "user@host:port"

🎛️ Interactive Menu

skipper menu
  • If fzf is installed, fuzzy-search menu is used.
  • Otherwise, a simple console selector is shown.

🧰 Commands

skipper add
skipper ls
skipper rm <alias>
skipper connect <alias> [-- <ssh flags>]
skipper menu
skipper edit

🗂️ Configuration

Default: ~/.config/skipper/hosts.json (600 perms)
Override via:

export SKIPPER_CONFIG="$PWD/infra/skipper.hosts.json"

🔒 Security

  • No private key material stored — only file paths
  • Enforce strict PEM permissions:
chmod 600 ~/.pem/*.pem
  • If versioning config, consider encrypting SKIPPER_CONFIG

🛣️ Roadmap

  • Tags and filters
  • Tunnel templates
  • skipper test <alias>
  • Import from ~/.ssh/config

🧪 Example Smoke Test

skipper add --alias test --hostname 11.11.11.11 --user ubuntu --pem ~/.pem/test.pem
skipper ls
skipper connect test
skipper connect redis-momentum -- -L 6380:localhost:6379

📄 License

GPL-3.0 — see LICENSE

🙌 Contributing

PRs welcome. Follow Typer + Pydantic style, simple tests, clear commits (feat:, fix:, docs:). Skipperjump through your servers, not your configs. 🛶

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skipper_ssh_cli-0.1.2.tar.gz (44.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skipper_ssh_cli-0.1.2-py3-none-any.whl (31.4 kB view details)

Uploaded Python 3

File details

Details for the file skipper_ssh_cli-0.1.2.tar.gz.

File metadata

  • Download URL: skipper_ssh_cli-0.1.2.tar.gz
  • Upload date:
  • Size: 44.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.11

File hashes

Hashes for skipper_ssh_cli-0.1.2.tar.gz
Algorithm Hash digest
SHA256 59ab39e6f8fba537bee81872d73901761bda5497bfe96c3b2c50337e04ebcdad
MD5 6785a21b7b9664d0d9ffbb26a94b2033
BLAKE2b-256 3098fded7e855f91fa960fde60a62eb1f4684b16098805665ac50367bfac93aa

See more details on using hashes here.

File details

Details for the file skipper_ssh_cli-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for skipper_ssh_cli-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a57f3bf9137ca84969f16b635a69a26cf260ec9f270988b8074d3f1c738eecc3
MD5 93ff7f5bf4ae1e3c16f0d2b0fe591e8b
BLAKE2b-256 64a93e74ba49a0e58b1ac8f19dd7c0c49e4e08ce92f9c2c506c4da952d6828d4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page