Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
envsec — Sicheres CLI-Tool zur Verwaltung von Umgebungsgeheimnissen unter Verwendung nativer Betriebssystem-Anmeldeinformationsspeicher (macOS Keychain, Linux Secret Service, Windows Credential Manager) | Kitploit
Tools/GitHubGitHub/davidnussio/envsec
Authentifizierung & AutorisierungAllgemeine DienstprogrammeVerschlüsselungs-/EntschlüsselungstoolsCloud-SicherheitDevSecOpsSecret-Erkennung
GitHubdavidnussio/envsec

envsec

Sicheres CLI-Tool zur Verwaltung von Umgebungsgeheimnissen unter Verwendung nativer Betriebssystem-Anmeldeinformationsspeicher (macOS Keychain, Linux Secret Service, Windows Credential Manager)

Repository anzeigen
15vor 3 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Webseite

envsec

Sichere Verwaltung von Umgebungsgeheimnissen mit nativen Betriebssystem-Schlüsselspeichern.

Demo

Bild

Funktionen

  • Geheimnisse im nativen Schlüsselspeicher des Betriebssystems speichern (nicht in Klartext-Dateien)
  • Plattformübergreifend: macOS, Linux, Windows
  • Geheimnisse nach Kontext organisieren (z. B. myapp.dev, stripe-api.prod, work.staging)
  • Metadaten von Geheimnissen (Schlüsselnamen, Zeitstempel) über SQLite verfolgen
  • Kontexte und Geheimnisse mit Glob-Mustern durchsuchen
  • Befehle mit Geheimnis-Interpolation ausführen
  • Befehle mit cmd speichern und erneut ausführen (durchsuchen, auflisten, ausführen, löschen)
  • Geheimnisse in .env-Dateien exportieren (mit Generierungsverfolgung über audit)
  • Geheimnisse als Shell-Umgebungsvariablen exportieren (eval $(envsec env))
  • Geheimnisse aus .env-Dateien laden (mit Konflikterkennung)
  • Geheimnisse verschlüsselt mit GPG für Teammitglieder freigeben
  • Interaktive Terminal-Benutzeroberfläche (envsec tui) zur Verwaltung von Geheimnissen ohne Befehlsauswendiglernen

Pakete

Dieses Monorepo enthält die folgenden Pakete:

SDK-Schnellstart

Für den programmatischen Zugriff auf Geheimnisse aus Node.js oder Bun verwenden Sie @envsec/sdk:```bash npm install @envsec/sdk

root@kitploit:~
Bitte fügen Sie den zu übersetzenden Markdown-Inhalt ein.```typescript
import { loadSecrets } from "@envsec/sdk";

// Load and inject into process.env
await loadSecrets({ context: "myapp.dev", inject: true });

// Or use the client for full control
import { EnvsecClient } from "@envsec/sdk";
const client = await EnvsecClient.create({ context: "myapp.dev" });
const apiKey = await client.get("api.key");
await client.close();

Siehe die vollständige SDK-Dokumentation für alle APIs, Multi-Kontext-Unterstützung und Optionen.

Voraussetzungen

  • Node.js >= 22

macOS

Keine zusätzlichen Abhängigkeiten. Verwendet die eingebaute Schlüsselbundverwaltung über das security CLI-Tool.

Linux

Erfordert libsecret-tools (stellt den Befehl secret-tool bereit), der über D-Bus mit GNOME Keyring, KDE Wallet oder jedem Anbieter der Secret Service API kommuniziert.```bash

Debian / Ubuntu

sudo apt install libsecret-tools

Fedora

sudo dnf install libsecret

Arch

sudo pacman -S libsecret

root@kitploit:~
Eine laufende D-Bus-Sitzung und ein Keyring-Daemon (z. B. `gnome-keyring-daemon`) müssen aktiv sein. Die meisten Desktop-Umgebungen erledigen dies automatisch.

### Windows

Keine zusätzlichen Abhängigkeiten. Verwendet den integrierten Windows Credential Manager über `cmdkey` und PowerShell.

## Installation

### Homebrew (macOS / Linux)```bash
brew tap davidnussio/homebrew-tap
brew install envsec

npm```bash

npm install -g envsec

root@kitploit:~
### npx (keine Installation)```bash
npx envsec

mise```bash

mise use -g npm:envsec

root@kitploit:~
## Verwendung

Die meisten Befehle benötigen einen mit `--context` (oder `-c`) angegebenen Kontext.
Ein Kontext ist eine frei wählbare Bezeichnung zum Gruppieren von Geheimnissen – z. B. `myapp.dev`, `stripe-api.prod`, `work.staging`.

### Globale Optionen

Diese Optionen stehen für alle Befehle zur Verfügung:

- `--context`, `-c` — Name des Kontexts (z. B. `myapp.dev`, `stripe-api.prod`). Liest auch die Umgebungsvariable `ENVSEC_CONTEXT`
- `--debug`, `-d` — Debug-Logging aktivieren
- `--json` — Ausgabe im JSON-Format für Skripte
- `--db` — Pfad zur SQLite-Datenbankdatei (Standard: `~/.envsec/store.sqlite`). Liest auch die Umgebungsvariable `ENVSEC_DB`

### Benutzerdefinierter Datenbankpfad

Standardmäßig werden Metadaten unter `~/.envsec/store.sqlite` gespeichert. Sie können dies mit `--db` oder der Umgebungsvariable `ENVSEC_DB` überschreiben:```bash
# Use a project-local database
envsec --db ./local-store.sqlite -c myapp.dev list

# Or via environment variable
export ENVSEC_DB=/shared/team/envsec.sqlite
envsec -c myapp.dev list

