Retour aux mises à jour
New releaseSep 3, 2026

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.

Partager

sshconfig-lint

Tests crates.io License: MIT

Un seul moteur pour chaque endroit où votre configuration SSH change.

sshconfig-lint détecte les erreurs sémantiques dans les configurations client OpenSSH : hôtes en double, chemins IdentityFile cassés, options dangereuses, algorithmes faibles, ordre des wildcards et chaînes Include emmêlées. Utilisez les mêmes codes de règle localement, dans les hooks Git, GitHub Actions et les éditeurs.

Essayez le playground navigateur privé · Apprenez avec des exemples interactifs · Lisez chaque règle

Le vérificateur navigateur s'exécute sur votre appareil. Le contenu des configurations n'est pas téléchargé et aucune télémétrie n'est collectée.

Démarrage rapide

# vérifier ~/.ssh/config
sshconfig-lint

# vérifier une ou plusieurs configurations de dépôt
sshconfig-lint .ssh/config infrastructure/ssh_config

# échouer sur les avertissements et les erreurs
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 pratique 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

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échargé 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: v0.5.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

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.

Tout éditeur avec support LSP peut démarrer :

sshconfig-lint lsp

Le serveur de langage v0.5 publie des diagnostics sur toute la ligne à l'ouverture, au changement et à l'enregistrement. Les buffers sans titre exécutent des règles basées uniquement sur le contenu ; les fichiers enregistrés résolvent en plus Include et les chemins du système de fichiers.

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.

ExitSignification
0Aucun résultat de niveau erreur, et aucun avertissement avec --strict
1Au moins un résultat bloquant
2Au moins une configuration demandée n'a pas pu être lue

Règles

CodeRègleSévérité
DUP_HOSTBloc Host en doubleavertissement
MISSING_IDENTITYIdentityFile introuvableerreur
WILDCARD_ORDEROrdre des wildcards Hostavertissement
WEAK_ALGOAlgorithme faibleavertissement
DUP_DIRECTIVEDirective en doubleavertissement
INSECURE_OPTOption non sécuriséeavertissement
UNSAFE_CTRL_PATHControlPath non sécuriséavertissement
INCLUDE_CYCLECycle Includeerreur
INCLUDE_READInclude illisibleerreur
INCLUDE_GLOBModèle Include invalideerreur
INCLUDE_NO_MATCHInclude ne correspond à aucun fichierinfo

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.

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 et la politique de sécurité.

Licence

MIT

Catégories