Skip to content

CLI

واجهة سطر أوامر OpenKey (openkey) مخصّصة للمطوّرين الذين يحفظون الأسرار ورموز API ومفاتيح SSH ومواد .env في خزنة OpenKey. يمكنها العمل دون اتصال بالكامل لتوليد كلمات المرور، والتواصل مع تطبيق OpenKey لسطح المكتب وهو مفتوح القفل عبر جسر محلي، والمصادقة اختيارياً على خادم مزامنة مستضاف ذاتياً لسحب النص المشفّر وجلسة CLI قصيرة العمر.

يتطلب Node.js 20+.

البنية

الرسم أدناه يوضّح من يتحدث مع من. توليد كلمات المرور يبقى دون اتصال. أوامر الخزنة تفضّل تطبيق سطح المكتب المفتوح. مزامنة الخادم اختيارية.

بنية OpenKey CLI: التواصل مع تطبيق سطح المكتب عبر جسر محلي، ومسح الجهاز للاكتشاف، ومزامنة اختيارية للنص المشفّر مع خادم مستضاف ذاتياً
الوضعمتى يُستخدمماذا يمكنه
دون اتصالدائماًgen — بلا تطبيق وبلا خادم
الجسر الأصليتطبيق سطح المكتب مفتوح القفل على هذا الجهازإدارة الأسرار، استيراد الاكتشاف، البحث/الجلب/النسخ عبر الأسرار وتسجيلات الدخول
جلسة CLIبعد login ثم eval $(openkey unlock)نفس عمليات الخزنة على ذاكرة نص مشفّر محلية؛ sync يسحب من الخادم

كيف يختار أمر الخزنة الخلفية

مخطط: أمر الخزنة يفحص جسر سطح المكتب ثم OPENKEY_SESSION وإلا يظهر خطأ مع تلميح للفتح
  1. إن استجاب جسر سطح المكتب → وضع native (المفضّل؛ بلا تسجيل على الخادم).
  2. وإلا إن وُجد OPENKEY_SESSION صالح → وضع session (الذاكرة المحلية / مواد مدعومة بالخادم).
  3. وإلا → تفشل الأوامر التي تحتاج الخزنة مع تلميح لفتح قفل التطبيق أو تشغيل eval $(openkey unlock).

يقبل الجسر الاتصالات من الجهاز المحلي فقط وطالما الخزنة مفتوحة. على Unix يُستخدم مقبس تحت مسارات OpenKey المعروفة (تجاوز عبر OPENKEY_NATIVE_SOCKET). على Windows يُستخدم منفذ localhost من ملف تحت %LOCALAPPDATA%\OpenKey\ (تجاوز عبر OPENKEY_NATIVE_PORT).

التثبيت

bash
cd openkey_cli
npm install
npm run build
npm link          # اختياري: يضع `openkey` في PATH

بدون الربط:

bash
npx tsx src/cli.ts --help
# بعد البناء:
node dist/cli.js --help

تحقق:

bash
openkey --version
openkey status

الإعداد والتخزين

تُحفظ حالة CLI المحلية في مجلد إعدادات المنصة (صلاحية الملف 600 عند الدعم):

المنصةالمسار
macOS~/Library/Application Support/OpenKey/config.json
Linux~/.config/openkey/config.json (أو $XDG_CONFIG_HOME/openkey/)
Windows%APPDATA%\OpenKey\config.json

قد يحتوي الملف على: عنوان الخادم، البريد، رموز الوصول/التحديث، الملح ومعاملات KDF، مفتاح الخزنة الملفوف، مدة قفل الجلسة، رقم مراجعة الخادم، وذاكرة نص مشفّر للعناصر والمجموعات بعد المزامنة. لا يخزّن كلمة المرور الرئيسية بنص واضح.

أوامر config

bash
openkey config set-server https://openkey.example.com
openkey config show
openkey config set-lock 30    # مدة الجلسة بالدقائق (1–1440، الافتراضي 15)
  • set-server يتطلب عنواناً يبدأ بـ http:// أو https:// (يُزال الشرطة المائلة النهائية).
  • العنوان الافتراضي قبل أول تعيين: http://localhost:8000.

