
sshconfig-lint v0.5.0
مدقق قائم على القواعد لملفات تكوين عميل OpenSSH يكتشف الـhosts المكررة، ملفات الهوية المفقودة، الخوارزميات الضعيفة، مشاكل ترتيب wildcard، والإعدادات الخطرة مع إخراج JSON ورموز خروج مناسبة لـ CI.
sshconfig-lint
محرك واحد لكل مكان يتغير فيه إعداد SSH الخاص بك.
يكتشف sshconfig-lint الأخطاء الدلالية في إعدادات عميل OpenSSH: المضيفات المكررة، مسارات الهوية المعطوبة، الخيارات غير الآمنة، الخوارزميات الضعيفة، ترتيب أحرف البدل، وسلاسل 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
الإجراء الرسمي متاح في 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
تظهر النتائج كتعليقات توضيحية على الملف والسطر المحددين. يقوم الإجراء بتنزيل الإصدار المطابق لوسمه ويتحقق من 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
ثبّت إضافة VS Code من Marketplace أو شغّل:
code --install-extension NoahThiering.sshconfig-lint
تبدأ الإضافة sshconfig-lint lsp، وتنزّل ملفًا ثنائيًا موثقًا مطابقًا مرة واحدة، ثم تعمل دون اتصال. تتعرف على .ssh/config وssh_config وdot_ssh/config الخاص بـ chezmoi. لا يتم جمع أي بيانات قياس عن بُعد. مصدرها متاح في editors/vscode.
Neovim
يستخدم مثال editors/neovim المُختبر عميل
LSP المدمج في Neovim. انسخ وحدة Lua الصغيرة الخاصة به إلى إعداداتك وابدأها بـ:
require("sshconfig_lint").setup()
يستخدم نفس خادم sshconfig-lint lsp المستخدم في VS Code ويدعم مسارًا
مخصصًا للملف الثنائي.
يمكن لأي محرر يدعم LSP أن يبدأ:
sshconfig-lint lsp
ينشر خادم اللغة v0.5 تشخيصات كاملة الأسطر عند الفتح والتغيير والحفظ. تشغّل المخازن المؤقتة غير المسماة قواعد المحتوى فقط؛ بينما تحل الملفات المحفوظة بالإضافة إلى ذلك Include ومسارات نظام الملفات. تُرفق النتائج من Includes المتداخلة بالملف المُضمّن وتُمسح مع المستند الجذر.
صيغ الإخراج
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 | تعذّر قراءة إعداد واحد مطلوب على الأقل |
القواعد
| الرمز | القاعدة | الخطورة |
|---|---|---|
INVALID_VALUE | قيمة توجيه غير صالحة | error |
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_DEPTH | تداخل Include عميق جدًا | error |
INCLUDE_READ | تعذّر قراءة Include | error |
INCLUDE_GLOB | نمط Include غير صالح | error |
INCLUDE_NO_MATCH | Include لا يطابق أي ملفات | info |
NEGATED_HOST | Host يحتوي على أنماط منفية فقط | warning |
PROXY_CONFLICT | تعارض ProxyCommand وProxyJump | warning |
REVOKED_HOST_KEYS_UNREADABLE | ملف RevokedHostKeys غير قابل للقراءة | error |
MISSING_CERTIFICATE | CertificateFile غير موجود | error |
LOCAL_COMMAND_DISABLED | LocalCommand غير مفعّل | warning |
INVALID_TOKEN | رمز نسبة مئوية غير صالح | error |
INVALID_SYNTAX | صيغة غير صالحة | error |
UNKNOWN_DIRECTIVE | توجيه غير معروف | error |
DEPRECATED_OPTION | خيار مهمل | warning |
INVALID_MATCH | شرط Match غير صالح | error |
CONTROL_PERSIST_UNUSED | ControlPersist بدون ControlMaster | warning |
UPDATE_HOSTKEYS_ASK_PERSIST | UpdateHostKeys ask مع ControlPersist | warning |
تعرض أدلة القواعد الجزء المعطوب بالضبط، وإعدادًا مصححًا، وسبب أهميته، وكيفية التحقق من النتيجة باستخدام OpenSSH.
يتحقق INVALID_VALUE من المنافذ، وعدادات إعادة المحاولة والمطالبات، وإعدادات alive، وForwardX11Timeout، وRequiredRSASize، وControlPersist، والمفاتيح المنطقية، وObscureKeystrokeTiming، وقيم الوقت في OpenSSH، وStreamLocalBindMask، وIPQoS، ومجموعات القيم الموثقة مثل AddressFamily وControlMaster وStrictHostKeyChecking وLogLevel وPubkeyAuthentication. تظل القيم المقتبسة وغير الحساسة لحالة الأحرف المقبولة من OpenSSH صالحة. يقبل المدقق الصيغة الحديثة دون محاولة استنتاج إصدار عميل SSH الذي سيستهلك الإعداد.
تتخطى فحوصات نظام الملفات المسارات التي تحتوي على رموز نسبة مئوية أو متغيرات بيئة لأن قيمتها النهائية تعتمد على سياق الاتصال. LOCAL_COMMAND_DISABLED متحفظ بالمثل: يتم تعطيله عندما يمكن لـ Include غير محلول أو أي PermitLocalCommand yes محتمل أن يجعل الأمر فعّالًا. حلّل Includes من خلال CLI العادي أو مستند محرر محفوظ للحصول على أدق نتيجة.
التطوير
يتطلب Rust 1.85 أو أحدث.
cargo test --all
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt -- --check
راجع CONTRIBUTING.md، وخارطة الطريق العامة، و عقد استقرار v1، وسياسة الأمان.
الترخيص
MIT