Indice
- Perché la CLI è importante per gli ingegneri
- Analisi approfondita di Bitwarden CLI
- Analisi approfondita di 1Password CLI
- Analisi approfondita di pass
- Analisi approfondita di gopass
- Matrice di confronto: 4 strumenti × 12 criteri
- Raccomandazioni per profilo
Perché la CLI è importante per gli ingegneri
Un gestore di password GUI è un livello di comodità. Un gestore di password CLI è infrastruttura. La differenza diventa evidente nel momento in cui hai bisogno di un segreto all'interno di uno script shell, una pipeline CI/CD, una build Docker, un contenitore di inizializzazione Kubernetes o un cron job che viene eseguito alle 3 del mattino senza un utente connesso in nessuna parte della catena.
I quattro flussi di lavoro che espongono questo divario sono abbastanza ricorrenti da meritare di essere nominati esplicitamente.
Scripting e automazione. Gli script shell che chiamano API autenticate, le migrazioni di database, gli script di distribuzione che ruotano i certificati TLS — tutti hanno bisogno di credenziali a runtime. Il modello di hardcoding di un segreto in uno script o in un file di ambiente è ancora come la maggior parte dei team inizia, ed è anche come la maggior parte dei team subisce la loro prima violazione. Un gestore di password CLI rompe quel modello in modo pulito: la credenziale vive nel vault ed è recuperata, usata e scartata in un'unica invocazione di comando.
Rotazione dei segreti. I framework di conformità (SOC 2, ISO 27001, controlli operativi GDPR) richiedono sempre più spesso la rotazione delle credenziali su un programma fisso — chiavi API di 90 giorni, password di database di 30 giorni in alcuni ambienti. Farlo manualmente è soggetto a errori e lento. Uno strumento CLI collegato a uno script di rotazione rende questo meccanico: recupera il vecchio segreto, chiama l'API del servizio per ruotare, scrive il nuovo segreto nel vault, aggiorna i consumatori a valle tramite l'iniezione di variabili di ambiente.
Iniezione di segreti CI/CD. Il modello che è diventato standard nel 2026: nessun segreto nelle impostazioni delle variabili di ambiente nel tuo dashboard CI. Invece, un token di sessione a breve termine autentica la pipeline al vault, i segreti vengono recuperati all'inizio del lavoro, iniettati nell'ambiente del sottoprocesso e la sessione scade. Questo è ciò che bw run, op run e il rendering dei template di gopass abilitano.
Gestione delle chiavi SSH. Le chiavi SSH private sono credenziali. Memorizzarle come file semplici sulle macchine degli sviluppatori equivale a una password in chiaro. Tutti e quattro gli strumenti in questo confronto possono fungere da archivio crittografato per le chiavi SSH; due di essi espongono un socket agente SSH nativo che gestisce le operazioni di firma senza mai posizionare la chiave decrittata su disco.
I quattro strumenti che confrontiamo si collocano in due categorie. Bitwarden CLI e 1Password CLI sono frontend per servizi di vault sincronizzati su cloud con infrastruttura commerciale dietro di loro. pass e gopass sono strumenti locali costruiti su crittografia GnuPG e sincronizzazione git, senza componente cloud obbligatoria. I compromessi tra questi due modelli — semplicità operativa contro modello di fiducia — sono l'asse attorno al quale ruotano la maggior parte delle decisioni del team.
Analisi approfondita di Bitwarden CLI
Bitwarden è un gestore di password open-source con un server auto-ospitabile (Vaultwarden è il fork della comunità, il server ufficiale di Bitwarden è anch'esso open-source). La CLI, bw, è un binario Node.js che viene distribuito come eseguibile compilato singolo per Linux, macOS e Windows.
Autenticazione e sblocco del vault. Esistono due percorsi di autenticazione. Il login interattivo con bw login richiede email, password principale e token 2FA. Il login con chiave API con bw login --apikey utilizza le variabili di ambiente BW_CLIENTID e BW_CLIENTSECRET — questo è il percorso corretto per le pipeline CI/CD. Dopo l'autenticazione, lo sblocco del vault è un passaggio separato: bw unlock con BW_PASSWORD impostato restituisce un token di sessione. Memorizza il token di sessione in BW_SESSION per la durata del lavoro.
export BW_SESSION=$(bw unlock --passwordenv BW_PASSWORD --raw)
bw get password "production/postgres"
Il token di sessione è una chiave AES-256 locale che decrittografa il blob del vault crittografato memorizzato nella cache. È di breve durata per impostazione predefinita (15 minuti di inattività) e non lascia la macchina.
Modello di sincronizzazione. Il vault è memorizzato nella cache localmente come un blob crittografato dopo bw sync. Negli ambienti CI, esegui sempre bw sync all'inizio di un lavoro per garantire che la cache locale corrisponda al server. La sincronizzazione è un pull completo: non è disponibile una sincronizzazione parziale, il che significa che l'operazione è O(dimensione del vault). Per vault con meno di 10.000 elementi, la latenza di sincronizzazione è inferiore a 2 secondi.
Specifiche di crittografia. Bitwarden crittografa i dati del vault con AES-256-CBC con un IV casuale per campo. La chiave del vault è derivata dalla password principale utilizzando Argon2id (64 MB di memoria, 3 iterazioni, 4 thread). La chiave allungata non lascia mai il client. Tutte le operazioni crittografiche avvengono localmente; il server memorizza solo il testo cifrato. Il codice sorgente sia del client che del server è su GitHub ed è stato sottoposto a audit da terze parti — l'audit più recente da parte di Cure53 è stato pubblicato a marzo 2025.
Modelli di variabili di ambiente. Per i segreti delle applicazioni, Bitwarden supporta il caricamento delle credenziali direttamente negli ambienti dei sottoprocessi:
bw get notes "app/env-vars" | source /dev/stdin
# o usa bw run (wrapper):
bw run -- ./my-script.sh
Il comando bw run non è ancora completo rispetto a op run, ma gestisce i casi più comuni.
Prezzi. Piano gratuito: password illimitate, nessuna condivisione di elementi, nessun recupero 2FA, nessun TOTP. Piano individuale: $10/anno — aggiunge supporto TOTP, allegati crittografati, accesso di emergenza. Piano Teams: $4/utente/mese — aggiunge vault organizzativi condivisi, gestione dei gruppi, console di amministrazione, log degli eventi, accesso API. L'opzione auto-ospitata è disponibile su tutti i piani a pagamento senza costi aggiuntivi: distribuisci il server Bitwarden sulla tua infrastruttura e la CLI si connette ad esso. I compromessi operativi rispecchiano quelli di auto-ospitare la tua email: pieno controllo in cambio di responsabilità di patching e uptime.
Analisi approfondita di 1Password CLI
1Password è un gestore di password commerciale e closed-source. La CLI, op, è un binario Go distribuito attraverso i repository dei pacchetti di 1Password e Homebrew. È lo strumento più completo tra i quattro dal punto di vista del flusso di lavoro CI/CD e degli sviluppatori.
Autenticazione e account di servizio. 1Password CLI 2.x ha introdotto gli account di servizio specificamente per l'uso non interattivo. Un account di servizio ha un token (OP_SERVICE_ACCOUNT_TOKEN) che concede accesso in lettura o lettura-scrittura a specifici vault. Non c'è password principale nel loop. Questo è il modello corretto per le pipeline CI/CD, i segreti condivisi nei container e qualsiasi sistema automatizzato che necessita di accesso a credenziali a lungo termine.
export OP_SERVICE_ACCOUNT_TOKEN="ops_..."
op read "op://DevVault/postgres/password"
Integrazione con l'agente SSH. Questa è la caratteristica che separa 1Password dagli altri tre strumenti per i flussi di lavoro degli sviluppatori individuali. L'app 1Password espone un socket agente SSH (/tmp/1password-ssh-agent.sock). Aggiungi IdentityAgent al tuo ~/.ssh/config e le tue chiavi SSH sono firmate dall'agente senza che la chiave privata tocchi mai il filesystem in chiaro. Combinato con lo sblocco biometrico (Touch ID su macOS, Windows Hello), questo è il flusso di lavoro delle chiavi SSH più ergonomico disponibile oggi.
Host *
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
Integrazioni per sviluppatori. 1Password CLI ha integrazioni di prima classe con diversi strumenti per sviluppatori:
op runinietta segreti da file template.envcon sintassiop://vault/item/field. Nessun segreto in chiaro viene scritto su disco.- Firma dei commit Git tramite l'integrazione dell'agente SSH:
opfirma i commit con una chiave SSH memorizzata nel vault. - Provider Terraform: il provider
1password/onepasswordper Vault (non HashiCorp Vault — quello di 1Password) legge e scrive segreti dai piani Terraform. - Iniezione di segreti Kubernetes:
op injectrende i manifestiSecretdi Kubernetes con riferimenti al vault risolti al momento del deployment.
Modalità sviluppatore e plugin shell. op plugin init aws configura la CLI AWS per estrarre le credenziali dal vault a ogni invocazione. Lo stesso meccanismo esiste per GitHub CLI, Stripe CLI, Fastly CLI e altri. Per gli sviluppatori che utilizzano più CLI con credenziali rotanti, questo elimina completamente il modello del file delle credenziali.
Specifiche di crittografia. 1Password utilizza AES-256-GCM per i dati del vault, con chiavi protette dal modello a doppia chiave Secret Key + Master Password. La chiave segreta (128 bit di entropia casuale generata alla creazione dell'account) è memorizzata solo sui dispositivi dell'utente, mai sui server di 1Password. La derivazione della chiave utilizza PBKDF2-SHA256 (650.000 iterazioni per la componente della password principale). Il modello combinato significa che una violazione del server da sola non può decrittografare alcun dato del vault.
Prezzi. Individuale: $36/anno ($2,99/mese) — password illimitate, 1 GB di archiviazione documenti, Modalità Viaggio, integrazione browser 1Password.com. Teams Starter: $19,95/mese per un massimo di 10 utenti — account ospiti, vault condivisi, permessi granulari. Business: $8/utente/mese — RBAC avanzato, ruoli personalizzati, integrazione Splunk/SIEM, API eventi di audit. Enterprise: prezzi personalizzati — provisioning SSO/SCIM, revisioni di sicurezza personalizzate, supporto dedicato. Nessun piano gratuito. Nessuna opzione auto-ospitata.
Analisi approfondita di pass
pass è il Gestore di Password Standard Unix. Creato da Jason Donenfeld (anche autore di WireGuard), è uno script Bash — l'intero programma, inclusi sincronizzazione, generazione e modifica, è inferiore a 600 righe di shell. La filosofia di design è esplicita: un file di testo per segreto, crittografato con GPG, memorizzato in una struttura a directory, sincronizzato su git.
Meccaniche di base. Lo store delle password vive in ~/.password-store per impostazione predefinita. Ogni voce è un file .gpg il cui testo in chiaro è tipicamente una password sulla prima riga seguita da metadati (URL, nome utente, note) sulle righe successive. La convenzione è rispettata da ogni client compatibile con pass.
~/.password-store/
production/
postgres.gpg # password riga 1, note sotto
api-key-stripe.gpg
personal/
email.gpg
Crittografare un nuovo segreto:
pass insert production/redis-password
# o con multilinea:
pass insert --multiline production/postgres
Lettura:
pass production/postgres # output su stdout
pass -c production/postgres # copia negli appunti, cancella in 45s
Modello GPG. Ogni file .gpg è crittografato a uno o più ID chiave pubblica GPG specificati nei file .gpg-id a livello di directory. Questo è il modo in cui funziona l'accesso multi-destinatario: aggiungi le impronte digitali delle chiavi dei membri del team a .gpg-id, quindi re-crittografa con pass init --reencrypt. Ogni segreto nel sottoalbero viene re-crittografato a tutte le chiavi elencate.
Il modello di sicurezza è trasparente quanto possibile: stai fidandoti di GnuPG, della tua gestione delle chiavi e del provider di hosting git. Non c'è middleware, nessun binario proprietario, nessun flusso di autenticazione cloud. Il modello di minaccia è di conseguenza semplice da ragionare.
Sincronizzazione git. pass git fa da proxy ai comandi git direttamente. pass git push, pass git pull. La cronologia git memorizza ogni modifica con un messaggio di commit che intenzionalmente rivela solo il tipo di operazione (aggiungi, modifica, elimina) e il percorso dell'elemento — il contenuto rimane crittografato. Per i team, un repository bare condiviso su un host git privato (GitHub, GitLab, Gitea auto-ospitato) è la configurazione standard.
Ecosistema. pass ha un ampio ecosistema:
- passff / browserpass: estensioni browser per Firefox e Chrome che iniettano credenziali dallo store.
- Android Password Store (ora chiamato OpenKeychain + APS): client Android con piena compatibilità pass.
- QtPass: GUI cross-platform.
- pass-otp: plugin per codici TOTP —
pass otp production/totp-key.
Limitazioni. La filosofia Unix ha i suoi pro e contro. Non c'è un'interfaccia utente nativa per la gestione del team, nessun log di accesso, nessun rilevamento di violazioni, nessuna app mobile mantenuta dallo stesso team, nessun help desk. La gestione delle chiavi GPG su larga scala è veramente dolorosa: quando un membro del team lascia, rimuovi la loro chiave da .gpg-id e re-crittografi ogni segreto a cui avevano accesso. Per un team di 20 persone, questo può richiedere diversi minuti e richiede che le chiavi pubbliche di tutti i membri rimanenti siano aggiornate nel keyring di tutti. gopass risolve la maggior parte di questi problemi.
Prezzo. Gratuito. Licenza MIT. Nessun account, nessun abbonamento.
Analisi approfondita di gopass
gopass è pass, riscritto in Go, con segreti strutturati, comandi per il team e un backend pluggabile. È stato creato da ingegneri di Codecentric ed è attivamente mantenuto al 2026. Il binario principale, gopass, è un sostituto diretto di pass — legge e scrive lo stesso formato di store — aggiungendo capacità che pass manca su larga scala.
Segreti strutturati. Dove pass memorizza un blob di testo per voce, gopass supporta un formato chiave-valore simile a YAML all'interno del file crittografato:
gopass insert --multiline production/postgres
# testo in chiaro all'interno del .gpg:
---
password: hunter2
username: postgres
host: db.prod.example.com
port: 5432
I campi sono quindi accessibili individualmente:
gopass show production/postgres password # solo il campo password
gopass show production/postgres host # solo l'host
Questo è significativo per CI/CD: i campi individuali possono essere iniettati nelle variabili di ambiente senza analizzare l'output multi-linea.
Mounts. gopass supporta più store di password ("mounts") accessibili sotto prefissi di namespace:
gopass mounts add work git@github.com:mycompany/passwords.git
gopass mounts add home ~/.personal-pass
I segreti vivono in work/production/postgres o home/personal/email. Ogni mount è un repository git separato con il proprio .gpg-id. Questo è il modello corretto per uno sviluppatore che ha un vault di lavoro e un vault personale che non devono mai essere mescolati.
Flussi di lavoro del team. gopass ha comandi di gestione del team di prima classe:
gopass recipients add --store work "colleague@example.com"— aggiunge la chiave GPG di un destinatario dal tuo keyring, quindi re-crittografa solo il mount interessato.gopass recipients rm --store work "departed@example.com"— rimuove una chiave e re-crittografa.gopass audit— verifica la presenza di password deboli e voci duplicate su tutti i mount.
La re-crittografia al cambiamento di appartenenza al team è ancora O(numero di segreti), ma gopass la parallelizza e re-crittografa solo il mount interessato, non l'intero store.
Supporto crittografia age. Dalla versione 1.14, gopass supporta age (uno strumento di crittografia moderno di Filippo Valsorda) come alternativa a GPG. age ha un formato di chiave più semplice (chiavi X25519, chiavi SSH o chiavi derivate da passphrase), nessuna dipendenza da server di chiavi e un codice base più auditabile. Per nuovi store, age è raccomandato rispetto a GPG se il team non ha un'infrastruttura GPG esistente.
gopass init --crypto age
Rendering dei template. gopass ha un sottocomando gopass env che risolve i riferimenti ai segreti in un template di ambiente:
DATABASE_URL=postgres://{{ gopass "production/postgres/username" }}:{{ gopass "production/postgres/password" }}@{{ gopass "production/postgres/host" }}:5432/mydb
Non è raffinato come op run, ma funzionale per la maggior parte dei casi d'uso delle pipeline.
App companion. gopass ha integrazione con il browser tramite il gopass bridge per Chrome e Firefox. L'app Android è mantenuta separatamente. Non c'è un client iOS ufficiale, anche se i client dell'ecosistema pass (che leggono lo stesso formato di store) colmano parzialmente quel divario.
Prezzo. Gratuito. Licenza MIT.
Matrice di confronto: 4 strumenti × 12 criteri
| Criterio | Bitwarden CLI | 1Password CLI | pass | gopass |
|---|---|---|---|---|
| Crittografia | AES-256-CBC + Argon2id | AES-256-GCM + PBKDF2 (650k) | GnuPG (RSA/Ed25519) | GnuPG o age (X25519) |
| Modello di sincronizzazione | Cloud (Bitwarden.com o auto-ospitato) | Solo cloud (1Password.com) | git (qualsiasi remoto) | git per mount (qualsiasi remoto) |
| Integrazione dev | bw run, variabili env, API REST | op run, plugin shell, Terraform | Manuale / scriptato | gopass env, rendering template |
| Supporto CI/CD | Autenticazione chiave API, modello BW_SESSION | Account di servizio, OP_SERVICE_ACCOUNT_TOKEN | Agente GPG + git | Agente GPG/age + git |
| Agente SSH | Nessuno nativo (soluzione tramite script) | Socket nativo (agent.sock), sblocco biometrico | Manuale (ssh-add da decrittazione piped) | Helper gopass ssh, manuale |
| Condivisione team | Vault org, RBAC di gruppo | Vault condivisi, ACL granulari | .gpg-id per dir, re-crittografia manuale | gopass recipients, ACL a livello di mount |
| Prezzo | Gratuito / $4/utente/mese (Teams) | $36/anno individuale / $8/utente/mese (Biz) | Gratuito | Gratuito |
| Companion mobile | iOS + Android ufficiali | iOS + Android ufficiali | Comunità (APS, OpenKeychain) | Comunità (app compatibili con pass) |
| Sblocco biometrico | Tramite app dispositivo (iOS/Android) | Nativo (Touch ID, Windows Hello, Face ID) | Nessuno | Nessuno |
| Log di audit | Log eventi (Teams+) | API eventi di audit (Business+) | Solo log git | Log git + gopass audit |
| Scriptabilità | Alta (bw get, output JSON) | Massima (op read, campi strutturati, plugin) | Alta (pipe Unix, Bash-native) | Molto alta (campi strutturati, gopass show field) |
| Curva di apprendimento | Bassa (onboarding guidato, parità GUI) | Bassa-media (concetti: vault, elementi, campi) | Alta (configurazione GPG, gestione chiavi) | Media-alta (GPG o age + concetto di mount) |
Note sulla crittografia. AES-256-GCM (1Password) fornisce crittografia autenticata nativamente, mentre AES-256-CBC (Bitwarden) richiede un MAC separato. In pratica, entrambe le implementazioni sono solide. Il percorso GnuPG per pass e gopass ha una superficie di attacco più ampia in termini di complessità della libreria, ma il codice è stato ampiamente auditato e il modello di fiducia è più trasparente. age è l'opzione più pulita dal punto di vista del design crittografico: scambio di chiavi X25519, crittografia payload ChaCha20-Poly1305, nessun rischio di agilità degli algoritmi.
Note sul modello di sincronizzazione. Gli strumenti sincronizzati su cloud (Bitwarden, 1Password) sono più semplici da operare: installa, autentica, fatto. Gli strumenti basati su git richiedono di ospitare un repository git, gestire la disciplina di clone/push/pull e gestire i conflitti di merge se due membri del team modificano contemporaneamente. Il vantaggio è che gli strumenti basati su git non hanno una dipendenza cloud obbligatoria — il vault può vivere interamente su infrastruttura che controlli.
Note sul supporto CI/CD. Il modello di account di servizio di 1Password è il più maturo: un singolo token, limitato a specifici vault, revocabile senza influenzare la sessione di alcun utente umano. Il modello di chiave API di Bitwarden funziona bene ma richiede di mantenere fresco il token di sessione (il passaggio bw unlock aggiunge 300–600 ms di latenza). pass e gopass sono viabili in CI quando la chiave privata GPG è disponibile come segreto della pipeline — un modello che ha i suoi problemi di custodia delle chiavi.
Raccomandazioni per profilo
Sviluppatore indipendente (solo, senza team). Usa Bitwarden CLI su un account gratuito per qualsiasi cosa non richieda integrazione con l'agente SSH, e 1Password se vuoi la gestione delle chiavi SSH pronta all'uso. Per lo sviluppatore solitario fortemente attento alla privacy che desidera zero dipendenza cloud: gopass con crittografia age su un repository git privato che ospiti. La curva di apprendimento è reale ma il modello di fiducia è il più pulito disponibile.
Team di 5–20 sviluppatori. Inizia con 1Password Teams se il budget lo consente — l'integrazione con l'agente SSH, op run per CI/CD, gli account di servizio per le pipeline e il log di audit coprono il 95% di ciò di cui un team di queste dimensioni ha bisogno, con un minimo overhead operativo. Se il budget è un vincolo o l'auto-ospitazione è un requisito rigido, Bitwarden Teams ($4/utente/mese, auto-ospitabile tramite Vaultwarden) è la scelta corretta. Evita pass o gopass a questa scala a meno che il team non abbia esperienza dedicata nella gestione delle chiavi GPG; il costo operativo del turnover dei membri è alto.
Enterprise (100+ sviluppatori). 1Password Business o Bitwarden Enterprise (auto-ospitato). I fattori differenzianti sono il provisioning SSO/SCIM (1Password ha OIDC e SAML; Bitwarden ha il connettore di directory SCIM), l'esportazione del log di audit a SIEM (entrambi lo supportano al livello più alto) e il reporting di conformità. Il livello enterprise di 1Password include politiche di protezione avanzate e revisioni di sicurezza su richiesta. Il percorso auto-ospitato di Bitwarden è preferito dalle organizzazioni che non possono tollerare una dipendenza cloud per il materiale chiave, anche sotto un modello di responsabilità condivisa.
Utente esperto paranoico / specialista in rotazione dei segreti. gopass con age su un repository git privato, chiave master GPG su un dispositivo air-gapped o un Yubikey per le operazioni quotidiane. Il modello di fiducia è completamente trasparente: il codice base di GnuPG più il tuo repository git. Nessuna dipendenza cloud, nessun protocollo binario proprietario tra client e server. Per la rotazione dei segreti, costruisci uno script di rotazione che chiama gopass show <secret>, colpisce l'API del servizio per ruotare e chiama gopass insert <secret> con il nuovo valore. L'intera pipeline viene eseguita localmente senza chiamate cloud eccetto per il servizio di destinazione. Per SSH, combina gopass con ssh-add in uno script di avvio — meno ergonomico dell'agente di 1Password ma completamente auditabile. Aggiungi gopass audit al tuo cron settimanale per catturare segreti deboli o duplicati prima che diventino un problema di conformità. Calibra questo livello di rigore rispetto al tuo effettivo modello di minaccia prima di impegnarti.
Per una lettura fondamentale sul modello di minaccia più ampio che rende critica la gestione dei segreti, vedi il nostro pilastro sulla privacy del browser 2026. Per un riferimento sull'indurimento del livello OS che sottostà a qualsiasi flusso di lavoro di segreti, la nostra analisi della Modalità Blocco copre come la superficie di attacco a livello OS interagisce con gli archivi di credenziali a livello applicativo.
Qualunque strumento tu scelga, il baseline non negoziabile è questo: nessuna credenziale in chiaro tocca un repository, un file di log o un dashboard di variabili di ambiente. Un gestore di password CLI è il meccanismo che rende quel baseline mantenibile alla velocità dell'ingegneria.


