
واجهة طرفية سريعة لمضيفات SSH الخاصة بك: بحث ضبابي واتصال بضغطتي مفتاح، نقل ملفات SFTP بشاشتين، وإعادة توجيه المنافذ في الخلفية. يحتفظ بقاعدة بيانات المضيفين الخاصة به ويولّد أمر ssh — ولا يعدّل أبدًا ملف ~/.ssh/config.
macOS وLinux، بمعماريتي x86_64 وarm64. الحزم المجمّعة مسبقًا لا تحتاج إلى Rust toolchain. في وقت التشغيل، يتطلب sshelf OpenSSH 8.4+، وهو الإصدار الذي يأتي منه التزويد التلقائي لكلمة المرور.
Homebrew (macOS أو Linux):
brew install max-rh/tap/sshelf
مثبّت Shell (ثنائي مجمّع مسبقًا، يختار منصتك تلقائيًا):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-rh/sshelf/releases/latest/download/sshelf-installer.sh | sh
Debian/Ubuntu: حمّل ملف .deb من
أحدث إصدار، ثم
sudo apt install ./sshelf_*_amd64.deb (أو *_arm64.deb).
Fedora / RHEL / Rocky / openSUSE: حمّل ملف .rpm (بناء ثابت، يعمل على أي توزيعة RPM)
من أحدث إصدار، ثم
sudo dnf install ./sshelf-*.x86_64.rpm (أو .aarch64.rpm).
Gentoo: overlay مُدار من المجتمع (غير رسمي، بفضل @masterwolf-git). شغّل
eselect repository enable masterwolf && emerge --sync && emerge --ask app-admin/sshelf.
Cargo (من crates.io؛ يتطلب Rust 1.88+):
cargo install sshelf.
إكمال الأوامر في الصدفة (tab-completion) يأتي مع كل حزمة. افتح صدفة جديدة بعد التثبيت. على Linux،
تستخدم الأسرار خلفية Secret Service مكتوبة بلغة Rust خالصة (بدون تبعيات بناء libdbus/OpenSSL).
التفاصيل الكاملة وإعداد الإكمال: دليل التثبيت.
أدير عشرات الأجهزة (homelab، بعض VPSes، بضعة أجهزة خلف bastion)، وكنت أظل أكتب ssh -J bastion -i ~/.ssh/some-key -p 2222 user@host من الذاكرة أو أبحث في سجل الأوامر الخاص بي عنه. كل مدير SSH جربته أراد إما امتلاك ~/.ssh/config أو منحي حسابًا ومزامنة مضيفاتي عبر خادم شخص آخر. لم أرد أيًا منهما. أردت مشغّلًا يحتفظ بقائمته الخاصة، ويبني الأمر، ثم يبتعد عن الطريق. ومكانًا للاحتفاظ بكلمات مرور المضيفات القليلة التي لا يمكنها استخدام المفاتيح، دون وضعها أبدًا في ملف. لذا بنيته.
اكتب للتصفية. Enter يتصل. مضيفاتك الأكثر استخدامًا تطفو إلى الأعلى تلقائيًا
(frecency: عدد الاستخدامات، مخفّض حسب الحداثة)، وtag:prod / site:homelab تضيّق القائمة
أكثر. Ctrl-y ينسخ الأمر الذي بناه بدلًا من تشغيله. من الصدفة،
sshelf prod-web يتصل بالاسم وsshelf - يعيد الاتصال بآخر مضيف، وكلاهما دون
فتح واجهة TUI.

exec() داخل ssh الخاص بكيبني sshelf الوسائط (argv) من سجل المضيف، يهدم واجهته الخاصة، ثم يستبدل نفسه
بـ OpenSSH. لا يوجد غلاف بينك وبين الجلسة: TTY حقيقي، وssh الخاص بك، وعلاماتك
الخالية من الإعدادات. عندما تنتهي الجلسة تعود إلى صدفة الأوامر، وليس إلى قائمة. الأمر
الذي يشغّله هو بالضبط ما يعرضه لك Ctrl-y.
كيف يُبنى الأمر.
Ctrl-t يفتح ملفاتك على اليسار وملفات المضيف على اليمين، عبر اتصال واحد مُصادَق عليه.
Space يحدد، Ctrl-a يحدد كل ما يعرضه الفلتر، Ctrl-s يرسل
المجموعة كاملة في أي اتجاه، F7 ينشئ مجلدًا. الاسم الموجود بالفعل لدى الوجهة
يُتخطى، ولا يُستبدل أبدًا.

