
OpenSSH 클라이언트 구성 파일을 위한 규칙 기반 린터로, 중복 호스트, 누락된 ID 파일, 취약한 알고리즘, 와일드카드 정렬 문제, 위험한 설정을 감지하며 JSON 출력 및 CI 친화적인 종료 코드를 제공합니다.
SSH 설정이 변경되는 모든 곳에서 사용하는 하나의 엔진.
sshconfig-lint는 OpenSSH 클라이언트 설정에서 의미론적 오류를 찾아냅니다: 중복 호스트, 손상된 identity 경로, 안전하지 않은 옵션, 취약한 알고리즘, 와일드카드 순서, 그리고 얽힌 Include 체인. 동일한 규칙 코드를 로컬, Git 훅, GitHub Actions, 편집기에서 사용할 수 있습니다.
비공개 브라우저 플레이그라운드 사용해 보기 · 대화형 예제로 배우기 · 모든 규칙 읽기
브라우저 검사기는 사용자 기기에서 실행됩니다. 설정 내용은 업로드되지 않으며 원격 측정(telemetry)도 수집되지 않습니다.
# ~/.ssh/config 확인
sshconfig-lint
# 하나 이상의 저장소 설정 확인
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를 인식합니다. 원격 측정(telemetry)은 수집되지 않습니다. 소스 코드는 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 | 차단 발견 사항이 하나 이상 있음 |
2 | 요청된 설정 중 하나 이상을 읽을 수 없음 |
규칙 가이드에는 정확히 잘못된 부분, 수정된 설정, 중요한 이유, OpenSSH로 결과를 검증하는 방법이 나와 있습니다.
Rust 1.85 이상이 필요합니다.
cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check
CONTRIBUTING.md, 공개 로드맵, 보안 정책을 참조하세요.
MIT
| 코드 | 규칙 | 심각도 |
|---|
DUP_HOST | 중복 Host 블록 | 경고 |
MISSING_IDENTITY | IdentityFile을 찾을 수 없음 | 오류 |
WILDCARD_ORDER | Host 와일드카드 순서 | 경고 |
WEAK_ALGO | 취약한 알고리즘 | 경고 |
DUP_DIRECTIVE | 중복 지시문 | 경고 |
INSECURE_OPT | 안전하지 않은 옵션 | 경고 |
UNSAFE_CTRL_PATH | 안전하지 않은 ControlPath | 경고 |
INCLUDE_CYCLE | Include 순환 | 오류 |
INCLUDE_READ | Include를 읽을 수 없음 | 오류 |
INCLUDE_GLOB | 잘못된 Include 패턴 | 오류 |
INCLUDE_NO_MATCH | Include가 일치하는 파일 없음 | 정보 |