
وكيل SSH يوفر مفاتيح SSH المخزنة في Bitwarden Secrets Manager
وكيل SSH (SSH Agent) يوفّر مفاتيح SSH المخزّنة كأسرار (secrets) في Bitwarden Secrets Manager.
يدعم مصادقة SSH وتوقيع الـ commits في Git.

ينفّذ بروتوكول SSH Agent كخادم Unix domain socket، ليعمل كجسر آمن بين عملاء SSH لديك وBitwarden Secrets Manager.
يتميز بـ:
/tmp/vc-$(whoami)-ssh-agent.sockssh-agent-lib دون كشف المفاتيح الخاصة على القرص مطلقًا0600 (المالك فقط)، والمفاتيح تعيش في ذاكرة العملية فقط، ويتم استدعاء واجهات Bitwarden API باستخدام machine token مقيّد النطاق يمكنك إعداده بصلاحيات وصول دقيقة للأسرار.في جوهره، هو مبني بـ Tokio للإدخال/الإخراج غير المتزامن، ويستخدم crate باسم ssh-key للعمليات التشفيرية، ويدعم مفاتيح Ed25519 وRSA بصيغة OpenSSH.
وُلد من حاجة شخصية لديّ. ميزة Bitwarden SSH Agent في عميل Bitwarden الرسومي مريحة، لكن ماذا تستخدم إذا كنت تعمل بواجهة CLI فقط على جهاز التطوير لديك؟ كيف تنقل مفتاح SSH بأمان في خط أنابيب CI/CD لتوقيع الـ commits في Git؟ ماذا لو احتجت إلى فتح اتصال SSH من حاوية مؤقتة أو جهاز افتراضي دون نسخ أي مفتاح خاص؟ كيف تتجنب التعامل مع عبارات المرور (passphrases) المخزّنة في سلسلة المفاتيح (keychain) والمرتبطة بجلسات تسجيل الدخول؟
لذا كتبت أداة CLI صغيرة لاسترجاع مفاتيح SSH وإتاحتها دون كشف نظيرتها الخاصة.
ولتجنب جلب خزنة Bitwarden كاملة إلى البيئة، تستخدم Bitwarden Secrets Manager حتى تتمكن من اختيار أي جهاز يمكنه الوصول إلى أي سر، وتعيين صلاحيات token دقيقة.
-----BEGIN OPENSSH PRIVATE KEY----- و-----END OPENSSH PRIVATE KEY----- strings.إما باستخدام إحدى الطرق أدناه.
باستخدام poof:
poof install pirafrank/vault-conductor
curl -fsSL https://raw.githubusercontent.com/pirafrank/vault-conductor/main/install.sh | sh
brew tap pirafrank/tap
brew install vault-conductor
أو عن طريق تنزيل أحدث إصدار مستقر يدويًا ووضعه في $PATH.
cargo install --locked --git https://github.com/pirafrank/poof --tag VERSION
يجب عليك توفير:
BWS_ACCESS_TOKEN، وهو machine token الذي قمت بإعداده أعلاه. اسم متغير البيئة هو نفسه اسم أداة CLI bws من BitwardenBW_SECRET_IDS، قائمة مفصولة بفواصل من UUIDs للأسرار حيث يتم تخزين كل مفتاح خاص. يمكنك قراءة UUID لكل سر في تطبيق BWS على الويب (تحقق تحت اسم السر).BW_SERVER_ENDPOINT (اختياري)، نقطة نهاية خادم Bitwarden مخصصة (المضيف فقط، دون البروتوكول). إذا لم يتم توفيرها، فالقيمة الافتراضية هي bitwarden.com. أمثلة صالحة: bitwarden.eu (سحابي) وmyvault.example.com و192.168.1.100 وvault.internal (مستضاف ذاتيًا).يمكنك تمريرها إما كمتغيرات البيئة أعلاه (مناسبة لإعدادات CI وDevOps) أو عبر ملف إعداد:
# download the example config file at the default path, then customize to your needs
mkdir ~/.config/vault-conductor
curl -sSL https://github.com/pirafrank/vault-conductor/raw/refs/heads/main/config.yaml.example > ~/.config/vault-conductor/config.yaml
chmod 0600 ~/.config/vault-conductor/config.yaml
# set SSH Agent env var to vault-conductor socket
export SSH_AUTH_SOCK="/tmp/vc-$(whoami)-ssh-agent.sock"
# Start in foreground
# (recommended for first time users to verify config is ok)
vault-conductor start --fg
# Start the agent in background
vault-conductor start
# Stop the background agent
vault-conductor stop
أمر start يدعم أيضًا خيار --config لتوفير مسار إعداد مخصص. متغيرات البيئة دائمًا لها الأولوية على ملف الإعداد.
قد تحتاج أحيانًا إلى تصحيح موقف غريب وتحتاج إلى أكبر قدر ممكن من السجلات (logs). نفّذ ما يلي للتشغيل في المقدمة والحصول على سجلات verbose على sysout:
vault-conductor start --fg -vv
يمكنك تثبيتها كخدمة Systemd في مساحة المستخدم (userspace). اقرأ المزيد هنا.
راجع مجلد docs للعثور على مخططات حول كيفية عمل الكود وتنظيمه. اطّلع على سياسة الأمان قبل استخدام مفاتيح RSA أو إعادة توجيه الوكيل (agent forwarding).
vault، /voːlt/ - غرفة تحت الأرض، خاصةً لتخزين الأشياء الثمينة
conductor، /kənˈdʌk·tər/ - قائد، شيء ينقل الحرارة أو الكهرباء
وبالامتداد، شيء ينقل مفتاح SSH القيّم خاصتك من خزنة Bitwarden إلى بيئة التطوير لديك.
هذا المشروع مرخّص بموجب رخصة MIT.
راجع ملف LICENSE للتفاصيل.