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.
CLI minimalista para gestionar y conectar a servidores vía SSH usando aliases y rutas a PEMs — sin tocar ~/.ssh/config.


🚀 Why Skipper

  • Rápido: skipper connect web-01 y listo.
  • Seguro: no guarda claves, solo rutas a tus .pem; permisos 600 en config.
  • Git-friendly: JSON plano, versionable (opcional).
  • Enterprise-ready: soporte de bastion/ProxyJump y flags SSH extra.

✨ Features

  • Registro de hosts por alias (IP/FQDN, usuario, puerto, PEM).
  • Bastion/jump host por alias o user@host:port.
  • Launcher interactivo (skipper menu) con integración fzf si está disponible.
  • Extras SSH: port-forward, compresión, etc., pasándolos tras --.

🧩 Requisitos

  • Python 3.10+
  • (Opcional) fzf para el menú interactivo.

📦 Instalación (recomendado con pipx)

En macOS: brew install pipx && pipx ensurepath

# desde el repo del proyecto
pipx install .
# o directo desde GitHub cuando publiques
# pipx install git+https://github.com/RchrdMrtnz/skipper.git

# comprobar
skipper --help

Desarrollo local

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

🔐 Recomendación: centraliza tus PEMs

Mantén tus llaves en una carpeta privada y con permisos estrictos.

mkdir -p ~/.pem
# mueve tus .pem allí (confirma si pregunta)
for f in ~/*.pem; do [ -f "$f" ] && mv -i "$f" ~/.pem/; done
chmod 600 ~/.pem/*.pem

⚙️ Uso básico

Agregar un host

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

Listar hosts

skipper ls

Conectarte por alias

skipper connect web-01

Pasar flags extra a SSH (ej. port-forward)

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

Eliminar un host

skipper rm web-01

🛰️ Bastion / ProxyJump

Define primero el bastion y luego el destino privado:

# bastion público
skipper add   --alias bastion   --hostname 3.88.77.66   --user ubuntu   --pem ~/.pem/bastion.pem

# host en red privada, saltando por bastion
skipper add   --alias db-priv   --hostname 10.0.2.15   --user ubuntu   --pem ~/.pem/db.pem   --bastion bastion

# conectar (Skipper usa -J debajo)
skipper connect db-priv

Tip: también puedes usar --proxy-jump "user@host:port" si no quieres referenciar por alias.


🎛️ Menú interactivo

skipper menu
  • Si tienes fzf, tendrás búsqueda difusa.
  • Sin fzf, verás un selector simple en consola.

🧰 Comandos disponibles

skipper add        # agrega/actualiza un host (alias, hostname, user, port, pem, bastion)
skipper ls         # lista hosts
skipper rm <alias> # elimina host por alias
skipper connect <alias> [-- <extras ssh>]
skipper menu       # launcher interactivo (fzf si existe)
skipper edit       # abre el archivo de configuración en tu $EDITOR

🗂️ Dónde se guarda la config

  • Ruta por defecto: ~/.config/skipper/hosts.json ( permisos 600 ).
  • Overwrite vía variable de entorno:
export SKIPPER_CONFIG="$PWD/infra/skipper.hosts.json"

Ideal si quieres versionarlo (o cifrarlo con sops/age) en tu repo de infraestructura.


🧹 Limpieza de known_hosts (cuando cambia la huella)

Si rotaste máquina/IP y ves el clásico warning:

ssh-keygen -R <IP>   # ej: ssh-keygen -R 44.218.145.76
skipper connect <alias>

🔒 Seguridad

  • Skipper no almacena material de clave privada, solo rutas a tus .pem.
  • Asegura permisos:
    chmod 600 ~/.pem/*.pem
    
  • Si versionas config, considera cifrar SKIPPER_CONFIG con sops/age.

🛣️ Roadmap

  • Tags y filtros (skipper ls --tag prod).
  • Plantillas de túneles (skipper tunnels add ...).
  • skipper test <alias> (sanity SSH/latencia).
  • Import puntual desde ~/.ssh/config.

🧪 Smoke test de ejemplo

# públicos
skipper add --alias test    --hostname 11.11.11.11 --user ubuntu --pem ~/.pem/test.pem


skipper ls
skipper connect n8n-momentum
skipper connect redis-momentum -- -L 6380:localhost:6379

📄 Licencia

GPL-3.0 — ver LICENSE.


🙌 Contribuciones

PRs bienvenidos. Mantén el estilo: Typer + Pydantic, tests simples y mensajes de commit claros (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.1.tar.gz (45.9 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.1-py3-none-any.whl (32.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: skipper_ssh_cli-0.1.1.tar.gz
  • Upload date:
  • Size: 45.9 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.1.tar.gz
Algorithm Hash digest
SHA256 1a8dbc4ddfe1369e499d4b344e5621eede16b7c7aff0d58bb4322408aff54368
MD5 9c82f34f48ecf0bd2c65e750a2b37f51
BLAKE2b-256 bd60b88c43e4c74c1d0a1cf708d5748cfdec632aa7805b929f5cb44c051eac44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for skipper_ssh_cli-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b55efac2d7835e5712cb2ae47b34e91b143c5811924a3e072a11b25b4fe61171
MD5 5f48d1b91e72ae13bd9989cacd308481
BLAKE2b-256 44ecbe74eca30ee2192f51369e1c3a6a42a89108f8fbcc189209bb5158c1f1ca

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