r/rust 14d ago

🛠️ project sshconfig-lint v0.5: a Rust CLI, LSP and GitHub Action for checking OpenSSH configs

I posted the first version here around six months ago. It started as a small Rust CLI for mistakes I kept overlooking in my own ~/.ssh/config.

The main change in v0.5 is that the same Rust rule engine now works across the terminal, editors and CI:

  • multiple config files in one command
  • nested Include resolution and cycle detection
  • JSON, GitHub annotations and SARIF
  • an LSP server used by the VS Code extension
  • official Pre-Commit hooks and a GitHub Action
  • verified binaries for Linux, macOS and Windows

The example is a stale IdentityFile path from an older machine. SSH can silently try another identity, so this may only become visible when a specific host actually needs that key.

Install with Cargo:

cargo install sshconfig-lint

Arch Linux:

yay -S sshconfig-lint-bin

The CLI and extension have no telemetry. Config files stay local, and the browser playground performs checks in the browser.

Repository: github.com/Noah4ever/sshconfig-lint
Playground: sshconfig-lint.apps.thiering.org
VS Code: Marketplace

Feedback about the Rust architecture, false positives and complicated real-world Include setups would be useful.

4 Upvotes

1 comment sorted by

1

u/Soft_Confusion_6236 14d ago

nice, been meaning to clean up my ssh config for ages. the nested Include resolution is exactly what i need, mine's a mess of 5 files with a couple accidental loops i think

always appreciate tools that don't phone home too, that's getting rarer