
SSH設定が変更されるあらゆる場所に対応する単一のエンジン。
sshconfig-lint は、OpenSSH クライアント設定における意味的な誤りを検出します。重複ホスト、壊れた identity パス、安全でないオプション、脆弱なアルゴリズム、ワイルドカードの順序、複雑に絡み合った Include チェーンなどです。同じルールコードをローカル、Git フック、GitHub Actions、エディタで使用できます。
プライベートブラウザプレイグラウンドを試す · インタラクティブな例で学ぶ · すべてのルールを読む
ブラウザチェッカーはお使いのデバイス上で動作します。設定内容がアップロードされることはなく、テレメトリも収集されません。
# ~/.ssh/config をチェック
sshconfig-lint
# 1つ以上のリポジトリ設定をチェック
sshconfig-lint .ssh/config infrastructure/ssh_config
# 警告とエラーで失敗させる
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 を設定して、デフォルトを上書きできます。
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: 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、chezmoi の dot_ssh/config を認識します。テレメトリは収集されません。ソースコードは 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 が含まれます。ルールコードと終了コードは安定した自動化インターフェースです。
| 終了コード | 意味 |
|---|---|
0 | エラーレベルの検出なし、および --strict 時の警告なし |
1 | ブロックする検出が少なくとも1つ |
2 | 要求された設定のうち少なくとも1つを読み取れなかった |
ルールガイドには、問題のある正確な断片、修正済みの設定、それが重要な理由、OpenSSH で結果を検証する方法が示されています。
Rust 1.85 以降が必要です。
cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check
CONTRIBUTING.md、公開ロードマップ、セキュリティポリシー を参照してください。
MIT
| コード | ルール | 重大度 |
|---|
DUP_HOST | 重複する Host ブロック | warning |
MISSING_IDENTITY | IdentityFile が見つからない | error |
WILDCARD_ORDER | Host ワイルドカードの順序 | warning |
WEAK_ALGO | 脆弱なアルゴリズム | warning |
DUP_DIRECTIVE | 重複するディレクティブ | warning |
INSECURE_OPT | 安全でないオプション | warning |
UNSAFE_CTRL_PATH | 安全でない ControlPath | warning |
INCLUDE_CYCLE | Include サイクル | error |
INCLUDE_READ | Include を読み取れない | error |
INCLUDE_GLOB | 無効な Include パターン | error |
INCLUDE_NO_MATCH | Include がファイルに一致しない | info |