
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.
Eine Engine für jeden Ort, an dem sich deine SSH-Konfiguration ändert.
sshconfig-lint findet semantische Fehler in OpenSSH-Client-Konfigurationen: doppelte Hosts, fehlerhafte Identitätspfade, unsichere Optionen, schwache Algorithmen, Wildcard-Reihenfolge und verworrene Include-Ketten. Verwende dieselben Regelcodes lokal, in Git-Hooks, GitHub Actions und Editoren.
Probiere den privaten Browser-Playground aus · Lerne mit interaktiven Beispielen · Lies jede Regel
Der Browser-Checker läuft auf deinem Gerät. Konfigurationsinhalte werden nicht hochgeladen und es werden keine Telemetriedaten erfasst.
# check ~/.ssh/config
sshconfig-lint
# check one or more repository configs
sshconfig-lint .ssh/config infrastructure/ssh_config
# fail on warnings and errors
sshconfig-lint .ssh/config --strict
brew tap Noah4ever/tap
brew install sshconfig-lint
cargo install sshconfig-lint
yay -S sshconfig-lint-bin
Die Release-Seite bietet verifizierte Binärdateien für Linux, macOS und Windows. Der Komfort-Installer überprüft 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.
Die offizielle Action ist im GitHub Marketplace verfügbar.
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
Befunde erscheinen als Annotationen an der exakten Datei und Zeile. Die Action lädt das zu ihrem Tag passende Release herunter und überprüft 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
repos:
- repo: https://github.com/Noah4ever/sshconfig-lint
rev: v1.0.0
hooks:
- id: sshconfig-lint-strict
Verwende id: sshconfig-lint, wenn Warnungen einen Commit nicht blockieren sollen. Überschreibe files: in deinem Projekt, wenn Konfigurationen einer anderen Namenskonvention folgen.
Installiere die VS Code-Erweiterung aus dem Marketplace oder führe aus:
code --install-extension NoahThiering.sshconfig-lint
Die Erweiterung startet sshconfig-lint lsp, lädt einmalig eine passende verifizierte Binärdatei herunter und funktioniert danach offline. Sie erkennt .ssh/config, ssh_config und chezmois dot_ssh/config. Es werden keine Telemetriedaten erfasst. Der Quellcode ist in editors/vscode verfügbar.
Das getestete Beispiel editors/neovim verwendet den integrierten
LSP-Client von Neovim. Kopiere sein kleines Lua-Modul in deine Konfiguration und starte es mit:
require("sshconfig_lint").setup()
Es verwendet denselben sshconfig-lint lsp-Server wie VS Code und unterstützt einen benutzerdefinierten
Binärpfad.
Jeder Editor mit LSP-Unterstützung kann starten:
sshconfig-lint lsp
Der v0.5-Sprachserver veröffentlicht Diagnosen über die gesamte Zeile beim Öffnen, Ändern und Speichern. Unbenannte Puffer führen nur inhaltsbezogene Regeln aus; gespeicherte Dateien lösen zusätzlich Include und Dateisystempfade auf. Befunde aus verschachtelten Includes werden an die eingebundene Datei angehängt und mit dem Wurzeldokument gelöscht.
sshconfig-lint --format text
sshconfig-lint --format json
sshconfig-lint --format github
sshconfig-lint --format sarif
JSON-Befunde enthalten severity, code, rule, line, file, message, hint und documentation. Regelcodes und Exit-Codes sind stabile Automatisierungsschnittstellen.
| Exit | Bedeutung |
|---|---|
0 | Kein Befund auf Fehlerstufe und keine Warnungen mit --strict |
1 | Mindestens ein blockierender Befund |
2 | Mindestens eine angeforderte Konfiguration konnte nicht gelesen werden |