
Linter baseado em regras para arquivos de configuração do cliente OpenSSH que detecta hosts duplicados, arquivos de identidade ausentes, algoritmos fracos, problemas de ordenação de curingas e configurações perigosas, com saída JSON e códigos de saída compatíveis com CI.
Um único mecanismo para todos os lugares onde sua configuração SSH muda.
O sshconfig-lint encontra erros semânticos em configurações de cliente OpenSSH: hosts duplicados, caminhos de identidade quebrados, opções inseguras, algoritmos fracos, ordenação de curingas e cadeias Include emaranhadas. Use os mesmos códigos de regra localmente, em Git hooks, GitHub Actions e editores.
Experimente o playground privado no navegador · Aprenda com exemplos interativos · Leia todas as regras
O verificador no navegador roda no seu dispositivo. O conteúdo da configuração não é enviado e nenhuma telemetria é coletada.
# verifica ~/.ssh/config
sshconfig-lint
# verifica uma ou mais configurações de repositório
sshconfig-lint .ssh/config infrastructure/ssh_config
# falha em avisos e erros
sshconfig-lint .ssh/config --strict
brew tap Noah4ever/tap
brew install sshconfig-lint
cargo install sshconfig-lint
yay -S sshconfig-lint-bin
A página de releases fornece binários verificados para Linux, macOS e Windows. O instalador de conveniência verifica o checksum do release antes de instalar:
curl -fsSL https://raw.githubusercontent.com/Noah4ever/sshconfig-lint/main/install.sh | bash
Defina VERSION=v0.5.0 ou INSTALL_DIR=~/.local/bin para substituir os padrões.
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
Os resultados aparecem como anotações no arquivo e linha exatos. A Action baixa o release correspondente à sua tag e verifica SHA256SUMS antes da execução.
Para repositórios com GitHub Code Scanning habilitado, o SARIF pode ser enviado separadamente:
- run: sshconfig-lint .ssh/config --format sarif > sshconfig-lint.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: sshconfig-lint.sarif
repos:
- repo: https://github.com/Noah4ever/sshconfig-lint
rev: v0.5.0
hooks:
- id: sshconfig-lint-strict
Use id: sshconfig-lint quando avisos não devem bloquear um commit. Substitua files: no seu projeto quando as configurações usarem outra convenção de nomenclatura.
Instale a extensão VS Code do Marketplace ou execute:
code --install-extension NoahThiering.sshconfig-lint
A extensão inicia sshconfig-lint lsp, baixa um binário verificado correspondente uma vez e depois funciona offline. Ela reconhece .ssh/config, ssh_config e o dot_ssh/config do chezmoi. Nenhuma telemetria é coletada. Seu código-fonte está disponível em editors/vscode.
Qualquer editor com suporte a LSP pode iniciar:
sshconfig-lint lsp
O servidor de linguagem v0.5 publica diagnósticos de linha completa ao abrir, alterar e salvar. Buffers sem título executam regras apenas de conteúdo; arquivos salvos adicionalmente resolvem Include e caminhos do sistema de arquivos.
sshconfig-lint --format text
sshconfig-lint --format json
sshconfig-lint --format github
sshconfig-lint --format sarif
Os resultados JSON contêm severity, code, rule, line, file, message, hint e documentation. Códigos de regra e códigos de saída são interfaces de automação estáveis.
| Exit | Significado |
|---|---|
0 | Nenhum resultado de nível de erro, e nenhum aviso com --strict |
1 | Pelo menos um resultado bloqueante |
2 | Pelo menos uma configuração solicitada não pôde ser lida |
| Código | Regra | Severidade |
|---|---|---|
DUP_HOST | Bloco Host duplicado | aviso |
MISSING_IDENTITY | IdentityFile não encontrado | erro |
WILDCARD_ORDER | Ordem de curinga Host | aviso |
WEAK_ALGO | Algoritmo fraco | aviso |
DUP_DIRECTIVE | Diretiva duplicada | aviso |
INSECURE_OPT | Opção insegura | aviso |
UNSAFE_CTRL_PATH | ControlPath inseguro | aviso |
INCLUDE_CYCLE | Ciclo Include | erro |
INCLUDE_READ | Include não pode ser lido | erro |
INCLUDE_GLOB | Padrão Include inválido | erro |
INCLUDE_NO_MATCH | Include não corresponde a nenhum arquivo | info |
Os guias de regras mostram o fragmento quebrado exato, uma configuração corrigida, por que isso importa e como verificar o resultado com OpenSSH.
Requer Rust 1.85 ou mais recente.
cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check
Consulte CONTRIBUTING.md, o roadmap público e a política de segurança.
MIT