Ctrl-f يفتح نفق Local أو Remote أو SOCKS يستمر في العمل بعد خروجك من sshelf،
وبعد إغلاق الطرفية. F4 يسرد كل هذه الأنفاق عبر جميع المضيفات ويوقف
الذي تختاره. تُتتبع بواسطة pid وتُطابَق مع العمليات الجارية فعليًا،
لذلك لا يبقى شيء في القائمة بعد موته. لا daemon، ولا مشرف.

عيّن tmux = "window" أو "pane" وسيفتح Enter المضيف في نافذة tmux جديدة (سمّيت باسم
المضيف) أو في pane جديد بدلًا من استبدال sshelf. أنهِ الجلسة وسيظل المنتقي
جالسًا هناك، ما زال يعمل.

F3 يدير المواقع: الموقع يجمع المضيفات ويمكن أن يحمل bastion مشتركًا، ومستخدمًا، ومنفذًا،
ومفتاحًا ترثه أعضاؤه وقت الاتصال، مع ملء الحقول التي يتركها المضيف فارغة فقط. الوسوم
هي تسميات حرة تفلتر عليها. كلاهما يظهر في القائمة، والـ bastion الموروث يظهر
في الأمر الذي يبنيه sshelf.

sshpassللمضيفات التي لا يمكنها استخدام المفاتيح، يخزّن sshelf كلمة المرور في keyring نظام التشغيل لديك (أو
خزنة مشفّرة بـ age على جهاز بلا واجهة رسومية) ويوفرها عبر SSH_ASKPASS عندما يطلب ssh.
يجيب فقط على المطالبات التي تأخذ شكل كلمة مرور حقيقية أو مطالبة passphrase، لذلك لا يمكن
للخادم التصيّد للسر بنص مشابه. كلمة المرور ليست أبدًا في ملف، ولا في ps،
ولا في سطر أوامر. المضيفات التي تريد أيضًا رمز تحقق تحصل على مطالبة به قبل
بدء الاتصال. كلمات المرور والمفاتيح و2FA
· الأمان.

sshelf export يكتب جزء ssh_config واحدًا خاصًا به ويعطيك سطر Include
واحدًا لتلصقه بنفسك في ~/.ssh/config. بعد ذلك، ssh العادي، وscp، وrsync، وgit، وأي شيء
يقرأ إعدادات SSH (VS Code Remote-SSH، JetBrains Gateway) يحل مضيفات sshelf لديك بالاسم،
مع الـ bastion وكل شيء. الملف يتحدث كلما تغيرت مضيفاتك. sshelf ما زال لا يكتب
أي شيء تحت ~/.ssh.

sshelf import يقرأ ~/.ssh/config، للقراءة فقط بشكل صارم، وينسخ المضيفات التي يمكنه
نمذجتها. sshelf import --tailscale يشغّل CLI الخاص بـ tailscale لديك ويحوّل tailnet الخاص بك إلى
مضيفات قابلة للبحث، مع أسماء MagicDNS، والـ tailnet كموقع، ووسوم ACL كوسوم. كلاهما
إضافة فقط، لذا إعادة تشغيلهما آمنة دائمًا، ولا يحدث أي منهما إلا إذا طلبت ذلك.
sshelf doctorأمر واحد لوقت عدم عمل شيء ما. يفحص إصدار OpenSSH لديك، وما إذا كانت الخلفية السرية
تُفتح فعلًا، وما إذا كان hosts.toml يُحلَّل، والمضيفات التي تشير إلى موقع
غير موجود، وsocket وكيل مفقود، وتصديرًا انحرف. يسمي الإصلاح
لكل منها. للقراءة فقط، يخرج برمز 1 إذا فشل أي شيء، ولا يتصل بمضيف أبدًا.

