Skip to content

Risoluzione dei Problemi: Secret e Credenziali

Backend del Portachiavi per Piattaforma

PiattaformaBackendDettagli
macOSKeychain (nativo)Utilizza la CLI security per accedere ad Accesso Portachiavi
LinuxSecret Service (D-Bus)Utilizza la CLI secret-tool (libsecret / GNOME Keyring)
WindowsFile store crittografato~/.triggerfish/secrets.json + ~/.triggerfish/secrets.key
DockerFile store crittografato/data/secrets.json + /data/secrets.key

Il backend viene selezionato automaticamente all'avvio. Non è possibile cambiare quale backend viene utilizzato per la propria piattaforma.


Problemi macOS

Prompt di accesso al Portachiavi

macOS potrebbe chiedere di consentire a triggerfish di accedere al portachiavi. Fare clic su "Consenti Sempre" per evitare prompt ripetuti. Se si è accidentalmente fatto clic su "Nega", aprire Accesso Portachiavi, trovare la voce e rimuoverla. Il prossimo accesso chiederà nuovamente.

Portachiavi bloccato

Se il portachiavi macOS è bloccato (es. dopo lo sleep), le operazioni sui secret falliranno. Sbloccarlo:

bash
security unlock-keychain ~/Library/Keychains/login.keychain-db

Oppure semplicemente sbloccare il Mac (il portachiavi si sblocca al login).


Problemi Linux

"secret-tool" non trovato

Il backend del portachiavi Linux utilizza secret-tool, che fa parte del pacchetto libsecret-tools.

bash
# Debian/Ubuntu
sudo apt install libsecret-tools

# Fedora
sudo dnf install libsecret

# Arch
sudo pacman -S libsecret

Nessun daemon Secret Service in esecuzione

Su server headless o ambienti desktop minimali, potrebbe non esserci un daemon Secret Service. Sintomi:

  • I comandi secret-tool si bloccano o falliscono
  • Messaggi di errore sulla connessione D-Bus

Opzioni:

  1. Installare e avviare GNOME Keyring:

    bash
    sudo apt install gnome-keyring
    eval $(gnome-keyring-daemon --start --components=secrets)
    export GNOME_KEYRING_CONTROL
  2. Utilizzare il fallback del file crittografato:

    bash
    export TRIGGERFISH_SECRETS_MEMORY_FALLBACK=true

    Attenzione: il fallback in memoria non persiste i secret tra i riavvii. È adatto solo per il testing.

  3. Per i server, considerare Docker. Il deployment Docker utilizza un file store crittografato che non richiede un daemon del keyring.

KDE / KWallet

Se si utilizza KDE con KWallet invece di GNOME Keyring, secret-tool dovrebbe comunque funzionare attraverso l'API D-Bus del Secret Service che KWallet implementa. Se non funziona, installare gnome-keyring insieme a KWallet.


File Store Crittografato Windows / Docker

Come funziona

Il file store crittografato utilizza la crittografia AES-256-GCM:

  1. Una chiave macchina viene derivata utilizzando PBKDF2 e memorizzata in secrets.key
  2. Ogni valore del secret viene individualmente crittografato con un IV unico
  3. I dati crittografati vengono memorizzati in secrets.json in un formato con versione ({v: 1, entries: {...}})

"Machine key file permissions too open"

Sui sistemi basati su Unix (Linux in Docker), il file della chiave deve avere permessi 0600 (lettura/scrittura solo proprietario). Se i permessi sono troppo permissivi:

Machine key file permissions too open

Soluzione:

bash
chmod 600 ~/.triggerfish/secrets.key
# oppure in Docker
docker exec triggerfish chmod 600 /data/secrets.key

"Machine key file corrupt"

Il file della chiave esiste ma non può essere analizzato. Potrebbe essere stato troncato o sovrascritto.

Soluzione: Eliminare il file della chiave e rigenerare:

bash
rm ~/.triggerfish/secrets.key

Al prossimo avvio, viene generata una nuova chiave. Tuttavia, tutti i secret esistenti crittografati con la vecchia chiave saranno illeggibili. Sarà necessario ri-memorizzare tutti i secret:

bash
triggerfish config set-secret provider:anthropic:apiKey sk-ant-...
# Ripetere per tutti i secret

"Secret file permissions too open"

Come il file della chiave, il file dei secret dovrebbe avere permessi restrittivi:

bash
chmod 600 ~/.triggerfish/secrets.json

"Secret file chmod failed"

Il sistema non è riuscito a impostare i permessi del file. Questo può accadere su filesystem che non supportano i permessi Unix (alcuni mount di rete, volumi FAT/exFAT). Verificare che il filesystem supporti la modifica dei permessi.


Migrazione dei Secret Legacy

Migrazione automatica

Se Triggerfish rileva un file di secret in testo in chiaro (vecchio formato senza crittografia), migra automaticamente al formato crittografato al primo caricamento:

Migrating legacy plaintext secrets to encrypted format
Secret rotation recommended after migration from plaintext storage

La migrazione:

  1. Legge il file JSON in testo in chiaro
  2. Crittografa ogni valore con AES-256-GCM
  3. Scrive in un file temporaneo, poi rinomina atomicamente
  4. Registra un avviso raccomandando la rotazione dei secret

Migrazione manuale

Se si hanno secret nel file triggerfish.yaml (senza utilizzare riferimenti secret:), migrarli al portachiavi:

bash
triggerfish config migrate-secrets

Questo scansiona la configurazione alla ricerca di campi secret noti (chiavi API, token bot, ecc.), li memorizza nel portachiavi e sostituisce i valori nel file di configurazione con riferimenti secret:.

Problemi di spostamento tra dispositivi

Se la migrazione comporta lo spostamento di file attraverso confini di filesystem (punti di mount diversi, NFS), la rinomina atomica potrebbe fallire. La migrazione ripiega su copia-poi-rimozione, che è comunque sicura ma ha brevemente entrambi i file su disco.


Risoluzione dei Secret

Come funzionano i riferimenti secret:

I valori di configurazione con prefisso secret: vengono risolti all'avvio:

yaml
# In triggerfish.yaml
apiKey: "secret:provider:anthropic:apiKey"

# All'avvio, risolto in:
apiKey: "sk-ant-api03-actual-key-value..."

Il valore risolto vive solo in memoria. Il file di configurazione su disco contiene sempre il riferimento secret:.

"Secret not found"

Secret not found: <key>

La chiave referenziata non esiste nel portachiavi.

Soluzione:

bash
triggerfish config set-secret <key> <value>

Elencare i secret

bash
# Elencare tutte le chiavi dei secret memorizzati (i valori non vengono mostrati)
triggerfish config get-secret --list

Eliminare i secret

bash
triggerfish config set-secret <key> ""
# oppure attraverso l'agent:
# L'agent può richiedere l'eliminazione dei secret tramite il tool dei secret

Override della Variabile d'Ambiente

Il percorso del file della chiave può essere sovrascritto con TRIGGERFISH_KEY_PATH:

bash
export TRIGGERFISH_KEY_PATH=/custom/path/secrets.key

Questo è utile principalmente per i deployment Docker con layout di volumi personalizzati.


Nomi Comuni delle Chiavi dei Secret

Queste sono le chiavi standard del portachiavi utilizzate da Triggerfish:

ChiaveUtilizzo
provider:<name>:apiKeyChiave API del provider LLM
telegram:botTokenToken del bot Telegram
slack:botTokenToken del bot Slack
slack:appTokenToken a livello di app Slack
slack:signingSecretSigning secret Slack
discord:botTokenToken del bot Discord
whatsapp:accessTokenToken di accesso WhatsApp Cloud API
whatsapp:webhookVerifyTokenToken di verifica webhook WhatsApp
email:smtpPasswordPassword relay SMTP
email:imapPasswordPassword server IMAP
web:search:apiKeyChiave API Brave Search
github-patPersonal Access Token GitHub
notion:tokenToken integrazione Notion
caldav:passwordPassword server CalDAV
google:clientIdID client OAuth Google
google:clientSecretClient secret OAuth Google
google:refreshTokenRefresh token OAuth Google