
sshconfig-lint v0.5.0
Regelbasierter Linter für OpenSSH-Client-Konfigurationsdateien, der doppelte Hosts, fehlende Identitätsdateien, schwache Algorithmen, Probleme mit der Wildcard-Reihenfolge und gefährliche Einstellungen erkennt und eine JSON-Ausgabe sowie CI-freundliche Exit-Codes bietet.
sshconfig-lint
Eine Engine für jeden Ort, an dem sich deine SSH-Konfiguration ändert.
sshconfig-lint findet semantische Fehler in OpenSSH-Client-Konfigurationen: doppelte Hosts, defekte Identity-Pfade, unsichere Optionen, schwache Algorithmen, Wildcard-Reihenfolge und verworrene Include-Ketten. Verwende dieselben Regelcodes lokal, in Git-Hooks, GitHub Actions und Editoren.
Browser-Playground ausprobieren · Mit interaktiven Beispielen lernen · Jede Regel lesen
Der Browser-Check läuft auf deinem Gerät. Konfigurationsinhalte werden nicht hochgeladen und es werden keine Telemetriedaten gesammelt.
Schnellstart
# ~/.ssh/config prüfen
sshconfig-lint
# eine oder mehrere Repository-Konfigurationen prüfen
sshconfig-lint .ssh/config infrastructure/ssh_config
# bei Warnungen und Fehlern fehlschlagen
sshconfig-lint .ssh/config --strict
Installation
Homebrew
brew tap Noah4ever/tap
brew install sshconfig-lint
Cargo
cargo install sshconfig-lint
Arch Linux
yay -S sshconfig-lint-bin
Die Release-Seite bietet verifizierte Binärdateien für Linux, macOS und Windows. Das praktische Installationsskript verifiziert die Release-Prüfsumme vor der Installation:
curl -fsSL https://raw.githubusercontent.com/Noah4ever/sshconfig-lint/main/install.sh | bash
Setze VERSION=v0.5.0 oder INSTALL_DIR=~/.local/bin, um die Standardwerte zu überschreiben.
GitHub Actions
name: SSH config
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Noah4ever/[email protected]
with:
paths: |
.ssh/config
infrastructure/ssh_config
strict: true
Ergebnisse erscheinen als Annotationen an der genauen Datei und Zeile. Die Action lädt das Release herunter, das zu ihrem Tag passt, und verifiziert SHA256SUMS vor der Ausführung.
Für Repositories mit aktiviertem GitHub Code Scanning kann SARIF separat hochgeladen werden:
- run: sshconfig-lint .ssh/config --format sarif > sshconfig-lint.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: sshconfig-lint.sarif
Pre-Commit
repos:
- repo: https://github.com/Noah4ever/sshconfig-lint
rev: v0.5.0
hooks:
- id: sshconfig-lint-strict
Verwende id: sshconfig-lint, wenn Warnungen einen Commit nicht blockieren sollen. Überschreibe files: in deinem Projekt, wenn Konfigurationen eine andere Namenskonvention verwenden.
Editoren
Installiere die VS-Code-Erweiterung aus dem Marketplace oder führe Folgendes aus:
code --install-extension NoahThiering.sshconfig-lint
Die Erweiterung startet sshconfig-lint lsp, lädt einmalig eine passende verifizierte Binärdatei herunter und arbeitet dann offline. Sie erkennt .ssh/config, ssh_config und chezmois dot_ssh/config. Es werden keine Telemetriedaten gesammelt. Der Quellcode ist in editors/vscode verfügbar.
Jeder Editor mit LSP-Unterstützung kann Folgendes starten:
sshconfig-lint lsp
Der v0.5-Sprachserver veröffentlicht Diagnosen über die gesamte Zeile bei Öffnen, Änderung und Speichern. Unbenannte Puffer führen nur inhaltsbezogene Regeln aus; gespeicherte Dateien lösen zusätzlich Include- und Dateisystempfade auf.
Ausgabeformate
sshconfig-lint --format text
sshconfig-lint --format json
sshconfig-lint --format github
sshconfig-lint --format sarif
JSON-Ergebnisse enthalten severity, code, rule, line, file, message, hint und documentation. Regelcodes und Exit-Codes sind stabile Automatisierungsschnittstellen.
| Exit | Bedeutung |
|---|---|
0 | Kein Fehler-Level-Ergebnis und keine Warnungen mit --strict |
1 | Mindestens ein blockierendes Ergebnis |
2 | Mindestens eine angeforderte Konfiguration konnte nicht gelesen werden |
Regeln
| Code | Regel | Schweregrad |
|---|---|---|
DUP_HOST | Doppelter Host-Block | Warnung |
MISSING_IDENTITY | IdentityFile nicht gefunden | Fehler |
WILDCARD_ORDER | Host-Wildcard-Reihenfolge | Warnung |
WEAK_ALGO | Schwacher Algorithmus | Warnung |
DUP_DIRECTIVE | Doppelte Direktive | Warnung |
INSECURE_OPT | Unsichere Option | Warnung |
UNSAFE_CTRL_PATH | Unsichere ControlPath | Warnung |
INCLUDE_CYCLE | Include-Zyklus | Fehler |
INCLUDE_READ | Include kann nicht gelesen werden | Fehler |
INCLUDE_GLOB | Ungültiges Include-Muster | Fehler |
INCLUDE_NO_MATCH | Include passt auf keine Dateien | Info |
Die Regelanleitungen zeigen das genaue fehlerhafte Fragment, eine korrigierte Konfiguration, warum es wichtig ist und wie das Ergebnis mit OpenSSH überprüft werden kann.
Entwicklung
Erfordert Rust 1.85 oder neuer.
cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check
Siehe CONTRIBUTING.md, die öffentliche Roadmap und die Sicherheitsrichtlinie.
Lizenz
MIT