
sshconfig-lint v0.5.0
Linter basado en reglas para archivos de configuración del cliente OpenSSH que detecta hosts duplicados, archivos de identidad faltantes, algoritmos débiles, problemas de orden de comodines y configuraciones peligrosas con salida JSON y códigos de salida aptos para CI.
sshconfig-lint
Un único motor para cada lugar donde cambia tu configuración de SSH.
sshconfig-lint detecta errores semánticos en configuraciones de cliente OpenSSH: hosts duplicados, rutas de identidad rotas, opciones inseguras, algoritmos débiles, orden de comodines y cadenas de Include enredadas. Usa los mismos códigos de regla localmente, en Git hooks, GitHub Actions y editores.
Prueba el playground privado en el navegador · Aprende con ejemplos interactivos · Lee todas las reglas
El verificador del navegador se ejecuta en tu dispositivo. El contenido de la configuración no se sube y no se recopila telemetría.
Inicio rápido
# verifica ~/.ssh/config
sshconfig-lint
# verifica una o más configuraciones del repositorio
sshconfig-lint .ssh/config infrastructure/ssh_config
# falla ante advertencias y errores
sshconfig-lint .ssh/config --strict
Instalación
Homebrew
brew tap Noah4ever/tap
brew install sshconfig-lint
Cargo
cargo install sshconfig-lint
Arch Linux
yay -S sshconfig-lint-bin
La página de lanzamientos proporciona binarios verificados para Linux, macOS y Windows. El instalador de conveniencia verifica la suma de comprobación del lanzamiento antes de instalar:
curl -fsSL https://raw.githubusercontent.com/Noah4ever/sshconfig-lint/main/install.sh | bash
Establece VERSION=v0.5.0 o INSTALL_DIR=~/.local/bin para sobrescribir los valores predeterminados.
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
Los hallazgos aparecen como anotaciones en el archivo y la línea exactos. La Action descarga el lanzamiento que coincide con su etiqueta y verifica SHA256SUMS antes de la ejecución.
Para repositorios con GitHub Code Scanning habilitado, SARIF se puede subir por separado:
- 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
Usa id: sshconfig-lint cuando las advertencias no deban bloquear un commit. Sobrescribe files: en tu proyecto cuando las configuraciones usen otra convención de nombres.
Editores
Instala la extensión de VS Code desde el Marketplace o ejecuta:
code --install-extension NoahThiering.sshconfig-lint
La extensión inicia sshconfig-lint lsp, descarga un binario verificado coincidente una vez y luego funciona sin conexión. Reconoce .ssh/config, ssh_config y dot_ssh/config de chezmoi. No se recopila telemetría. Su código fuente está disponible en editors/vscode.
Cualquier editor con soporte LSP puede iniciar:
sshconfig-lint lsp
El servidor de lenguaje v0.5 publica diagnósticos de línea completa al abrir, cambiar y guardar. Los buffers sin título ejecutan reglas solo de contenido; los archivos guardados además resuelven Include y rutas del sistema de archivos.
Formatos de salida
sshconfig-lint --format text
sshconfig-lint --format json
sshconfig-lint --format github
sshconfig-lint --format sarif
Los hallazgos JSON contienen severity, code, rule, line, file, message, hint y documentation. Los códigos de regla y los códigos de salida son interfaces de automatización estables.
| Salida | Significado |
|---|---|
0 | Sin hallazgo de nivel error, y sin advertencias con --strict |
1 | Al menos un hallazgo bloqueante |
2 | Al menos una configuración solicitada no pudo leerse |
Reglas
| Código | Regla | Severidad |
|---|---|---|
DUP_HOST | Bloque Host duplicado | advertencia |
MISSING_IDENTITY | IdentityFile no encontrado | error |
WILDCARD_ORDER | Orden de comodines Host | advertencia |
WEAK_ALGO | Algoritmo débil | advertencia |
DUP_DIRECTIVE | Directiva duplicada | advertencia |
INSECURE_OPT | Opción insegura | advertencia |
UNSAFE_CTRL_PATH | ControlPath inseguro | advertencia |
INCLUDE_CYCLE | Ciclo Include | error |
INCLUDE_READ | Include no se puede leer | error |
INCLUDE_GLOB | Patrón Include inválido | error |
INCLUDE_NO_MATCH | Include no coincide con archivos | info |
Las guías de reglas muestran el fragmento roto exacto, una configuración corregida, por qué importa y cómo verificar el resultado con OpenSSH.
Desarrollo
Requiere Rust 1.85 o más reciente.
cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check
Consulta CONTRIBUTING.md, la hoja de ruta pública y la política de seguridad.
Licencia
MIT