
sshconfig-lint v0.5.0
Linter basato su regole per i file di configurazione del client OpenSSH che rileva host duplicati, file di identità mancanti, algoritmi deboli, problemi di ordinamento dei wildcard e impostazioni pericolose, con output JSON e codici di uscita compatibili con CI.
sshconfig-lint
Un unico motore per ogni luogo in cui cambia la tua configurazione SSH.
sshconfig-lint individua errori semantici nelle configurazioni del client OpenSSH: host duplicati, percorsi delle identità non validi, opzioni non sicure, algoritmi deboli, ordinamento dei wildcard e catene di Include intricate. Usa gli stessi codici delle regole in locale, negli hook Git, in GitHub Actions e negli editor.
Prova il playground privato nel browser · Impara con esempi interattivi · Leggi tutte le regole
Il verificatore nel browser viene eseguito sul tuo dispositivo. Il contenuto della configurazione non viene caricato e non viene raccolta alcuna telemetria.
Avvio rapido
# 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
Installazione
Homebrew
brew tap Noah4ever/tap
brew install sshconfig-lint
Cargo
cargo install sshconfig-lint
Arch Linux
yay -S sshconfig-lint-bin
La pagina delle release fornisce binari verificati per Linux, macOS e Windows. L'installer di comodo verifica il checksum della release prima di installare:
curl -fsSL https://raw.githubusercontent.com/Noah4ever/sshconfig-lint/main/install.sh | bash
Imposta VERSION=v0.5.0 o INSTALL_DIR=~/.local/bin per sovrascrivere i valori predefiniti.
GitHub Actions
L'Action ufficiale è disponibile nel GitHub Marketplace.
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
I risultati appaiono come annotazioni sul file e sulla riga esatti. L'Action scarica la release corrispondente al suo tag e verifica SHA256SUMS prima dell'esecuzione.
Per i repository con GitHub Code Scanning abilitato, SARIF può essere caricato separatamente:
- 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: v1.0.0
hooks:
- id: sshconfig-lint-strict
Usa id: sshconfig-lint quando gli avvisi non devono bloccare un commit. Sovrascrivi files: nel tuo progetto quando le configurazioni usano una convenzione di denominazione diversa.
Editor
VS Code
Installa l'estensione VS Code dal Marketplace oppure esegui:
code --install-extension NoahThiering.sshconfig-lint
L'estensione avvia sshconfig-lint lsp, scarica una volta un binario verificato corrispondente e poi funziona offline. Riconosce .ssh/config, ssh_config e dot_ssh/config di chezmoi. Non viene raccolta alcuna telemetria. Il suo codice sorgente è disponibile in editors/vscode.
Neovim
L'esempio testato editors/neovim usa il client
LSP integrato di Neovim. Copia il suo piccolo modulo Lua nella tua configurazione e avvialo con:
require("sshconfig_lint").setup()
Usa lo stesso server sshconfig-lint lsp di VS Code e supporta un percorso
personalizzato del binario.
Qualsiasi editor con supporto LSP può avviare:
sshconfig-lint lsp
Il language server v0.5 pubblica diagnostiche sull'intera riga all'apertura, alla modifica e al salvataggio. I buffer senza titolo eseguono solo le regole sul contenuto; i file salvati risolvono inoltre Include e i percorsi del filesystem. I risultati degli Include annidati vengono associati al file incluso e cancellati con il documento radice.
Formati di output
sshconfig-lint --format text
sshconfig-lint --format json
sshconfig-lint --format github
sshconfig-lint --format sarif
I risultati JSON contengono severity, code, rule, line, file, message, hint e documentation. I codici delle regole e i codici di uscita sono interfacce di automazione stabili.
| Exit | Significato |
|---|---|
0 | Nessun risultato a livello di errore e nessun avviso con --strict |
1 | Almeno un risultato bloccante |
2 | Almeno una configurazione richiesta non è stata letta |
Regole
Le guide delle regole mostrano il frammento errato esatto, una configurazione corretta, perché è importante e come verificare il risultato con OpenSSH.
INVALID_VALUE controlla porte, contatori di retry e prompt, impostazioni alive, ForwardX11Timeout, RequiredRSASize, ControlPersist, switch booleani, ObscureKeystrokeTiming, valori temporali di OpenSSH, StreamLocalBindMask, IPQoS e insiemi di valori documentati come AddressFamily, ControlMaster, StrictHostKeyChecking, LogLevel e PubkeyAuthentication. I valori tra virgolette e senza distinzione tra maiuscole e minuscole accettati da OpenSSH rimangono validi. Il linter accetta la sintassi moderna senza cercare di dedurre la versione del client SSH che consumerà la configurazione.
I controlli sul filesystem saltano i percorsi che contengono token percentuali o variabili d'ambiente perché il loro valore finale dipende dal contesto della connessione. LOCAL_COMMAND_DISABLED è analogamente conservativo: viene soppresso quando un Include non risolto o un possibile PermitLocalCommand yes potrebbe rendere effettivo il comando. Risolvi gli Include tramite la normale CLI o un documento dell'editor salvato per il risultato più preciso.
Sviluppo
Richiede Rust 1.85 o successivo.
cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check
Vedi CONTRIBUTING.md, la roadmap pubblica, il contratto di stabilità v1 e la politica di sicurezza.
Licenza
MIT