الخيارات العامة

العلمالأثر
--jsonJSON قابل للقراءة آلياً على stdout للسكربتات
--help / --versionالمساعدة والإصدار

ضع --json قبل الأمر الفرعي عند استخدام الخيارات العامة، مثل: openkey --json status.

توليد كلمات المرور (gen)

دون اتصال بالكامل. لا يحتاج التطبيق ولا الخادم.

bash
openkey gen
openkey gen -l 24 --no-symbols
openkey gen -l 32 -a -c
openkey --json gen -l 20
الخيارالوصفالافتراضي
-l, --length <n>الطول (نطاق عملي 4–64)20
--no-upperاستبعاد الأحرف الكبيرةمعطّل
--no-lowerاستبعاد الأحرف الصغيرةمعطّل
--no-digitsاستبعاد الأرقاممعطّل
--no-symbolsاستبعاد الرموزمعطّل
-a, --avoid-ambiguousتجنّب الأحرف الملتبسة Il1O0oمعطّل
-c, --copyنسخ إلى الحافظة بدل الطباعةمعطّل

مع -c يطبع الوضع البشري تأكيداً؛ وضع JSON يعيد { "copied": true, "length": N }. بدون -c تُطبع كلمة المرور (أو { "password": "..." } في JSON).

الحالة والتنظيف

bash
openkey status
openkey forget

status يعرض عنوان الخادم، البريد، حالة الدخول، توفّر الجسر، وضع الفتح (native / session)، الوقت المتبقي للجلسة، وعدد العناصر المخزّنة مؤقتاً.

forget يمسح إعدادات CLI المحلية وذاكرة النص المشفّر. لا يحذف الأسرار داخل خزنة تطبيق سطح المكتب. بعد forget أعد config set-server / login إن كنت تستخدم وضع الخادم.

أسرار المطوّرين (secret)

تعيش الأسرار في منطقة الأسرار المحجوزة في الخزنة (__dev_secrets__)، مجمّعة حسب الجهاز (تسمية الآلة؛ اسم المضيف افتراضياً). تتطلب الأوامر تطبيق سطح المكتب مفتوح القفل أو OPENKEY_SESSION صالحاً.

الأنواع

النوعالاستخدام النموذجيملاحظات
apiTokenPAT ومفاتيح APIالافتراضي
sshKeyمفاتيح خاصةيُفضَّل --file / --public-key-file
envSnippetمحتوى .env كامليُفضَّل --file
otherعام

تُطبَّع أسماء مستعارة مثل ssh وapi وtoken وenv و.env إلى الأنواع أعلاه.

secret add

bash
openkey secret add --name "GitHub PAT" --kind apiToken --secret ghp_...
openkey secret add -n "deploy key" -k sshKey -f ~/.ssh/id_ed25519 \
  --public-key-file ~/.ssh/id_ed25519.pub -H git.example.com -u git
openkey secret add -n "acme .env" -k envSnippet -f ./apps/api/.env -d laptop
الخيارالوصف
-n, --nameالاسم المعروض (مطلوب)
-k, --kindsshKey | apiToken | envSnippet | other
-s, --secretقيمة السر مباشرة
-f, --fileقراءة جسم السر من ملف
-u, --usernameاسم مستخدم اختياري
-H, --hostمضيف اختياري
-d, --deviceتسمية مجموعة الجهاز (الافتراضي: اسم المضيف)
--public-key / --public-key-fileالمفتاح العام لـ SSH
--passphraseعبارة مرور المفتاح
--notesملاحظات حرة

وفّر --secret أو --file (غير فارغ). تُرجع السجلات المُنشأة معرّف UUID.

secret list / get / copy / rm

