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-01y listo. - Seguro: no guarda claves, solo rutas a tus
.pem; permisos600en 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)
fzfpara 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( permisos600). - 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_CONFIGconsops/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:).
Skipper — jump through your servers, not your configs. 🛶
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a8dbc4ddfe1369e499d4b344e5621eede16b7c7aff0d58bb4322408aff54368
|
|
| MD5 |
9c82f34f48ecf0bd2c65e750a2b37f51
|
|
| BLAKE2b-256 |
bd60b88c43e4c74c1d0a1cf708d5748cfdec632aa7805b929f5cb44c051eac44
|
File details
Details for the file skipper_ssh_cli-0.1.1-py3-none-any.whl.
File metadata
- Download URL: skipper_ssh_cli-0.1.1-py3-none-any.whl
- Upload date:
- Size: 32.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b55efac2d7835e5712cb2ae47b34e91b143c5811924a3e072a11b25b4fe61171
|
|
| MD5 |
5f48d1b91e72ae13bd9989cacd308481
|
|
| BLAKE2b-256 |
44ecbe74eca30ee2192f51369e1c3a6a42a89108f8fbcc189209bb5158c1f1ca
|