Das --db Flag hat Vorrang vor ENVSEC_DB. Anwendungsfälle umfassen projektspezifische Datenbanken, teamweit geteilte Datenbanken auf Netzlaufwerken und CI/CD mit flüchtigem Speicher.

Ein Geheimnis hinzufügen

Speichern Sie ein Geheimnis im OS-Anmeldeinformationsspeicher.

  • <key> — Name des Geheimnisschlüssels (z.B. api.key, db.password)
  • --value, -v — Zu speichernder Wert (weglassen für interaktive maskierte Eingabeaufforderung)
  • --expires, -e — Ablaufdauer (z.B. 30m, 2h, 7d, 4w, 3mo, 1y)```bash

Store a value inline

envsec -c myapp.dev add api.key --value "sk-abc123"

Or use the short alias

envsec -c myapp.dev add api.key -v "sk-abc123"

Omit --value for an interactive masked prompt

envsec -c myapp.dev add api.key

Set an expiry duration with --expires (-e)

envsec -c myapp.dev add api.key -v "sk-abc123" --expires 30d

Supported duration units: m (minutes), h (hours), d (days), w (weeks), mo (months), y (years)

Combinable: 1y6mo, 2w3d, 1d12h

envsec -c myapp.dev add api.key -v "sk-abc123" -e 6mo

root@kitploit:~
### Ein Geheimnis abrufen

Ruft einen Geheimniswert aus dem OS-Anmeldedatenspeicher ab.

- `<key>` — Schlüsselname des Geheimnisses zum Abrufen
- `--quiet`, `-q` — Nur den Rohwert ausgeben (keine Warnungen oder zusätzliche Ausgabe)
- `--json` — Ausgabe im JSON-Format (enthält Kontext, Schlüssel, Wert, expires_at)```bash
envsec -c myapp.dev get api.key

# Print only the raw value (no warnings or extra output)
envsec -c myapp.dev get api.key --quiet
envsec -c myapp.dev get api.key -q

Geheimnis löschen

Entfernen Sie ein Geheimnis aus dem OS-Anmeldeinformationsspeicher.

  • <key> — Name des Geheimnisschlüssels zum Löschen (optional, wenn --all verwendet wird)
  • --yes, -y — Bestätigungsaufforderung überspringen
  • --all — Alle Geheimnisse im Kontext löschen```bash envsec -c myapp.dev delete api.key

or use the alias

envsec -c myapp.dev del api.key

root@kitploit:~
### Ein Secret umbenennen

Benennen Sie einen Secret-Schlüssel innerhalb desselben Kontextes um. Der Wert und die Ablaufmetadaten bleiben erhalten.

- `<alter-schlüssel>` — Aktueller Name des Secret-Schlüssels
- `<neuer-schlüssel>` — Neuer Name des Secret-Schlüssels
- `--force`, `-f` — Überschreibt das Ziel, falls es bereits existiert```bash
# Rename a key
envsec -c myapp.dev rename old.key new.key

# Overwrite target if it already exists
envsec -c myapp.dev rename old.key existing.key --force

Alle Geheimnisse in einem Kontext auflisten

Listet alle geheimen Schlüssel und Metadaten in einem Kontext auf.

  • --json — Ausgabe im JSON-Format```bash envsec -c myapp.dev list
root@kitploit:~
### Alle Kontexte auflisten

Listet alle verfügbaren Kontexte mit Geheimnisanzahlen auf.

- `--json` — Ausgabe im JSON-Format```bash
# Without --context, lists all available contexts with secret counts
envsec list

Geheimnisse durchsuchen

Durchsuchen Sie Geheimnisse oder Kontexte mithilfe von Glob-Mustern.

  • <pattern> — Glob-Muster zum Durchsuchen (z.B. api.*, myapp.*)
  • --json — Ausgabe im JSON-Format```bash

Search secrets within a context

envsec -c myapp.dev search "api.*"

Search contexts by pattern (without --context)

envsec search "myapp.*"

root@kitploit:~
### Geheimnisse zwischen Kontexten verschieben

Verschiebt Geheimnisse von einem Kontext in einen anderen. Die Quell-Geheimnisse werden nach dem Verschieben entfernt.

- `<pattern>` — Glob-Muster oder exakter Schlüssel zum Verschieben (optional, wenn `--all` verwendet wird)
- `--to`, `-t` — Zielkontext, in den Geheimnisse verschoben werden sollen
- `--all` — Alle Geheimnisse aus dem Quellkontext verschieben
- `--force`, `-f` — Vorhandene Geheimnisse im Zielkontext überschreiben
- `--yes`, `-y` — Bestätigungsaufforderung überspringen```bash
# Move a single secret
envsec -c myapp.dev move api.token --to myapp.prod

# Move secrets matching a glob pattern
envsec -c myapp.dev move "redis.*" --to myapp.prod -y

# Move all secrets from one context to another
envsec -c myapp.dev move --all --to myapp.prod -y

# Overwrite existing secrets in the target context
envsec -c myapp.dev move "redis.*" --to myapp.prod --force -y

Geheimnisse zwischen Kontexten kopieren

