
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 motor para cada lugar donde cambia tu configuración SSH.
sshconfig-lint encuentra errores semánticos en las configuraciones del 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 reglas localmente, en hooks de Git, 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
# 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
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 releases proporciona binarios verificados para Linux, macOS y Windows. El instalador de conveniencia verifica la suma de comprobación del release 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
La Action oficial está disponible en el 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
Los hallazgos aparecen como anotaciones en el archivo y la línea exactos. La Action descarga el release 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: v1.0.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
VS Code
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 una vez un binario verificado que coincide 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.
Neovim
El ejemplo probado de editors/neovim usa el cliente LSP
integrado de Neovim. Copia su pequeño módulo Lua en tu configuración e inícialo con:
require("sshconfig_lint").setup()
Usa el mismo servidor sshconfig-lint lsp que VS Code y admite una ruta
personalizada al binario.
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 búferes sin título ejecutan reglas solo de contenido; los archivos guardados además resuelven Include y rutas del sistema de archivos. Los hallazgos de Includes anidados se adjuntan al archivo incluido y se limpian con el documento raíz.
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 reglas y los códigos de salida son interfaces de automatización estables.
| Salida | Significado |
|---|---|
0 | Ningún hallazgo de nivel de error, y ninguna advertencia con --strict |
1 | Al menos un hallazgo bloqueante |
2 | Al menos una configuración solicitada no se pudo leer |