
sshconfig-lint v0.5.0
Linter basé sur des règles pour les fichiers de configuration du client OpenSSH qui détecte les hôtes en double, les fichiers d'identité manquants, les algorithmes faibles, les problèmes d'ordre des jokers et les paramètres dangereux avec sortie JSON et codes de sortie adaptés à CI.
sshconfig-lint
Un seul moteur pour tous les endroits où votre configuration SSH change.
sshconfig-lint détecte les erreurs sémantiques dans les configurations client OpenSSH : hôtes en double, chemins d'identité cassés, options dangereuses, algorithmes faibles, ordre des jokers et chaînes Include emmêlées. Utilisez les mêmes codes de règle en local, dans les hooks Git, GitHub Actions et les éditeurs.
Essayez le playground privé dans le navigateur · Apprenez avec des exemples interactifs · Lisez toutes les règles
Le vérificateur dans le navigateur s'exécute sur votre appareil. Le contenu des configurations n'est pas téléversé et aucune télémétrie n'est collectée.
Démarrage rapide
# 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
Installation
Homebrew
brew tap Noah4ever/tap
brew install sshconfig-lint
Cargo
cargo install sshconfig-lint
Arch Linux
yay -S sshconfig-lint-bin
La page des versions fournit des binaires vérifiés pour Linux, macOS et Windows. L'installateur de commodité vérifie la somme de contrôle de la version avant l'installation :
curl -fsSL https://raw.githubusercontent.com/Noah4ever/sshconfig-lint/main/install.sh | bash
Définissez VERSION=v0.5.0 ou INSTALL_DIR=~/.local/bin pour remplacer les valeurs par défaut.
GitHub Actions
L'Action officielle est disponible dans le 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
Les résultats apparaissent sous forme d'annotations sur le fichier et la ligne exacts. L'Action télécharge la version correspondant à son tag et vérifie SHA256SUMS avant l'exécution.
Pour les dépôts avec GitHub Code Scanning activé, SARIF peut être téléversé séparément :
- 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
Utilisez id: sshconfig-lint lorsque les avertissements ne doivent pas bloquer un commit. Remplacez files: dans votre projet lorsque les configurations utilisent une autre convention de nommage.
Éditeurs
VS Code
Installez l'extension VS Code depuis le Marketplace ou exécutez :
code --install-extension NoahThiering.sshconfig-lint
L'extension démarre sshconfig-lint lsp, télécharge une fois un binaire vérifié correspondant, puis fonctionne hors ligne. Elle reconnaît .ssh/config, ssh_config et dot_ssh/config de chezmoi. Aucune télémétrie n'est collectée. Son code source est disponible dans editors/vscode.
Neovim
L'exemple testé editors/neovim utilise le client LSP intégré de Neovim. Copiez son petit module Lua dans votre configuration et démarrez-le avec :
require("sshconfig_lint").setup()
Il utilise le même serveur sshconfig-lint lsp que VS Code et prend en charge un chemin de binaire personnalisé.
Tout éditeur prenant en charge le LSP peut démarrer :
sshconfig-lint lsp
Le serveur de langage v0.5 publie des diagnostics sur toute la ligne à l'ouverture, à la modification et à l'enregistrement. Les tampons non enregistrés exécutent uniquement les règles de contenu ; les fichiers enregistrés résolvent en plus les Include et les chemins du système de fichiers. Les résultats provenant d'Includes imbriqués sont attachés au fichier inclus et effacés avec le document racine.
Formats de sortie
sshconfig-lint --format text
sshconfig-lint --format json
sshconfig-lint --format github
sshconfig-lint --format sarif
Les résultats JSON contiennent severity, code, rule, line, file, message, hint et documentation. Les codes de règle et les codes de sortie sont des interfaces d'automatisation stables.
| Sortie | Signification |
|---|---|
0 | Aucun résultat de niveau erreur, et aucun avertissement avec --strict |
1 | Au moins un résultat bloquant |
2 | Au moins une configuration demandée n'a pas pu être lue |
Règles
Les guides de règles montrent le fragment cassé exact, une configuration corrigée, pourquoi cela compte et comment vérifier le résultat avec OpenSSH.
INVALID_VALUE vérifie les ports, les compteurs de tentatives et d'invites, les paramètres alive, ForwardX11Timeout, RequiredRSASize, ControlPersist, les commutateurs booléens, ObscureKeystrokeTiming, les valeurs de temps OpenSSH, StreamLocalBindMask, IPQoS et les ensembles de valeurs documentés tels que AddressFamily, ControlMaster, StrictHostKeyChecking, LogLevel et PubkeyAuthentication. Les valeurs entre guillemets et insensibles à la casse acceptées par OpenSSH restent valides. Le linter accepte la syntaxe moderne sans tenter de déduire la version du client SSH qui consommera la configuration.
Les vérifications du système de fichiers ignorent les chemins contenant des jetons de pourcentage ou des variables d'environnement, car leur valeur finale dépend du contexte de connexion. LOCAL_COMMAND_DISABLED est également prudent : il est supprimé lorsqu'un Include non résolu ou tout PermitLocalCommand yes possible pourrait rendre la commande effective. Résolvez les Includes via la CLI normale ou un document d'éditeur enregistré pour un résultat plus précis.
Développement
Nécessite Rust 1.85 ou plus récent.
cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check
Voir CONTRIBUTING.md, la feuille de route publique, le contrat de stabilité v1 et la politique de sécurité.
Licence
MIT