Kopiert Geheimnisse von einem Kontext in einen anderen. Die Quellgeheimnisse bleiben unverändert.

  • <pattern> — Glob-Muster oder genauer Schlüssel zum Kopieren (optional, wenn --all verwendet wird)
  • --to, -t — Zielkontext, in den Geheimnisse kopiert werden sollen
  • --all — Alle Geheimnisse aus dem Quellkontext kopieren
  • --force, -f — Vorhandene Geheimnisse im Zielkontext überschreiben
  • --yes, -y — Bestätigungsaufforderung überspringen```bash

Copy a single secret

envsec -c myapp.dev copy api.token --to myapp.staging

Copy secrets matching a glob pattern

envsec -c myapp.dev copy "redis.*" --to myapp.staging -y

Copy all secrets from one context to another

envsec -c myapp.dev copy --all --to myapp.staging -y

Overwrite existing secrets in the target context

envsec -c myapp.dev copy "redis.*" --to myapp.staging --force -y

root@kitploit:~
### Einen Befehl mit Geheimnissen ausführen

Führen Sie einen Befehl mit geheimen Werten aus, die über Platzhalter interpoliert oder als Umgebungsvariablen injiziert werden.

- `<command>` — Befehl, der ausgeführt werden soll. Verwenden Sie `{key}`-Platzhalter für die Interpolation von Geheimnissen
- `--inject`, `-i` — Alle Kontext-Geheimnisse als Umgebungsvariablen injizieren (`KEY.NAME` → `KEY_NAME`)
- `--save`, `-s` — Diesen Befehl für die spätere Verwendung speichern
- `--name`, `-n` — Name für den gespeicherten Befehl (wird interaktiv abgefragt, wenn es mit `--save` weggelassen wird)```bash
# Placeholders {key} are resolved with secret values before execution
envsec -c myapp.dev run 'curl {api.url} -H "Authorization: Bearer {api.token}"'

# Any {dotted.key} in the command string is replaced with its value
envsec -c myapp.prod run 'psql {db.connection_string}'

# Inject ALL context secrets as environment variables (KEY.NAME → KEY_NAME)
envsec -c myapp.dev run --inject 'node server.js'
envsec -c myapp.dev run -i 'docker compose up'

# Combine --inject with placeholders
envsec -c myapp.dev run --inject 'curl {api.url} -H "Authorization: Bearer $API_TOKEN"'

# Save the command for later use with --save (-s) and --name (-n)
envsec -c myapp.dev run --save --name deploy 'kubectl apply -f - <<< {k8s.manifest}'

# If you use --save without --name, you'll be prompted interactively
envsec -c myapp.dev run --save 'psql {db.connection_string}'

Wenn ein Platzhalter auf ein nicht vorhandenes Geheimnis verweist, wird der Befehl nicht ausgeführt und Sie sehen eine klare Fehlermeldung:``` ❌ Missing secrets in context "myapp.dev":

  • api.url
  • api.token

Add them with: envsec -c myapp.dev add

root@kitploit:~
### Gespeicherte Befehle

Gespeicherte Befehle befinden sich im Unterbefehl `cmd`, um sie von geheimen Operationen getrennt zu halten.

#### cmd list

Alle gespeicherten Befehle auflisten.```bash
envsec cmd list

cmd run

Führt einen gespeicherten Befehl aus (verwendet den Kontext, mit dem er gespeichert wurde).

  • <name> — Name des auszuführenden gespeicherten Befehls
  • --override-context, -o — Überschreibt den gespeicherten Kontext zur Ausführungszeit
  • --quiet, -q — Unterdrückt informative Ausgaben (gibt nur Befehlsergebnisse aus)
  • --inject, -i — Injiziert alle Kontext-Geheimnisse als Umgebungsvariablen```bash envsec cmd run deploy

Run quietly (suppress informational output like "Resolved N secret(s)")

envsec cmd run deploy --quiet envsec cmd run deploy -q

Override the context at execution time

envsec cmd run deploy --override-context myapp.prod envsec cmd run deploy -o myapp.prod

Inject all context secrets as env vars when running a saved command

envsec cmd run deploy --inject envsec cmd run deploy -i

root@kitploit:~
#### cmd search

Durchsucht gespeicherte Befehle nach Namen oder Befehlstext.

- `<pattern>` — Suchmuster
- `--name`, `-n` — Durchsucht nur Befehlsnamen
- `--command`, `-m` — Durchsucht nur Befehlstexte```bash
envsec cmd search psql

# Search only by name
envsec cmd search deploy -n

# Search only by command string
envsec cmd search kubectl -m

cmd delete

Lösche einen gespeicherten Befehl.

  • <name> — Name des zu löschenden Befehls```bash envsec cmd delete deploy
root@kitploit:~
### Generate a .env file

Alle Geheimnisse aus einem Kontext in eine `.env`-Datei exportieren.

- `--output`, `-o` — Ausgabedateipfad (Standard: `.env`)```bash
# Creates .env with all secrets from the context
envsec -c myapp.dev env-file

# Specify a custom output path
envsec -c myapp.dev env-file --output .env.local

Keys are converted to UPPER_SNAKE_CASE (e.g. api.token → API_TOKEN).

Geheimnisse als Umgebungsvariablen exportieren

Export-Anweisungen zur Verwendung mit eval oder Shell-Sourcing ausgeben.

  • --shell, -s — Ziel-Shell-Syntax: bash (Standard), zsh, fish, powershell
  • --unset, -u — Statt Export Unset/Remove-Befehle ausgeben```bash

Output export statements for eval (bash/zsh)

eval $(envsec -c myapp.dev env)

Specify target shell syntax

envsec -c myapp.dev env --shell fish envsec -c myapp.dev env --shell powershell

Output unset commands to clean up exported variables

eval $(envsec -c myapp.dev env --unset)

Combine shell and unset

envsec -c myapp.dev env --unset --shell fish

root@kitploit:~
Unterstützte Shells: `bash` (Standard), `zsh`, `fish`, `powershell`. Schlüssel werden in `UPPER_SNAKE_CASE` konvertiert (z. B. `api.token` → `API_TOKEN`). Die Ausgabe erfolgt nach stdout, sodass sie an `eval` weitergeleitet oder direkt mit `source` eingelesen werden kann — es wird keine Datei auf die Festplatte geschrieben.

### Starten einer geheimnisbezogenen Shell-Sitzung

Erzeugt eine interaktive Subshell, in die alle Geheimnisse aus dem Kontext als Umgebungsvariablen injiziert werden. Wenn Sie `exit` ausführen, sind die Geheimnisse verschwunden — keine Bereinigung erforderlich.

- `--shell`, `-s` — Zu startende Shell (`bash`, `zsh`, `fish`, `powershell`). Standard: automatische Erkennung
- `--no-inherit` — Übergeordnete Umgebungsvariablen nicht übernehmen
- `--quiet`, `-q` — Start-/Beendigungsbanner unterdrücken```bash
envsec -c myapp.dev shell
  • DNSCrypt - Ein Protokoll zur Verbesserung der DNS-Sicherheit durch Verschlüsselung von DNS-Anfragen und -Antworten.