جُمّع في سبتمبر 2026 من README الخاص بكل مشروع (وبالنسبة لـ Termius، من موقعه). الخلية التي تقرأ "غير مذكور" تعني أن وثائق المشروع نفسه لا تقول ذلك.
| sshelf | purple | omnyssh | Voltius | Termius | |
|---|---|---|---|---|---|
| يعمل في | طرفية (TUI) | طرفية (TUI) | طرفية (TUI) + تطبيق سطح مكتب | تطبيق سطح مكتب (Tauri) | تطبيق سطح مكتب + جوال |
يعدّل ~/.ssh/config | أبدًا | نعم، في مكانه | لا، يقرؤه عند الإقلاع | غير متاح (مخزن خاص) | غير متاح (مخزن خاص) |
| حساب مطلوب | لا | لا | لا | للمزامنة الفورية | نعم |
| يحتفظ برموز لخدمات أخرى | لا | نعم، واحد لكل مزود سحابي | لا | نعم، للمزامنة | غير مذكور |
| استدعاءات شبكة خاصة به | لا شيء | مزامنة مزود السحابة | استطلاع مقاييس المضيف | مزامنة، تحديثات، مقاييس مضيف | مزامنة |
| حفظ الأسرار | keyring نظام التشغيل / خزنة age | keyring + مديرو كلمات مرور | غير مذكور | خزنته E2EE | خزنته المشفّرة |
| الاتصال | exec() داخل ssh الخاص بك | يشغّل أمر ssh الخاص بك | طرفية مدمجة | طرفية مدمجة | طرفية مدمجة |
| إعادة توجيه المنافذ | نعم، تنجو من الخروج | نعم، مراقبة حية | غير مذكور | نعم | نعم |
| نقل الملفات | SFTP بلوحتين | لوحات مقسّمة | SFTP بلوحتين | لوحتان، سحب وإفلات | SFTP |
| حاويات / لوحات مقاييس | لا | نعم | نعم | نعم | غير مذكور |
| مشاركة الفريق | لا | لا | لا | خطط مدفوعة | خطط مدفوعة |
| المنصات | macOS، Linux | macOS، Linux | macOS، Linux، Windows، Termux | Windows، macOS، Linux | macOS، Windows، Linux، iOS، Android |
| الترخيص | MIT / Apache-2.0 | MIT | Apache-2.0 | AGPL-3.0 | ملكي |
لا يملك sshelf لوحات مقاييس، ولا إدارة حاويات، ولا مشاركة فريق، ولا بناء Windows. الثلاثة
الأولى خيارات، وPRIVACY.md يشرح السبب: كل واحد منها سيعني
أن sshelf يحتفظ بشيء يخصك، أو يتحدث إلى شيء ما بمفرده.
~/.ssh/config أبدًا، ولا يكتب أي شيء تحت ~/.ssh.hosts.toml. هذا الملف آمن للالتزام والمشاركة.PRIVACY.md يقول ما يقرؤه ويكتبه ويشغّله ويرسله.
SECURITY.md هو نموذج التهديد للأسرار المخزّنة.
sshelf # شغّل واجهة TUI (Ctrl-a يضيف أول مضيف لك)
sshelf import --dry-run # معاينة استيراد للقراءة فقط من ~/.ssh/config
sshelf import # ...نفّذه
sshelf import --tailscale # ...أو استورد tailnet Tailscale كاملًا
sshelf prod-web # اتصل مباشرة بمضيف محفوظ (يتخطى واجهة TUI)
sshelf - # أعد الاتصال بأحدث مضيف مستخدم
sshelf list tag:prod --json # قائمة قابلة للبرمجة (الحقول + أمر ssh)
sshelf print-command db # اطبع أمر ssh بدلًا من تشغيله
sshelf export # ملف Include حتى يرى ssh/scp/VS Code العادي مضيفاتك
sshelf doctor # شيء لا يعمل؟ افحص الإعداد واحصل على الإصلاح
في واجهة TUI: اكتب للتصفية (بالإضافة إلى tag:NAME / site:NAME) وEnter للاتصال.
F1 يعرض كل المفاتيح.
دليل المستخدم يغطي كل شيء:
بدء سريع ·
مرجع CLI ·
الإعدادات ·
الأسئلة الشائعة ·
sshelf doctor.
هناك صفحات لكل ميزة لـ نقل الملفات،
وإعادة توجيه المنافذ،
والمواقع والوسوم،
وكلمات المرور و2FA، و
تصدير إعدادات SSH.
قرارات البنية والتصميم موجودة في docs/، وهناك
llms.txt للآلات.
اسأل، أو اقترح ميزة، أو اعرض ما بنيته به في
مناقشات GitHub. المساهمات
مرحب بها. ابدأ بـ CONTRIBUTING.md.
إذا كان sshelf مفيدًا لك، فتبرع ببيتكوين موضع تقدير (اختياري تمامًا):
بيتكوين: bc1qcdeyhpwq76u97dhymx876n49uq85z4y3ccrpje
مرخّص بموجب ترخيصين مزدوجين إما MIT أو Apache-2.0، حسب اختيارك (وهو المعيار في نظام Rust البيئي).