Назад к обновлениям
New releaseSep 3, 2026

sshconfig-lint v0.5.0

Линтер на основе правил для конфигурационных файлов клиента OpenSSH, который обнаруживает дублирующиеся хосты, отсутствующие файлы identity, слабые алгоритмы, проблемы с порядком подстановочных знаков и опасные настройки, с выводом в формате JSON и кодами возврата, удобными для CI.

Поделиться

sshconfig-lint

Tests crates.io License: MIT

Один движок для всех мест, где меняется ваш SSH-конфиг.

sshconfig-lint находит семантические ошибки в клиентских конфигах OpenSSH: дублирующиеся хосты, нерабочие пути к identity-файлам, небезопасные опции, слабые алгоритмы, порядок wildcard-шаблонов и запутанные цепочки Include. Используйте одни и те же коды правил локально, в Git-хуках, GitHub Actions и редакторах.

Попробуйте приватную браузерную песочницу · Учитесь на интерактивных примерах · Прочитайте о каждом правиле

Браузерная проверка выполняется на вашем устройстве. Содержимое конфигов не загружается, телеметрия не собирается.

Быстрый старт

# проверить ~/.ssh/config
sshconfig-lint

# проверить один или несколько конфигов в репозитории
sshconfig-lint .ssh/config infrastructure/ssh_config

# завершаться с ошибкой при предупреждениях и ошибках
sshconfig-lint .ssh/config --strict

Установка

Homebrew

brew tap Noah4ever/tap
brew install sshconfig-lint

Cargo

cargo install sshconfig-lint

Arch Linux

yay -S sshconfig-lint-bin

На странице релизов доступны проверенные бинарные файлы для Linux, macOS и Windows. Удобный установщик проверяет контрольную сумму релиза перед установкой:

curl -fsSL https://raw.githubusercontent.com/Noah4ever/sshconfig-lint/main/install.sh | bash

Задайте VERSION=v0.5.0 или INSTALL_DIR=~/.local/bin, чтобы переопределить значения по умолчанию.

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

Находки отображаются в виде аннотаций на точном файле и строке. Action загружает релиз, соответствующий его тегу, и проверяет SHA256SUMS перед выполнением.

Для репозиториев с включённым GitHub Code Scanning SARIF можно загружать отдельно:

- 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

Используйте id: sshconfig-lint, когда предупреждения не должны блокировать коммит. Переопределите files: в вашем проекте, если конфиги используют другое соглашение об именовании.

Редакторы

Установите расширение для VS Code из Marketplace или выполните:

code --install-extension NoahThiering.sshconfig-lint

Расширение запускает sshconfig-lint lsp, один раз загружает подходящий проверенный бинарный файл и затем работает офлайн. Оно распознаёт .ssh/config, ssh_config и dot_ssh/config от chezmoi. Телеметрия не собирается. Его исходный код доступен в editors/vscode.

Любой редактор с поддержкой LSP может запустить:

sshconfig-lint lsp

Языковой сервер v0.5 публикует диагностику на всю строку при открытии, изменении и сохранении. Буферы без имени выполняют только правила, работающие с содержимым; для сохранённых файлов дополнительно разрешаются Include и пути файловой системы.

Форматы вывода

sshconfig-lint --format text
sshconfig-lint --format json
sshconfig-lint --format github
sshconfig-lint --format sarif

JSON-находки содержат severity, code, rule, line, file, message, hint и documentation. Коды правил и коды выхода — стабильные интерфейсы автоматизации.

ExitЗначение
0Нет находок уровня ошибки и нет предупреждений с --strict
1Как минимум одна блокирующая находка
2Как минимум один запрошенный конфиг не удалось прочитать

Правила

КодПравилоСерьёзность
DUP_HOSTДублирующийся блок Hostпредупреждение
MISSING_IDENTITYIdentityFile не найденошибка
WILDCARD_ORDERПорядок wildcard-шаблонов Hostпредупреждение
WEAK_ALGOСлабый алгоритмпредупреждение
DUP_DIRECTIVEДублирующаяся директивапредупреждение
INSECURE_OPTНебезопасная опцияпредупреждение
UNSAFE_CTRL_PATHНебезопасный ControlPathпредупреждение
INCLUDE_CYCLEЦикл Includeошибка
INCLUDE_READInclude невозможно прочитатьошибка
INCLUDE_GLOBНедопустимый шаблон Includeошибка
INCLUDE_NO_MATCHInclude не соответствует ни одному файлуинформация

Руководства по правилам показывают точный повреждённый фрагмент, исправленный конфиг, почему это важно и как проверить результат с помощью OpenSSH.

Разработка

Требуется Rust 1.85 или новее.

cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check

См. CONTRIBUTING.md, публичную дорожную карту и политику безопасности.

Лицензия

MIT

Категории