Domain-Blacklist

  • hosts - Erweitert und konsolidiert Hosts-Dateien aus einer Vielzahl von Quellen wie adaway.org, mvps.org, malwaredomainlist.com, someonewhocares.org, yoyo.org und möglicherweise anderen. Sie können optional Erweiterungen aufrufen, um zusätzliche Kategorien nach Kategorie zu blockieren.
  • pi-hole - Netzwerkweite Werbeblockierung über Ihren eigenen DNS-Sinkhole
  • Blocklist-IPSets - IPSets, die dynamisch mit FireHOL aktualisiert werden, und erstellen eine weitgehend umfassende Blacklist mit IP-Listen, die Angreifer, Spammer, bösartige IPs und mehr verfolgen.
  • Blocklist of hostnames and domains - Eine Liste von Hostnamen und Domains, kategorisiert nach der Art des von ihnen bereitgestellten Inhalts. Sie umfasst Kategorien wie Werbung, Malware und Tracking.
  • Hosts-BL - Ein einfaches Tool zur Hosts-Datei-Integration, das relevante Ausnahmen behandelt und Aktualisierungen aus mehreren Quellen ermöglicht und diese in einer Blacklist konsolidiert.``` ▶ envsec shell — context: myapp.dev (8 secrets loaded) Type 'exit' or press Ctrl+D to leave the session.

(envsec:myapp.dev) ~ $ echo $DATABASE_URL postgres://user:pass@localhost/mydb

(envsec:myapp.dev) ~ $ exit → Exiting envsec shell — secrets cleared.

root@kitploit:~
## Kurzbefehle```bash
# Force a specific shell
envsec -c myapp.dev shell --shell zsh

# Only envsec secrets in env (no parent variables, except PATH)
envsec -c myapp.dev shell --no-inherit

# Suppress the startup/exit banner
envsec -c myapp.dev shell --quiet

Die Variable ENVSEC_CONTEXT wird immer innerhalb der Sitzung gesetzt, sodass Sie sie in Skripten oder Prompt-Anpassungen referenzieren können.

Geheimnisse aus einer .env-Datei laden

Importieren Sie Geheimnisse aus einer .env-Datei in einen Kontext.

  • --input, -i — Eingabe .env Dateipfad (Standard: .env)
  • --force, -f — Vorhandene Geheimnisse ohne Nachfrage überschreiben
  • --batch, -b — Batch-Modus: Datenbankpersistenz verschieben, bis alle Geheimnisse importiert sind```bash

Import secrets from .env into the context

envsec -c myapp.dev load

Specify a custom input file

envsec -c myapp.dev load --input .env.local

Overwrite existing secrets without warning

envsec -c myapp.dev load --force

root@kitploit:~
Schlüssel werden von `UPPER_SNAKE_CASE` in `dotted.lowercase` umgewandelt (z.B. `API_TOKEN` → `api.token`). Falls ein Schlüssel bereits existiert, wird er mit einer Warnung übersprungen, es sei denn, `--force` (`-f`) wird angegeben.

### Geheimnisse teilen (GPG-verschlüsselt)

Verschlüsselt alle Geheimnisse aus einem Kontext für ein Teammitglied mittels GPG.

- `--encrypt-to` — GPG-Empfängerschlüssel (E-Mail, Schlüssel-ID oder Fingerabdruck), für den verschlüsselt werden soll
- `--output`, `-o` — Ausgabedateipfad (Standard: stdout). Verwenden Sie `-` explizit für stdout
- `--json` — JSON-Format innerhalb der verschlüsselten Nutzlast verwenden (Standard: `.env`-Format)```bash
# Encrypt all secrets from a context for a team member
envsec -c myapp.dev share --encrypt-to [email protected]

# Save encrypted output to a file
envsec -c myapp.dev share --encrypt-to [email protected] -o secrets.enc

# Use JSON format inside the encrypted payload
envsec -c myapp.dev --json share --encrypt-to [email protected] -o secrets.enc

Der Empfänger kann mit gpg --decrypt secrets.enc entschlüsseln und das Ergebnis in envsec load weiterleiten. Standardmäßig verwendet die verschlüsselte Nutzlast das .env-Format (KEY="value"); mit --json verwendet sie ein strukturiertes JSON-Objekt. Erfordert, dass GPG installiert ist und sich der öffentliche Schlüssel des Empfängers in Ihrem Schlüsselbund befindet.

Geheimnisse auf Ablauf prüfen

