devAlice
← Multi-OS

Passwort-Manager — Mac + Windows einheitliche Einrichtung mit CLI-Automatisierung

1Password / Bitwarden auf beiden Rechnern einrichten, mit SSH · Git · Dotfiles Auto-Fetch-Integration.

Ein Passwort-Manager rechnet sich an zwei Stellen — (1) Browser-Autofill, (2) automatisches Abrufen von Geheimnissen aus Terminal / Dotfiles / CI. Wer nur (1) nutzt, verschenkt die halbe Leistung. (2) einrichten: keine Klartext-Geheimnisse mehr in .env, und ein neuer Rechner bootet mit einem einzigen Befehl.

Ich denke, was einen Passwort-Manager für Entwickler besonders wertvoll macht, ist nicht die Passwortverwaltung selbst, sondern die CLI-Integration — weil op run bedeutet, dass Secrets automatisch aus dem Tresor injiziert werden, statt in .env-Dateien zu liegen, die irgendwann versehentlich committet werden. Anfangs habe ich 1Password nur im Browser genutzt; heute ist die op-CLI der Kernbestandteil, da SSH-Schlüssel, API-Keys und .env-Werte alle an einem einzigen, biometrisch geschützten Ort liegen.

Diese Anleitung vergleicht 1Password (empfohlen) · Bitwarden und zeigt die einheitliche Mac + Windows-Einrichtung.

TL;DR

Punkt1PasswordBitwarden
PreisKostenpflichtig ($/Monat)Kostenlos + kostenpflichtige Stufen
SicherheitsmodellE2E + Secret Key (geräteauthentifiziert)E2E + Master-Passwort
CLI-Qualität✅ Ausgezeichnet (op CLI + Biometrie)Gut (bw CLI)
SSH-Integration✅ Nativer SSH-AgentManuell
Git-Signierung✅ Commit-Signierung via ssh keyManuell
Mobil / Familienfreigabe
Selbst-Hosting✅ (Vaultwarden)

Empfehlung: 1Password (bessere Entwickler-Workflow-Integration). Bitwarden bei Kostensensitivität oder Selbst-Hosting-Bedarf.

1. 1Password-Einrichtung

1.1 Installieren (Mac)

brew install --cask 1password 1password-cli

1.2 Installieren (Windows)

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

1.3 Erste Anmeldung

Desktop-App → anmelden (E-Mail + Secret Key + Master-Passwort). Der Secret Key stammt aus dem Anmelde-PDF oder einem anderen Gerät.

1.4 CLI ↔ Desktop-Integration

Desktop → Einstellungen → Entwickler → „Mit 1Password CLI integrieren" ✅. Dies ist der entscheidende Schritt — op-Befehle authentifizieren sich dann per GUI-Biometrie (Touch ID / Windows Hello).

Bestätigen:

op vault list
# Entsperrt via Touch ID/Windows Hello, keine Passwort-Eingabe

2. SSH-Schlüssel-Integration (1Password)

Traditionell liegen SSH-Schlüssel als Klartext-Dateien unter ~/.ssh/id_ed25519. 1Password enthält einen integrierten SSH-Agenten — Schlüssel liegen im Tresor, und jede Verwendung wird per Biometrie autorisiert.

2.1 Schlüssel generieren

1Password Desktop → „+" → SSH-Schlüssel:

  • Name: personal-ed25519
  • Algorithmus: Ed25519
  • Schlüsselpaar wird automatisch generiert

2.2 SSH-Agenten aktivieren

Desktop → Einstellungen → Entwickler → „SSH-Agenten verwenden"

  • macOS: wird automatisch zu ~/.ssh/config hinzugefügt
  • Windows: Umgebungsvariable wird automatisch gesetzt

2.3 Öffentlichen Schlüssel bei GitHub registrieren

1Password-Tresor → dieses Schlüssel-Element → „Public key" kopieren → GitHub → Settings → SSH and GPG keys → New SSH key.

2.4 Testen

ssh -T git@github.com
# Hi yourname! You've successfully authenticated...
# (ein Touch ID / Windows Hello-Tipp)

Keine Klartext-Schlüsseldateien mehr in ~/.ssh/. Auf einem neuen Rechner reicht die Anmeldung bei 1Password — SSH funktioniert sofort.

3. Git-Commit-Signierung (mit SSH-Schlüssel)

Einfacher als GPG und wiederverwendet denselben Schlüssel:

git config --global gpg.format ssh
git config --global user.signingkey "ssh-ed25519 AAAA... your-comment"
# Öffentlichen Schlüssel aus dem 1Password-Element kopieren
git config --global commit.gpgsign true

Jetzt git commit → 1Password-Biometrie → automatisch signiert. Denselben öffentlichen Schlüssel bei GitHub Settings → SSH and GPG keys → „Add new signing key" registrieren.

4. .env / API-Schlüssel-Integration

Statt Klartext-.env, aus 1Password abrufen:

4.1 Geheimnis hinzufügen

1Password → „+" → API-Anmeldedaten:

  • Titel: Anthropic API Key
  • Anmeldedaten: sk-ant-...
  • Tags: dev, api