bash
openkey secret list
openkey secret get "GitHub"
openkey secret copy ghp
openkey secret rm "old token" -y
  • list — جدول لبادئة UUID والاسم والنوع والجهاز والسر المقنّع.
  • get / copy / rm — مطابقة بالـاسم أو الـمضيف أو بادئة UUID. التطابق الغامض يُخطئ ويعرض المرشحين؛ ضيّق الاستعلام.
  • get يطبع النص الصريح (أو كائن JSON كاملاً مع --json).
  • copy يكتب النص الصريح إلى الحافظة.
  • rm يطلب تأكيداً ما لم تُمرَّر -y / --yes.

الاكتشاف (discover)

يمسح هذا الجهاز ويستورد الأسرار الجديدة إلى مجموعة الجهاز. يزيل التكرار مقابل القيم الموجودة في الخزنة (حسب النوع + الاسم + بصمة المحتوى).

تدفّق الاكتشاف: مسح المصادر المحلية، معاينة مقنّعة، إزالة التكرار، ثم الحفظ في مجموعة الجهاز داخل الخزنة
bash
openkey discover --dry-run
openkey discover -y
openkey discover -d workstation -p ~/src/acme -p ~/src/labs --depth 3
openkey discover --no-aws --no-env-vars
الخيارالوصفالافتراضي
-d, --deviceاسم مجموعة الجهازاسم المضيف
-p, --path <dir>جذر/جذور المشاريع لمسح .env (قابل للتكرار)المجلد الحالي
--depth <n>أقصى عمق للمجلدات لـ .env4
--no-sshتخطّي المفاتيح الخاصة في ~/.sshالمسح مفعّل
--no-env-filesتخطّي ملفات .env / .env.*المسح مفعّل
--no-env-varsتخطّي متغيرات بيئة العمليةالمسح مفعّل
--no-awsتخطّي ~/.aws/credentialsالمسح مفعّل
--dry-runسرد فقط دون حفظمعطّل
-y, --yesاستيراد بلا تأكيد تفاعليمعطّل

ما الذي يُمسح؟

  • SSH — مفاتيح خاصة تحت ~/.ssh (يتخطى known_hosts وauthorized_keys وconfig وملفات .pub)؛ يرفق ملف .pub الشقيق عند وجوده.
  • متغيرات البيئة — أسماء معروفة (GITHUB_TOKEN، OPENAI_API_KEY، DATABASE_URL، …) وأسماء تطابق لواحق شبيهة بالأسرار؛ يتخطى PATH وHOME وOPENKEY_SESSION وOPENKEY_PASSWORD وغيرها.
  • AWS — ملفات التعريف في ~/.aws/credentials.
  • ملفات .env — مشي من الجذور مع تخطّي node_modules و.git وdist والبيئات الافتراضية وغيرها؛ تُطبَّق حدود للحجم وعدد الملفات.

يعمل --dry-run حتى لو كانت الخزنة مقفلة (سرد فقط). الحفظ يتطلب فتح الجسر أو الجلسة. الأسرار المستوردة مسبقاً تُبلَّغ كمتجاوَزة.

البحث عبر الأسرار وتسجيلات الدخول

تبحث هذه الأوامر في أسرار المطوّرين وتسجيلات الدخول:

bash
openkey search github
openkey get "GitHub"
openkey copy api.example.com
الأمرالمخرجات
search <query>جدول مقنّع (أو معاينات JSON)
get <query>كلمة المرور/السر للنتيجة الأفضل
copy <query>نسخ أفضل تطابق إلى الحافظة

التطابق الغامض يعرض UUID والنوع والتسمية — ضيّق الاستعلام. فضّل secret get / secret copy عندما تريد قسم الأسرار فقط.

خادم مستضاف ذاتياً (اختياري)

استخدم هذا المسار عندما لا يتوفر تطبيق سطح المكتب على الجهاز (مثلاً خزنة على الهاتف عبر المزامنة فقط)، أو عندما تريد ذاكرة نص مشفّر لـ CLI.

تدفّق الخادم: set-server ثم login بـ auth_hash وسحب النص المشفّر ثم eval unlock لتعيين OPENKEY_SESSION لأوامر الخزنة
bash
openkey config set-server http://localhost:8000
openkey login --email [email protected]
eval $(openkey unlock)
openkey sync

