アップデート一覧に戻る
New releaseSep 3, 2026

sshconfig-lint v0.5.0

OpenSSHクライアント設定ファイル向けのルールベースのリンターで、重複ホスト、不足しているIDファイル、脆弱なアルゴリズム、ワイルドカードの順序問題、危険な設定を検出し、JSON出力とCIフレンドリーな終了コードを提供します。

共有

sshconfig-lint

Tests crates.io License: MIT

SSH 設定が変更されるあらゆる場所に対応する単一のエンジン。

sshconfig-lint は OpenSSH クライアント設定の意味的な誤りを検出します。重複したホスト、壊れた identity パス、安全でないオプション、弱いアルゴリズム、ワイルドカードの順序、絡み合った 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

インストール

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

公式 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

Pre-Commit

repos:
  - repo: https://github.com/Noah4ever/sshconfig-lint
    rev: v1.0.0
    hooks:
      - id: sshconfig-lint-strict

警告でコミットをブロックしたくない場合は id: sshconfig-lint を使用します。設定が別の命名規則を使用している場合は、プロジェクトで files: を上書きしてください。

エディタ

VS Code

Marketplace から VS Code 拡張機能をインストールするか、次を実行します:

code --install-extension NoahThiering.sshconfig-lint

この拡張機能は sshconfig-lint lsp を起動し、一致する検証済みバイナリを一度ダウンロードした後、オフラインで動作します。.ssh/config、ssh_config、chezmoi の dot_ssh/config を認識します。テレメトリは収集されません。ソースは editors/vscode で入手できます。

Neovim

テスト済みの editors/neovim の例は、Neovim 組み込みの LSP クライアントを使用します。その小さな Lua モジュールを設定にコピーし、次のように起動します:

require("sshconfig_lint").setup()

VS Code と同じ sshconfig-lint lsp サーバーを使用し、カスタムの バイナリパスをサポートします。

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少なくとも 1 つのブロックする検出結果がある
2要求された設定のうち少なくとも 1 つが読み取れなかった

ルール

コードルール重大度
INVALID_VALUE無効なディレクティブ値error
DUP_HOST重複した Host ブロックwarning
MISSING_IDENTITYIdentityFile が見つからないerror
WILDCARD_ORDERHost ワイルドカードの順序warning
WEAK_ALGO弱いアルゴリズムwarning
DUP_DIRECTIVE重複したディレクティブwarning
INSECURE_OPT安全でないオプションwarning
UNSAFE_CTRL_PATH安全でない ControlPathwarning
INCLUDE_CYCLEInclude の循環error
INCLUDE_DEPTHInclude のネストが深すぎるerror
INCLUDE_READInclude を読み取れないerror
INCLUDE_GLOB無効な Include パターンerror
INCLUDE_NO_MATCHInclude がどのファイルにも一致しないinfo
NEGATED_HOSTHost に否定パターンのみがあるwarning
PROXY_CONFLICTProxyCommand と ProxyJump の競合warning
REVOKED_HOST_KEYS_UNREADABLERevokedHostKeys ファイルが読み取れないerror
MISSING_CERTIFICATECertificateFile が見つからないerror
LOCAL_COMMAND_DISABLEDLocalCommand が有効になっていないwarning
INVALID_TOKEN無効なパーセントトークンerror
INVALID_SYNTAX無効な構文error
UNKNOWN_DIRECTIVE不明なディレクティブerror
DEPRECATED_OPTION非推奨のオプションwarning
INVALID_MATCH無効な Match 条件error
CONTROL_PERSIST_UNUSEDControlMaster なしの ControlPersistwarning
UPDATE_HOSTKEYS_ASK_PERSISTControlPersist を伴う UpdateHostKeys askwarning

ルールガイドでは、正確な壊れたフラグメント、修正された設定、なぜ重要か、OpenSSH で結果を検証する方法を示します。

INVALID_VALUE は、ポート、リトライおよびプロンプトカウンター、alive 設定、ForwardX11Timeout、RequiredRSASize、ControlPersist、ブールスイッチ、ObscureKeystrokeTiming、OpenSSH 時間値、StreamLocalBindMask、IPQoS、および AddressFamily、ControlMaster、StrictHostKeyChecking、LogLevel、PubkeyAuthentication などの文書化された値セットをチェックします。OpenSSH が受け入れる引用符付きおよび大文字小文字を区別しない値は有効なままです。リンターは、設定を消費する SSH クライアントのバージョンを推測しようとせずに、モダンな構文を受け入れます。

ファイルシステムチェックは、パーセントトークンまたは環境変数を含むパスをスキップします。それらの最終的な値は接続コンテキストに依存するためです。LOCAL_COMMAND_DISABLED も同様に保守的です。未解決の Include または可能性のある PermitLocalCommand yes がコマンドを有効にする可能性がある場合は抑制されます。最も正確な結果を得るには、通常の CLI または保存されたエディタドキュメントを通じて Include を解決してください。

開発

Rust 1.85 以降が必要です。

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

CONTRIBUTING.md、公開 ロードマップ、 v1 安定性契約、セキュリティポリシーを参照してください。

ライセンス

MIT

カテゴリ