
Линтер на основе правил для конфигурационных файлов клиента OpenSSH, который обнаруживает дублирующиеся хосты, отсутствующие файлы identity, слабые алгоритмы, проблемы с порядком подстановочных знаков и опасные настройки, с выводом в формате JSON и кодами возврата, удобными для CI.
Один движок для всех мест, где меняется ваш SSH-конфиг.
sshconfig-lint находит семантические ошибки в клиентских конфигах OpenSSH: дублирующиеся хосты, неработающие пути к ключам, небезопасные опции, слабые алгоритмы, порядок wildcard-шаблонов и запутанные цепочки Include. Используйте одни и те же коды правил локально, в Git-хуках, GitHub Actions и редакторах.
Попробуйте приватную браузерную песочницу · Изучайте на интерактивных примерах · Прочитайте все правила
Браузерная проверка выполняется на вашем устройстве. Содержимое конфигов не загружается, телеметрия не собирается.
# 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
brew tap Noah4ever/tap
brew install sshconfig-lint
cargo install sshconfig-lint
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, чтобы переопределить значения по умолчанию.
Официальный Action доступен в 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
Находки отображаются как аннотации на конкретном файле и строке. 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
repos:
- repo: https://github.com/Noah4ever/sshconfig-lint
rev: v1.0.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.
Протестированный пример editors/neovim использует встроенный
LSP-клиент Neovim. Скопируйте его небольшой Lua-модуль в свою конфигурацию и запустите его с помощью:
require("sshconfig_lint").setup()
Он использует тот же сервер sshconfig-lint lsp, что и VS Code, и поддерживает пользовательский
путь к бинарному файлу.
Любой редактор с поддержкой LSP может запустить:
sshconfig-lint lsp
Языковой сервер v0.5 публикует диагностику по всей строке при открытии, изменении и сохранении. Несохранённые буферы выполняют только правила, основанные на содержимом; сохранённые файлы дополнительно разрешают Include и пути файловой системы. Находки из вложенных 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. Коды правил и коды выхода — это стабильные интерфейсы автоматизации.
| Выход | Значение |
|---|---|
0 | Нет находок уровня ошибки и нет предупреждений при --strict |
1 | Как минимум одна блокирующая находка |
2 | Как минимум один запрошенный конфиг не удалось прочитать |