
مدقق قائم على القواعد لملفات تكوين عميل OpenSSH يكتشف الـhosts المكررة، ملفات الهوية المفقودة، الخوارزميات الضعيفة، مشاكل ترتيب wildcard، والإعدادات الخطرة مع إخراج JSON ورموز خروج مناسبة لـ CI.
محرك واحد لكل مكان يتغير فيه إعداد 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
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 لتجاوز الإعدادات الافتراضية.
الإجراء الرسمي متاح في 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
repos:
- repo: https://github.com/Noah4ever/sshconfig-lint
rev: v1.0.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 وdot_ssh/config الخاص بـ chezmoi. لا يتم جمع أي بيانات قياس عن بُعد. مصدرها متاح في editors/vscode.
يستخدم مثال 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 |