Gestor de contraseñas — configuración unificada Mac + Windows con automatización CLI
Configura 1Password / Bitwarden en ambas máquinas, con integración de SSH · Git · obtención automática de dotfiles.
Un gestor de contraseñas rinde en dos frentes: (1) autocompletado en el navegador, (2) obtención automática de secretos desde la terminal / dotfiles / CI. Si solo usas (1), estás aprovechando la mitad del valor. Configura (2) y dejas de escribir secretos en texto plano en .env; una máquina nueva arranca con un solo comando.
Creo que el salto real no es pasar de recordar contraseñas a tenerlas guardadas, sino integrar el gestor con el flujo de desarrollo. Antes guardaba las claves API en archivos .env que terminaban siendo un riesgo; ahora, porque op run inyecta los secretos en tiempo de ejecución, el repositorio permanece limpio por diseño.
Esta guía compara 1Password (recomendado) · Bitwarden y detalla la configuración unificada Mac + Windows.
TL;DR
| Elemento | 1Password | Bitwarden |
|---|---|---|
| Precio | De pago ($/mes) | Gratis + niveles de pago |
| Modelo de seguridad | E2E + Secret Key (autenticado por dispositivo) | E2E + contraseña maestra |
| Calidad del CLI | ✅ Excelente (op CLI + biométrico) | Bueno (bw CLI) |
| Integración SSH | ✅ Agente SSH nativo | Manual |
| Firma Git | ✅ Firma de commit mediante clave ssh | Manual |
| Móvil / uso familiar | ✅ | ✅ |
| Autoalojamiento | ❌ | ✅ (Vaultwarden) |
Recomendación: 1Password (mejor integración en el flujo de trabajo del desarrollador). Bitwarden si el coste es un factor decisivo o se necesita autoalojamiento.
1. Configuración de 1Password
1.1 Instalación (Mac)
brew install --cask 1password 1password-cli1.2 Instalación (Windows)
winget install --id AgileBits.1Password -e
winget install --id AgileBits.1Password.CLI -e1.3 Primer inicio de sesión
Aplicación de escritorio → inicia sesión (Email + Secret Key + Contraseña maestra). El Secret Key se incluye en el PDF de registro o está disponible en otro dispositivo ya registrado.
1.4 Integración CLI ↔ Escritorio
Escritorio → Settings → Developer → «Integrate with 1Password CLI» ✅. Este es el paso clave: los comandos op se autentican mediante biométrico de la GUI (Touch ID / Windows Hello).
Confirma:
op vault list
# Se desbloquea mediante Touch ID/Windows Hello, sin solicitud de contraseña2. Integración de clave SSH (1Password)
Tradicionalmente, las claves SSH son archivos en texto plano en ~/.ssh/id_ed25519. 1Password incluye un agente SSH integrado: las claves residen en la bóveda y el biométrico autoriza cada uso.
2.1 Genera la clave
Escritorio de 1Password → «+» → SSH Key:
- Name:
personal-ed25519 - Algorithm: Ed25519
- El par de claves se genera automáticamente
2.2 Activa el agente SSH
Escritorio → Settings → Developer → «Use the SSH agent» ✅
- macOS: añade automáticamente la entrada necesaria en
~/.ssh/config - Windows: configura automáticamente la variable de entorno
2.3 Registra la clave pública en GitHub
Bóveda de 1Password → elemento de clave SSH → copia «Public key» → GitHub → Settings → SSH and GPG keys → New SSH key.
2.4 Prueba
ssh -T git@github.com
# Hi yourname! You've successfully authenticated...
# (un toque de Touch ID / Windows Hello)Ya no hay archivos de clave en texto plano en
~/.ssh/. En una máquina nueva basta con iniciar sesión en 1Password y SSH funciona de inmediato.
3. Firma de commits Git (con clave SSH)
Más sencillo que GPG y reutiliza la misma clave:
git config --global gpg.format ssh
git config --global user.signingkey "ssh-ed25519 AAAA... your-comment"
# Copia la clave pública desde el elemento de 1Password
git config --global commit.gpgsign truegit commit → biométrico de 1Password → firmado automáticamente. Registra la misma clave pública en GitHub Settings → SSH and GPG keys → «Add new signing key».
4. Integración de .env / claves API
En lugar de guardar secretos en un .env en texto plano, obtenlos desde 1Password:
4.1 Añade el secreto
1Password → «+» → API Credential:
- Title:
Anthropic API Key - Credential:
sk-ant-... - Tags:
dev,api
4.2 Obtención mediante CLI
op item get "Anthropic API Key" --fields credential
# sk-ant-...4.3 op run — Inyección automática
.env.tmpl solo con marcadores de posición:
ANTHROPIC_API_KEY=op://Private/Anthropic API Key/credential
GITHUB_TOKEN=op://Private/GitHub/token
Ejecuta:
op run --env-file=.env.tmpl -- npm run dev
# El comando se ejecuta con los valores reales inyectados como variables de entorno.env.tmpl es seguro para hacer commit (solo contiene referencias). Los secretos reales permanecen en la bóveda.
4.4 Integración con chezmoi
Desde mac/dotfiles, una plantilla de chezmoi:
# dot_env.tmpl
export ANTHROPIC_API_KEY={{ onepasswordRead "op://Private/Anthropic/credential" }}
chezmoi apply inyecta los valores automáticamente y genera un .env en texto plano en la nueva máquina.
5. Bitwarden — La alternativa gratuita
5.1 Instalación
# Mac
brew install --cask bitwarden bitwarden-cli
# Windows
winget install Bitwarden.Bitwarden
winget install Bitwarden.CLI5.2 Inicio de sesión + sesión
bw login email@example.com
# Contraseña maestra → devuelve una clave API
# Exporta la sesión
export BW_SESSION="$(bw unlock --raw)"
# O define una función en .zshrc:
function bwl { export BW_SESSION="$(bw unlock --raw)"; }5.3 Leer secretos
bw get item "Anthropic API"
bw get password "Anthropic API"
bw get notes "Some Long Note"La salida es JSON; combina bien con jq:
bw get item "GitHub" | jq -r '.login.password'5.4 Puntos débiles
- Sin integración de agente SSH (las claves se pueden guardar manualmente, pero no se usan de forma automática)
- Sin firma automática de commits de Git
- La integración biométrica depende del SO y de la app (menos fluida que 1Password)
5.5 Autoalojamiento (Vaultwarden)
# Mac/Linux docker
docker run -d \
--name vaultwarden \
-v ./vw-data:/data \
-p 8000:80 \
vaultwarden/server:latestEjecútalo en un servidor doméstico y cambia con bw config server http://tu-servidor:8000. Los clientes de Bitwarden funcionan tal cual.
6. Flujo de trabajo en dos máquinas
Los secretos añadidos en Mac son inmediatamente accesibles en Windows: la sincronización de la bóveda es automática.
# Añadir una nueva clave en Mac
op item create --category="API Credential" \
--title="New Service" \
--vault="Private" \
credential="sk-..."
# Usarla inmediatamente en Windows pwsh
op item get "New Service" --fields credentialComparte el propio .env.tmpl entre ambas máquinas mediante Git/Syncthing. Los valores reales solo viven en la bóveda: las plantillas son seguras para compartir.
Verificación
op vault listobw list folders— la autenticación funcionassh -T git@github.com— el agente SSH de 1Password se autentica con un toque de Touch IDgit commit -S -m "test"→git log --show-signature→ «Good signature»op run --env-file=.env.tmpl -- env | grep MY_KEY→ valor real inyectado- Inicia sesión en 1Password CLI en Windows → misma bóveda accesible
Resolución de problemas
op CLI no se empareja con la GUI
- Escritorio → Settings → Developer → «Integrate with 1Password CLI» no está activado
- La aplicación de escritorio debe estar en ejecución (con sesión iniciada)
- macOS: Ajustes del sistema → Seguridad → concede acceso biométrico
La sesión de Bitwarden expira
El bloqueo por inactividad está fijado a 30 min por defecto. Ejecuta bw unlock --raw de nuevo. No pongas el auto-desbloqueo en .zshrc: la contraseña maestra acabaría expuesta en el entorno.
Dos agentes SSH (1Password vs ssh-agent)
Ancla en ~/.ssh/config:
Host github.com
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
En Windows, establece SSH_AUTH_SOCK.
op run estropea las comillas
Prefiere op inject (más claro): op inject -i .env.tmpl -o .env.runtime && source .env.runtime. Se crea un archivo en texto plano de forma temporal; elimínalo después.
Problemas de permisos en la bóveda familiar / de equipo
1Password Business gestiona permisos por bóveda. Comprueba qué bóvedas puede ver el CLI con op vault list. Los comandos fallan si no tienes permiso sobre la bóveda correspondiente.
Referencias
- mac/dotfiles — integración de chezmoi + 1Password
- multi-os/file-sync — sincroniza archivos no secretos como
.env.tmplmediante Syncthing - 1Password CLI (oficial)
- Bitwarden CLI
- Vaultwarden (autoalojado)
Historial de cambios
- 2026-05-12: Primer borrador. Comparativa 1Password vs Bitwarden + integración SSH · firma Git · inyección automática de variables de entorno · flujo de trabajo en dos máquinas + cinco casos de resolución de problemas.