4.2 CLI-Abruf

op item get "Anthropic API Key" --fields credential
# sk-ant-...

4.3 op run — Auto-Injektion

.env.tmpl nur mit Platzhaltern:

ANTHROPIC_API_KEY=op://Private/Anthropic API Key/credential
GITHUB_TOKEN=op://Private/GitHub/token

Ausführen:

op run --env-file=.env.tmpl -- npm run dev
# Der Befehl läuft mit echten Werten als Umgebungsvariablen injiziert

.env.tmpl ist sicher zum Committen (enthält nur Referenzen). Echte Geheimnisse verbleiben im Tresor.

4.4 chezmoi-Integration

Aus mac/dotfiles, ein chezmoi-Template:

# dot_env.tmpl
export ANTHROPIC_API_KEY={{ onepasswordRead "op://Private/Anthropic/credential" }}

chezmoi apply injiziert automatisch → erstellt eine Klartext-.env auf dem neuen Rechner.

5. Bitwarden — Die kostenlose Alternative

5.1 Installieren

# Mac
brew install --cask bitwarden bitwarden-cli
 
# Windows
winget install Bitwarden.Bitwarden
winget install Bitwarden.CLI

5.2 Anmeldung + Sitzung

bw login email@example.com
# Master-Passwort → gibt einen API-Schlüssel zurück
 
# Sitzung exportieren
export BW_SESSION="$(bw unlock --raw)"
# Oder Funktion in .zshrc definieren:
function bwl { export BW_SESSION="$(bw unlock --raw)"; }

5.3 Geheimnisse lesen

bw get item "Anthropic API"
bw get password "Anthropic API"
bw get notes "Some Long Note"

JSON-Ausgabe, passt gut zu jq:

bw get item "GitHub" | jq -r '.login.password'

5.4 Schwächen

  • Keine SSH-Agenten-Integration (Schlüssel können manuell gespeichert werden, werden aber nicht automatisch genutzt)
  • Keine automatisierte Git-Commit-Signierung
  • Biometrie-Integration hängt von OS/App ab (weniger nahtlos als bei 1Password)

5.5 Selbst-Hosting (Vaultwarden)

# Mac/Linux docker
docker run -d \
  --name vaultwarden \
  -v ./vw-data:/data \
  -p 8000:80 \
  vaultwarden/server:latest

Auf einem Heimserver betreiben und mit bw config server http://your-server:8000 umschalten. Bitwarden-Clients funktionieren dann wie gewohnt.

6. Zwei-Rechner-Workflow

Auf Mac hinzugefügte Geheimnisse sind sofort auf Windows verwendbar (Tresor-Sync ist automatisch):

# Neuen Schlüssel auf Mac hinzufügen
op item create --category="API Credential" \
  --title="New Service" \
  --vault="Private" \
  credential="sk-..."
 
# Sofort in Windows pwsh verwenden
op item get "New Service" --fields credential

.env.tmpl selbst über Git/Syncthing zwischen beiden Rechnern teilen (Werte nur im Tresor — Templates sind sicher).

Überprüfung

  1. op vault list oder bw list folders — Authentifizierung funktioniert
  2. ssh -T git@github.com — 1Password SSH-Agent authentifiziert mit einem Touch ID-Tipp
  3. git commit -S -m "test"git log --show-signature → „Good signature"
  4. op run --env-file=.env.tmpl -- env | grep MY_KEY → echter Wert injiziert
  5. In 1Password CLI auf Windows anmelden → gleicher Tresor zugänglich

Fehlerbehebung

op CLI koppelt sich nicht mit der GUI

  • Desktop → Einstellungen → Entwickler → „Mit 1Password CLI integrieren" nicht aktiviert
  • Desktop muss laufen (angemeldet)
  • macOS: Systemeinstellungen → Sicherheit → Biometrie-Berechtigung erteilen

Bitwarden-Sitzung läuft ab

Standard-Inaktivitätssperre: 30 min. Erneut bw unlock --raw ausführen. Auto-Entsperren nicht in .zshrc einfügen — das Master-Passwort landet sonst in der Umgebung.

Zwei SSH-Agenten (1Password vs ssh-agent)

Pin in ~/.ssh/config:

Host github.com
  IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

Auf Windows SSH_AUTH_SOCK setzen.

op run zerstört Anführungszeichen

op inject bevorzugen (klarer): op inject -i .env.tmpl -o .env.runtime && source .env.runtime. Eine Klartext-Datei wird temporär erstellt — danach löschen.

Familien-/Team-Tresor-Berechtigungsprobleme

1Password Business → tresorspezifische Berechtigungen. Welche Tresore die CLI erreichen kann mit op vault list prüfen. Befehle schlagen fehl, wenn die Berechtigung fehlt.

Referenzen

Changelog

  • 2026-05-12: Erster Entwurf. 1Password vs. Bitwarden-Vergleich + SSH-Integration · Git-Signierung · Env-Auto-Injektion · Zwei-Rechner-Workflow + fünf Fehlerbehebungsfälle.