devAlice
← Multi-OS

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

Elemento1PasswordBitwarden
PrecioDe pago ($/mes)Gratis + niveles de pago
Modelo de seguridadE2E + 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 nativoManual
Firma Git✅ Firma de commit mediante clave sshManual
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-cli

1.2 Instalación (Windows)

winget install --id AgileBits.1Password -e
winget install --id AgileBits.1Password.CLI -e

1.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ña

2. 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 true

git 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.CLI

5.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:latest

Ejecú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 credential

Comparte 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

  1. op vault list o bw list folders — la autenticación funciona
  2. ssh -T git@github.com — el agente SSH de 1Password se autentica con un toque de Touch ID
  3. git commit -S -m "test"git log --show-signature → «Good signature»
  4. op run --env-file=.env.tmpl -- env | grep MY_KEY → valor real inyectado
  5. 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

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.