Überprüfen Sie auf abgelaufene oder ablaufende Geheimnisse und nachverfolgte .env-Dateiexporte.

  • --within, -w — Zeigt Geheimnisse an, die innerhalb dieser Dauer ablaufen (Standard: 30d). Verwenden Sie 0d, um nur bereits abgelaufene anzuzeigen
  • --json — Ausgabe im JSON-Format```bash

Check for expired or expiring secrets in a context (default window: 30 days)

envsec -c myapp.dev audit

Specify a custom window

envsec -c myapp.dev audit --within 7d

Show only already-expired secrets

envsec -c myapp.dev audit --within 0d

Audit across all contexts (omit --context)

envsec audit

JSON output

envsec -c myapp.dev audit --json

root@kitploit:~
Geheimnisse mit einer über `envsec add` festgelegten `--expires`-Dauer werden in den Metadaten nachverfolgt. Der Befehl `audit` durchsucht nach Geheimnissen, die bereits abgelaufen sind oder innerhalb des angegebenen Zeitfensters ablaufen. Die Befehle `get` und `list` zeigen ebenfalls Ablaufwarnungen inline an.

Der Befehl `audit` verfolgt auch generierte `.env`-Dateien. Jedes Mal, wenn `env-file` verwendet wird, werden der Ausgabepfad, der Kontext und der Zeitstempel aufgezeichnet. Die Audit-Ausgabe enthält einen zweiten Abschnitt, der diese Dateien auflistet. Wenn eine nachverfolgte `.env`-Datei nicht mehr auf der Festplatte vorhanden ist, entfernt audit sie automatisch aus den Metadaten und meldet die Bereinigung.

### Ein zufälliges Geheimnis generieren

Generieren Sie ein kryptografisch sicheres zufälliges Geheimnis, optional mit Speicherung.

- `<key>` — Name des Geheimnisschlüssels (optional; weglassen für eigenständige Passwortgenerierung)
- `--length`, `-l` — Länge des generierten Geheimnisses (Standard: `32`)
- `--prefix`, `-p` — Präfix, das dem generierten Geheimnis vorangestellt wird (z.B. `sk_`)
- `--expires`, `-e` — Ablaufdauer (z.B. `30m`, `2h`, `7d`, `4w`, `3mo`, `1y`)
- `--alphanumeric`, `-a` — Nur alphanumerische Zeichen verwenden `[a-zA-Z0-9]` (Standard)
- `--special`, `-s` — Häufige Sonderzeichen einbeziehen `[a-zA-Z0-9!@#$%^&*]`
- `--all-chars`, `-A` — Alle druckbaren ASCII-Zeichen für maximale Entropie verwenden```bash
# Generate and store a 32-char alphanumeric secret
envsec -c myapp.dev secret api.key

# Custom length and prefix
envsec -c myapp.dev secret api.key --prefix "sk_" --length 48

# Character sets:
#   --alphanumeric (-a)  [a-zA-Z0-9] (default)
#   --special (-s)       [a-zA-Z0-9] + !@#$%^&*
#   --all-chars (-A)     all printable ASCII
envsec -c myapp.dev secret db.password --special --length 64

# With expiry
envsec -c myapp.dev secret api.key --prefix "sk_" -l 48 --expires 90d

# Standalone password generator (no store, just print)
envsec secret --length 32
envsec secret --special --length 64 --prefix "pk_"

Wenn sowohl Kontext als auch Schlüssel angegeben werden, wird der generierte Wert gespeichert und ausgegeben. Ohne beides wird der rohe Wert nach stdout ausgegeben — nützlich zum Weiterleiten an pbcopy, xclip oder andere Tools.

Interaktive TUI

envsec enthält eine Vollbild-Terminal-Benutzeroberfläche zum interaktiven Verwalten von Geheimnissen — kein Auswendiglernen von Befehlen erforderlich.```bash

Launch the TUI

envsec tui

Launch with a pre-selected context

envsec -c myapp.dev tui

root@kitploit:~
Die TUI bietet acht über das Hauptmenü erreichbare Bildschirme:

- **Kontexte** — alle Kontexte durchsuchen, aktiven Kontext mit `s` setzen, Kontext mit `x` löschen, Geheimnisanzahl anzeigen, gesamte Kontexte löschen
- **Geheimnisse** — Geheimnisse in einer Tabelle auflisten, Werte anzeigen, Geheimnisse hinzufügen oder löschen
- **Geheimnis hinzufügen** — interaktives Formular mit maskierter Eingabe und optionaler Ablaufdauer
- **Suche** — Glob-Muster-Suche über Geheimnisse oder Kontexte
- **Gespeicherte Befehle** — gespeicherte Befehlsvorlagen auflisten, anzeigen und löschen
- **Prüfung** — nach abgelaufenen/ablaufenden Geheimnissen suchen, exportierte `.env`-Dateien überprüfen
- **.env importieren** — Geheimnisse aus einer `.env`-Datei in den aktuellen Kontext laden
- **.env exportieren** — Geheimnisse in eine `.env`-Datei exportieren (für die Prüfung nachverfolgt)

Tastaturkürzel:

| Taste | Aktion |
|-------|--------|
| `↑` / `↓` | Navigieren Sie durch Menüpunkte und Tabellenzeilen |
| `Enter` | Auswählen / bestätigen |
| `c` | Kontextansicht öffnen (Hauptmenü) |
| `s` | Ausgewählten als aktiven Kontext setzen (Kontextansicht) |
| `x` | Aktiven Kontext löschen (Kontextansicht) |
| `a` | Neues Geheimnis hinzufügen (Geheimnisansicht) |
| `d` | Ausgewähltes Element löschen |
| `r` | Geheimniswert anzeigen (Detailansicht) |
| `Esc` | Zurück / abbrechen |
| `q` | TUI beenden |

### Diagnose für Ihr Setup

Führen Sie Gesundheitschecks aus, um Ihre envsec-Installation zu überprüfen.

- `--json` — Ausgabe im JSON-Format für Skripte```bash
# Run all health checks
envsec doctor

# JSON output for scripting
envsec --json doctor

Der Befehl doctor überprüft, ob Ihre envsec-Installation korrekt funktioniert. Er prüft:

  • Plattformunterstützung und Node.js-Version
  • Verfügbarkeit des Credential-Stores (macOS Keychain, Linux secret-tool, Windows cmdkey)
  • Lese-/Schreibzugriff auf die Keychain
  • Datenbankpfad, Berechtigungen und Schema-Integrität
  • Verwaiste Secrets (Metadaten ohne Keychain-Eintrag)
  • Abgelaufene Secrets
  • Umgebungsvariablen (ENVSEC_DB, ENVSEC_CONTEXT)
  • Aktuelle Shell

Shell-Vervollständigung

envsec unterstützt dynamische Tab-Vervollständigung für bash, zsh und fish. Vervollständigungen sind kontextbewusst: Sie schlagen Ihre tatsächlichen Kontextnamen, Secret-Schlüssel und gespeicherten Befehlsnamen in Echtzeit vor, indem sie die Metadaten-Datenbank abfragen.```bash

Bash (add to ~/.bashrc)

eval "$(envsec --completions bash)"

Zsh (add to ~/.zshrc)

eval "$(envsec --completions zsh)"

Fish (add to ~/.config/fish/config.fish)

envsec --completions fish | source

root@kitploit:~
Was dynamisch vervollständigt wird:
- `--context` / `-c` — listet alle Ihre Kontexte auf
- Secret-Key-Argumente (`get`, `add`, `delete`) — listet Schlüssel für den aktuellen Kontext
- `cmd run` / `cmd delete` — listet gespeicherte Befehlsnamen
- `--override-context` / `-o` — listet Kontexte für `cmd run`
- Unterbefehle, Flags und statische Auswahlen (Shells usw.) werden ebenfalls vervollständigt

## Vergleich

Wie schlägt sich envsec im Vergleich zu anderen Tools zur Verwaltung von Umgebungsgeheimnissen?

| Feature | envsec | dotenv / dotenvx | 1Password CLI (`op`) |
|---|---|---|---|
| Geheimnisspeicherung | Betriebssystem-Anmeldeinformationsspeicher (Keychain, Secret Service, Credential Manager) | `.env`-Dateien auf der Festplatte (dotenvx fügt Verschlüsselung hinzu) | 1Password Cloud Vault |
| Verschlüsselung im Ruhezustand | An das Betriebssystem delegiert (Keychain, GNOME Keyring, DPAPI) | Keine (dotenv) / ECIES pro Datei (dotenvx) | AES-256 in der 1Password Cloud |
| Geheimnisse auf der Festplatte | Niemals — Werte gehen direkt in den OS-Anmeldeinformationsspeicher | Immer — `.env`-Dateien sind standardmäßig Klartext | Niemals lokal (werden zur Laufzeit aus der Cloud abgerufen) |
| Offline-Zugriff | Vollständig — Geheimnisse sind lokal im OS-Speicher | Vollständig — Dateien sind lokal | Erfordert Netzwerk (zwischengespeicherte Elemente offline in der App verfügbar) |
| Konto / Abonnement | Keines — kostenlos, Open Source, keine Registrierung | Kostenlos (dotenv) / kostenlos Open Source (dotenvx) | Bezahltes Abonnement (ab ca. 3 €/Monat für Einzelpersonen, ca. 8 €/Benutzer/Monat für Unternehmen) |
| Plattformübergreifend | macOS, Linux, Windows | Jede Plattform mit Node.js / jeder Runtime (dotenvx) | macOS, Linux, Windows |
| Kontext-/Umgebungsorganisation | Kontexte (z. B. `myapp.dev`, `stripe.prod`) | Separate `.env`-Dateien pro Umgebung | Tresore und Elemente |
| Befehle mit Geheimnissen ausführen | `envsec run` — Platzhalter-Interpolation + `--inject` Umgebungsvariablen | `dotenvx run -- cmd` — fügt aus verschlüsselter `.env` ein | `op run -- cmd` — fügt über Secret-Referenzen ein |
| Export in `.env`-Datei | `envsec env-file` (für Prüfung nachverfolgt) | Natives Format — `.env`-Dateien sind die Quelle der Wahrheit | `op inject --out-file` |
| Import aus `.env`-Datei | `envsec load` (mit Konflikterkennung) | N/V — `.env` ist der primäre Speicher | Manuelle Elementerstellung |
| Shell-Umgebungs-Export | `eval $(envsec env)` — bash, zsh, fish, powershell | `dotenvx run` oder `node -r dotenv/config` | `op run --env-file` |
| Interaktive Shell-Sitzung | `envsec shell` — eingeschränkte Subshell mit automatischer Bereinigung | Nicht integriert | Nicht integriert |
| Geheimnissuche | Glob-Muster auf Schlüsseln und Kontexten | Nicht integriert | `op item list --tags/--category` Filterung |
| Ablauf-/Rotationsprüfung | `envsec audit` — abgelaufene, ablaufende, verfolgte `.env`-Dateien | Nicht integriert | Watchtower (in der App, nicht CLI) |
| Gespeicherte Befehle | `envsec cmd` — speichern, auflisten, suchen, ausführen, löschen | Nicht integriert | Nicht integriert |
| Geheimnisse verschieben/kopieren | `envsec move` und `envsec copy` zwischen Kontexten | Manuelles Kopieren von Dateien | `op item move` zwischen Tresoren |
| Geheimnisse umbenennen | `envsec rename` (bewahrt Wert und Metadaten) | Manuelle Bearbeitung der `.env`-Datei | `op item edit` |
| GPG-verschlüsselte Freigabe | `envsec share --encrypt-to` | Verschlüsselte `.env`-Dateien in Git committet (dotenvx) | Integrierte Tresorfreigabe, Team-Bereitstellung |
| Interaktives TUI | `envsec tui` — Vollbild-Terminal-UI | Nicht integriert | Nicht integriert |
| Gesundheitsdiagnose | `envsec doctor` — überprüft Plattform, Keychain, DB-Integrität | Nicht integriert | Nicht integriert |
| Shell-Vervollständigungen | Dynamisch (Kontexte, Schlüssel, Befehle) für bash, zsh, fish | Nicht integriert | Statische Vervollständigungen für bash, zsh, fish, powershell |
| SDK / programmatischer Zugriff | `@envsec/sdk` für Node.js / Bun | `require('dotenv').config()` — Kernanwendungsfall | 1Password SDKs (Node.js, Python, Go, usw.) |
| Team / Mehrbenutzer | GPG-Freigabe (manuell) | Git-basierte Freigabe mit verschlüsselter `.env` (dotenvx) | Integrierte Teamverwaltung, RBAC, Audit-Logs |
<!-- | CI/CD-Integration | Standard-CLI — funktioniert überall, wo Node.js läuft | `dotenvx run` in jeder CI-Pipeline | Service-Konten, native CI/CD-Integrationen | -->
| Biometrische Authentifizierung | Erbt OS-Biometrie (z. B. macOS Keychain-Entsperrung) | Keine | Fingerabdruck / Touch ID über App-Integration |
| Metadaten-Tracking | SQLite (Schlüsselnamen, Zeitstempel — niemals Werte) | Keine | Cloud-basierte Elementhistorie und Audit-Logs |

Kurz gesagt: dotenv ist der einfachste Ansatz (Dateien auf der Festplatte), die 1Password CLI ist die funktionsreichste für Teams mit Cloud-Synchronisation und RBAC, und envsec liegt dazwischen — bietet OS-native Verschlüsselung ohne Konten, keine Cloud-Abhängigkeiten und einen entwicklerorientierten Arbeitsablauf, der über das hinausgeht, was `.env`-Dateien leisten können.

## So funktioniert es

Geheimnisse werden im nativen OS-Anmeldeinformationsspeicher gespeichert. Das Backend wird automatisch basierend auf der Plattform ausgewählt:

| OS      | Backend                        | Tool / API                          |
|---------|--------------------------------|-------------------------------------|
| macOS   | Keychain                       | `security` CLI                      |
| Linux   | Secret Service API (D-Bus)     | `secret-tool` (libsecret)           |
| Windows | Credential Manager             | `cmdkey` + PowerShell (advapi32)    |

Metadaten (Schlüsselnamen, Zeitstempel) werden in einer SQLite-Datenbank unter `~/.envsec/store.sqlite` gespeichert (konfigurierbar über `--db` oder `ENVSEC_DB`). Schlüssel müssen mindestens einen Punkt als Trennzeichen enthalten (z. B. `service.account`), was der Service/Account-Struktur des Anmeldeinformationsspeichers entspricht.

## Sicherheit

envsec basiert auf einem einfachen Prinzip: Ihre Geheimnisse gehören in Ihr Betriebssystem, nicht in Punktdateien. Jede Designentscheidung beginnt mit dieser Grundlage.

### Wie envsec Ihre Geheimnisse schützt

**OS-native Verschlüsselung, keine eigene Kryptografie.** Geheimniswerte werden direkt in macOS Keychain, GNOME Keyring / KDE Wallet oder Windows Credential Manager gespeichert. envsec erfindet keine eigene Verschlüsselung — es delegiert an die kampferprobten Anmeldeinformationsspeicher, die Ihr Betriebssystem bereits bereitstellt, geschützt durch Ihre Benutzersitzung und (auf macOS) die Login-Keychain.

**Vollständige Unicode-Unterstützung.** Geheimniswerte können beliebige Unicode-Zeichen enthalten, einschließlich Emojis und akzentuierter Buchstaben. Werte werden base64-kodiert, bevor sie im OS-Anmeldeinformationsspeicher gespeichert werden, um plattformspezifische Kodierungsspielereien zu vermeiden (z. B. macOS `security` CLI hex-kodiert nicht-ASCII-Ausgabe). Legacy-Klartext-Geheimnisse werden aus Gründen der Rückwärtskompatibilität transparent gelesen.

**Geheimnisse berühren niemals als Klartext die Festplatte.** Werte gehen direkt von Ihrem Terminal in den OS-Anmeldeinformationsspeicher. Sie werden niemals in Konfigurationsdateien, Protokolle oder temporären Speicher geschrieben.

**Keine Geheimnisse in der Terminalausgabe.** Die Befehle `list` und `search` zeigen nur Schlüsselnamen an — Werte werden nie ausgegeben. Dadurch bleiben Geheimnisse außerhalb von Scrollback-Puffern, Bildschirmaufnahmen und dem Blickfeld von Mitlesern.

**Sichere Befehlsausführung.** Der Befehl `run` injiziert Geheimnisse als Umgebungsvariablen des untergeordneten Prozesses, anstatt sie in die Befehlszeichenfolge zu interpolieren. Dadurch erscheinen Geheimniswerte nicht in der `ps`-Ausgabe oder der Shell-Historie. Wenn ein referenziertes Geheimnis fehlt, wird der Befehl vollständig blockiert — keine teilweise Ausführung mit unvollständigen Anmeldeinformationen.

**Eingabevalidierung und Injektionsprävention.** Kontextnamen werden gegen eine strenge Positivliste (alphanumerisch, Punkte, Bindestriche, Unterstriche) mit Pfad-Traversal- und Prototype-Pollution-Prüfungen validiert. Alle SQLite-Abfragen verwenden vorbereitete Anweisungen mit Bindungsparametern, um SQL-Injection zu verhindern. PowerShell-Argumente unter Windows werden escaped, um Command-Injection zu verhindern.

**Restriktive Dateiberechtigungen.** Das Metadatenverzeichnis (`~/.envsec/`) wird mit `0700`-Berechtigungen und die SQLite-Datenbank mit `0600` erstellt, wodurch der Zugriff auf den besitzenden Benutzer beschränkt wird.

### Bekannte Einschränkungen und Verbesserungsmöglichkeiten

Wir glauben an Offenheit darüber, was envsec noch nicht abdeckt. Dies sind echte Kompromisse, keine Fehler — und wenn Sie sie verstehen, können Sie fundierte Entscheidungen treffen.

**Metadaten sind sichtbar.** Die SQLite-Datenbank unter `~/.envsec/store.sqlite` speichert Schlüsselnamen, Kontextnamen und Zeitstempel — niemals Geheimniswerte, aber genug, um preiszugeben, *welche* Geheimnisse existieren. Gespeicherte Befehlsvorlagen (mit `{key}`-Platzhaltern) werden ebenfalls dort gespeichert. Wenn die Vertraulichkeit von Metadaten für Sie wichtig ist, stellen Sie sicher, dass Ihr Home-Verzeichnis auf einem verschlüsselten Volume liegt.

**`env-file`-Exporte sind Klartext.** Der Befehl `env-file` schreibt Geheimniswerte in eine `.env`-Datei auf der Festplatte. Dies ist von Natur aus sensibel — behandeln Sie die Ausgabedatei entsprechend und committen Sie sie niemals in die Versionskontrolle. Betrachten Sie es als Komfortbrücke, nicht als Speichermechanismus.

**Shell-Ausführung birgt inhärentes Risiko.** Der Befehl `run` übergibt Ihre Befehlsvorlage an `/bin/sh` (oder `cmd.exe` unter Windows). Wenn die Vorlage selbst aus einer nicht vertrauenswürdigen Quelle stammt, ist Shell-Injection möglich. Führen Sie nur Befehlsvorlagen aus, die Sie selbst geschrieben haben oder denen Sie vertrauen.

**Keine kontextübergreifende Zugriffskontrolle.** Jeder Prozess, der als Ihr OS-Benutzer läuft, kann alle Geheimnisse in allen Kontexten lesen. envsec verlässt sich auf die OS-basierte Benutzerisolierung — es fügt keine eigene Autorisierungsebene zwischen Kontexten hinzu.

**Linux-Headless-Umgebungen.** Unter Linux ist envsec auf eine aktive D-Bus-Sitzung und einen Keyring-Daemon (z. B. `gnome-keyring-daemon`) angewiesen. In Containern oder Headless-Servern ohne grafische Sitzung ist der Keyring möglicherweise nicht verfügbar oder speichert Geheimnisse mit schwächerem Schutz.

**Verschlüsselung hängt von Ihrem Betriebssystem ab.** envsec fügt keine zusätzliche Ruhezustandsverschlüsselung hinzu, die über das hinausgeht, was der native Anmeldeinformationsspeicher bietet. Auf Systemen ohne vollständige Festplattenverschlüsselung könnte ein Angreifer mit physischem Zugriff möglicherweise Geheimnisse aus der Keychain extrahieren. Wir empfehlen die Aktivierung der vollständigen Festplattenverschlüsselung (FileVault, LUKS, BitLocker) für den stärksten Schutz.

## Entwicklung

### Voraussetzungen

- Node.js >= 22
- pnpm

### Einrichtung```bash
git clone https://github.com/davidnussio/envsec.git
cd envsec
pnpm install
pnpm run build

Projektstruktur```

packages/ cli/ → envsec CLI (published as envsec) sdk/ → Node.js/Bun SDK (published as @envsec/sdk) core/ → Core engine, shared by CLI and SDK (published as @envsec/core) tui/ → Interactive terminal UI (published as @envsec/tui) apps/ website/ → Documentation website

root@kitploit:~
### Allgemeine Befehle```bash
# Build all packages
pnpm run build

# Lint and format check (all packages)
pnpm run check

# Auto-fix lint and formatting
pnpm run fix

# Release (build + changeset publish)
pnpm run release

Lokales Ausführen ohne Installation

Erstellen Sie einen temporären Alias, um den lokalen Build so zu verwenden, als wäre er global installiert:```bash

Bash / Zsh

alias envsec="node $(pwd)/packages/cli/dist/main.js"

Fish

alias envsec "node (pwd)/packages/cli/dist/main.js"

root@kitploit:~
### Lokales Testen von Shell-Vervollständigungen

Nach dem Erstellen und Einrichten des Alias laden Sie die Vervollständigungen in Ihrer aktuellen Sitzung:```bash
# Bash
alias envsec="node $(pwd)/packages/cli/dist/main.js"
eval "$(envsec --completions bash)"

# Zsh
alias envsec="node $(pwd)/packages/cli/dist/main.js"
eval "$(envsec --completions zsh)"

# Fish
alias envsec "node (pwd)/packages/cli/dist/main.js"
envsec --completions fish | source

Drücken Sie dann TAB nach envsec -c , um Ihre Kontexte anzuzeigen, oder nach envsec -c myapp.dev get , um geheime Schlüssel zu sehen.

Ausführen von Tests```bash

Build first

pnpm run build

macOS / Linux

bash packages/cli/test/e2e-test.sh

Windows (PowerShell)

pwsh packages/cli/test/e2e-test.ps1

root@kitploit:~
CI läuft automatisch bei Push/PR auf `main` über GitHub Actions und führt dabei `e2e-test.sh` auf macOS und Ubuntu und `e2e-test.ps1` auf Windows aus.

## Lizenz
Tool herunterladen
PaketBeschreibungnpm
envsecCLI-Tool zur Verwaltung von Geheimnissennpm
@envsec/sdkNode.js / Bun SDK zum programmatischen Laden von Geheimnissennpm
@envsec/coreKern-Engine – Adapter für Betriebssystem-Schlüsselspeicher + Metadaten-DBnpm
@envsec/tuiInteraktive Terminal-Benutzeroberfläche für die Geheimnisverwaltungnpm