تثبيت الخادم: تثبيت الخادم.

تدفق المصادقة

  1. login — يطلب البريد (أو -e) وكلمة المرور الرئيسية (أو OPENKEY_PASSWORD). ينفّذ prelogin للملح وKDF، يشتق auth_hash بـ Argon2id، يحصل على JWT، يجلب مادة مفتاح الخزنة الملفوف، يتحقق من كلمة المرور بفك الالتفاف، ثم يسحب النص المشفّر إلى الذاكرة المحلية. لا ترسل كلمة المرور الرئيسية كعلم CLI.
  2. unlock — يشتق مفتاح الخزنة مجدداً، يحدّث الرموز/المزامنة عند توفّر الخادم، ويطبع أمر تصدير للقشرة لـ OPENKEY_SESSION (استخدم eval $(openkey unlock)). خيارات: -e/--email، --raw (الرمز فقط). وضع JSON يُخرج حقول الجلسة.
  3. lock — يطبع unset OPENKEY_SESSION (أو تلميح JSON) لتنفيذ eval $(openkey lock).
  4. logout — يمسح رموز الوصول/التحديث؛ يُبقي ذاكرة النص المشفّر المحلية. اقرنه بـ lock لمسح متغير الجلسة.
  5. sync — يتطلب دخولاً؛ يسحب العناصر/المجموعات ويحدّث serverRevision.

مدة الجلسة الافتراضية 15 دقيقة (config set-lock). الجلسات المنتهية تتطلب unlock مجدداً.

متغيرات البيئة

المتغيرالغرض
OPENKEY_SESSIONكتلة جلسة مشفّرة قصيرة العمر من unlock
OPENKEY_PASSWORDكلمة المرور الرئيسية لـ login / unlock غير التفاعلي (سكربتات/CI فقط)
OPENKEY_NATIVE_SOCKETتجاوز مسار مقبس الجسر على Unix
OPENKEY_NATIVE_PORTتجاوز منفذ الجسر على Windows

فضّل المطالبة التفاعلية بكلمة المرور على أجهزتك الشخصية. عامل OPENKEY_PASSWORD ورموز الجلسة كمادة سرية في سجلات CI.

مرجع الأوامر

الأمريحتاج وصولاً للخزنة؟الوصف
genلاتوليد كلمة مرور دون اتصال
discoverالحفظ: نعم* / dry-run: لامسح SSH / .env / البيئة / AWS ← مجموعة الجهاز
secret add|list|get|copy|rmنعم*أسرار المطوّرين
get / copy / searchنعم*أسرار + تسجيلات دخول
statusلاحالة الجسر / الجلسة / الخادم
config set-server|show|set-lockلاإعداد CLI
login / logoutمصادقة خادم اختيارية
unlock / lockجلسة CLI اختيارية
syncيتطلب دخولاًسحب النص المشفّر من الخادم
forgetلامسح إعدادات وذاكرة CLI المحلية

*تطبيق سطح المكتب مفتوح القفل، أو OPENKEY_SESSION صالح بعد دخول الخادم.

نموذج الأمان

  • أوامر السرد/البحث تقنّع القيم؛ استخدم get / copy فقط عند الحاجة للنص الصريح.
  • خادم المزامنة يخزّن نصاً مشفّراً فقط؛ يشتق CLI المفاتيح محلياً كسائر عملاء OpenKey.
  • لا تمرّر كلمة المرور الرئيسية كعلم؛ تجنّب تسجيل OPENKEY_PASSWORD أو OPENKEY_SESSION.
  • حركة الجسر محلية فقط وتتطلب خزنة مفتوحة.
  • تنتهي رموز الجلسة؛ قلّل المدة بـ config set-lock على الأجهزة المشتركة.
  • forget يمسح حالة CLI على القرص؛ أدر رموز الخادم بـ logout إن أصبح الجهاز غير موثوق لاحقاً.

التطوير

bash
cd openkey_cli
npm test
npm run typecheck
npm run build

أدلة ذات صلة