# مفاتيح SSH

> احتفظ بمفاتيح SSH في Octa Pass، وأنشئ مفاتيح Ed25519 أو ECDSA أو RSA، واستورد ملفات OpenSSH وPEM وPKCS#8، وصدّر المفاتيح الخاصة والعامة بأمان.

Source: https://octap.app/ar/docs/features/ssh-keys/
Status: in-progress
Project: Octa Pass

:::note[قيد التطوير]
تعمل مفاتيح SSH في خزنة الويب وتطبيق سطح المكتب و[سطر الأوامر](https://octap.app/ar/docs/platforms/cli/) وتطبيقات iPhone وiPad وAndroid الأصلية، وفي تطبيق سطح المكتب [وكيل SSH](#وكيل-ssh) و[`~/.ssh`](#ssh-على-هذا-الحاسوب). وتعرض إضافة المتصفح المفاتيح لكنها لا تستطيع إلا نسخ أجزائها العامة. اختُبر الوكيل مع أدوات OpenSSH الحقيقية على macOS؛ أما طلبات Touch ID فيه وWindows وLinux فلم تُجرَّب على أجهزة حقيقية بعد.
:::

**مفتاح SSH** نوع عنصر قائم بذاته، له فئته في الشريط الجانبي وقسمه الخاص حين تُجمَّع القائمة حسب النوع. وهو مشفّر على جهازك مثل كل عنصر: لا يرى الخادم المفتاح الخاص ولا المفتاح العام ولا البصمة ولا التعليق.

## ما يحتويه المفتاح

| الحقل | ملاحظات |
|---|---|
| **المفتاح الخاص** | بصيغة OpenSSH، ويُخزَّن **بلا عبارة مرور**: فالخزنة تشفّره. لا يُعرض ولا يُنسخ إلا بعد أن تفتح القفل بكلمة المرور الرئيسية أو بفتح قفل الجهاز، أو تؤكد ذلك مرة أخرى؛ ولا يُحفظ في ملف إلا بعد أن تؤكد مرة أخرى. |
| **المفتاح العام** | `ssh-ed25519 AAAA…`، بلا التعليق. هذا ما تضعه على الخادم. |
| **نوع المفتاح** | خوارزمية SSH (`ssh-ed25519` و`ecdsa-sha2-nistp256` و`ssh-rsa` و…)، وتُعرض للناس بصيغة Ed25519 وECDSA P-256 وهكذا. |
| **البصمة** | `SHA256:…`، وهي نفسها التي يطبعها `ssh-keygen -l -E sha256`. هي العنوان الفرعي في القائمة وتميّز المفاتيح بعضها عن بعض. |
| **التعليق** | عادةً `you@computer`؛ وهو يأتي في آخر سطر `authorized_keys`. تتجاهله الخوادم. |
| **عبارة المرور** | اختيارية. تحمي النسخ التي تصدّرها؛ أما المفتاح في الخزنة فتحميه الخزنة نفسها. |
| **الملاحظات** وحقول أخرى | مثل أي عنصر. |

## الإنشاء

اختر **مفتاح SSH جديد**، ثم نوع المفتاح و**إنشاء**:

- **Ed25519** يعمل مع كل الخوادم الحالية تقريبًا وهو الموصى به.
- **ECDSA P-256** و**P-384** للخوادم التي تطلب هذين المنحنيين.
- **RSA 3072** أو **RSA 4096** للخوادم القديمة التي لا تدعم Ed25519. RSA أبطأ وأكبر حجمًا؛ فضّل Ed25519 حيث تستطيع.

يُنشأ المفتاح على الجهاز بواسطة نواة Octa Pass. ولا يغادر المفتاح الخاص الجهاز دون تشفير. فضّل Ed25519. ومفاتيح RSA تعمل أيضًا: يُوقَّع بها عبر `ring`، لا عبر حزمة `rsa`، بسبب [تنبيه أمني مفتوح متعلق بالتوقيت](#مفاتيح-rsa).

## الاستيراد

استورد ملف مفتاح خاص، أو الصق نصه:

- مفاتيح **OpenSSH** الخاصة (`-----BEGIN OPENSSH PRIVATE KEY-----`)، بعبارة مرور أو دونها.
- مفاتيح **PEM**: PKCS#1 RSA (`RSA PRIVATE KEY`) وSEC1 EC (`EC PRIVATE KEY`) وDSA (`DSA PRIVATE KEY`).
- مفاتيح **PKCS#8** (`PRIVATE KEY` و`ENCRYPTED PRIVATE KEY`)، عادية أو محمية بعبارة مرور.

يطلب Octa Pass عبارة المرور حين يكون للملف واحدة، ثم يقرأ المفتاح العام والنوع والبصمة من المفتاح الخاص. اختر الملف **بدون** `.pub`: لا يمكن تحويل مفتاح عام إلى مفتاح خاص، ويقول التطبيق ذلك.

بعض المفاتيح تُحفظ لكن لا يمكن استخدامها بعد:

- مفاتيح **DSA** ومفاتيح أمان **FIDO** (`sk-`) تُخزَّن مع مفتاحها العام وبصمتها. ولا يمكن إنشاؤها أو استخدامها أو تحويلها في هذا الإصدار.
- مفاتيح **PuTTY** (`.ppk`) والمفاتيح المشفّرة بـ **3DES** لا تُقرأ. حوّلها بـ `ssh-keygen` أولًا.

الملفات المشوّهة وعبارة المرور الخاطئة والصيغ غير المدعومة تحصل كل منها على رسالة واضحة بدلًا من عنصر معطوب.

## العرض والنسخ

يعرض العنصر المفتاح العام والبصمة والنوع والتعليق. انسخ المفتاح العام من العنصر، أو من صف القائمة في إضافة المتصفح. يبقى **المفتاح الخاص** مخفيًا إلى أن تختار **أظهِر**. إذا فتحت قفل Octa Pass بكلمة المرور الرئيسية أو بفتح قفل الجهاز فهذا يكفي؛ وإلا يطلب منك تأكيد أنك أنت (راجع [الإظهار والنسخ](https://octap.app/ar/docs/features/biometric-unlock/#الإظهار-والنسخ)). أما تصدير المفتاح الخاص فيسأل في كل مرة.

تعرض الإضافة عناصر مفاتيح SSH وبصمتها وزر نسخ للمفتاح العام فقط. ولا تقرأ المفتاح الخاص ولا تعرضه أبدًا.

## التصدير

- **احفظ المفتاح الخاص** يكتب ملف OpenSSH. اختر عبارة مرور للملف أو اتركها فارغة. وإذا كانت للعنصر عبارة مرور محفوظة، تُعرض افتراضيًا.
- **احفظ المفتاح العام** يكتب سطر `authorized_keys` (المفتاح وتعليقه).

يكتب [سطر الأوامر](https://octap.app/ar/docs/platforms/cli/#مفاتيح-ssh) المفاتيح الخاصة بحيث لا يقرؤها غيرك (الوضع `0600`) ولا يستبدل ملفًا موجودًا دون `--force`.

## نقل المفاتيح بين التطبيقات

يحمل تصدير Octa Pass نفسه و[Credential Exchange Format](https://octap.app/ar/docs/import-export/from-cxf/) (CXF) عناصر `sshKey` دون فقد. حين يصدّر Octa Pass بصيغة CXF، يُكتب المفتاح بوصفه بيانات اعتماد `ssh-key` ومفتاحه الخاص بصيغة PKCS#8 وحقل مخصص اختياري لعبارة المرور. واستيراد ملف كهذا يعيده عنصر مفتاح SSH. لا يمكن تحويل مفاتيح DSA وFIDO إلى CXF، ويُبلَّغ عنها بأنها تُركت.

## وكيل SSH

يستطيع تطبيق سطح المكتب أن يعمل وكيل SSH لك، فتستخدم `ssh` وGit وبيئات التطوير المفاتيح التي في خزنتك دون نسخة على القرص.

1. في **الإعدادات ← وكيل SSH**، فعّل **شغّل وكيل SSH**. يبقى متوقفًا حتى تفعل ذلك، والاختيار لهذا الحاسوب فقط.
2. اختر **استخدمه مع SSH**، فيضيف مقطعًا مميّزًا في نهاية `~/.ssh/config`، وتحتفظ الخوادم التي لها `IdentityAgent` خاص بها به. أو اضبطه لطرفية واحدة: `export SSH_AUTH_SOCK=~/.octapass/agent.sock`.

بعدها يسرد `ssh-add -l` مفاتيحك ويعمل `ssh` ببساطة.

- **توافق على كل استخدام.** كل توقيع يطلب Touch ID أو Windows Hello أو كلمة مرور النظام، مع اسم المفتاح والغرض منه والبرنامج الذي يطلبه. والإلغاء يرفضه. وعلى حاسوب بلا قفل تظهر بدلًا من ذلك نافذة سماح / رفض.
- **أثناء فتح الخزنة فقط.** الطلب إلى خزنة مقفلة يفتح طلب فتح القفل بالجهاز. وإذا ألغيته، أو لم يكن فتح القفل بالجهاز مفعّلًا، لا يعرض الوكيل شيئًا لمدة دقيقة، فلا تظل الأدوات التي تستعلم منه تسأل.
- **يسرد ويوقّع فقط.** لا يستطيع `ssh-add` إضافة مفاتيح أو إزالتها: الخزنة هي مالكتها.
- **مفاتيح أقل:** تتوقف الخوادم بعد نحو ست محاولات، فإذا كانت لديك مفاتيح كثيرة، ألغِ تحديد **اعرض هذا المفتاح عبر وكيل SSH** في محرر المفتاح.
- **Git:** الأمر `octapass git setup --signing-key <key> --agent` يوقّع الإيداعات عبر الوكيل، أو اضبط `gpg.format = ssh` و`user.signingkey = key::<public key>` بنفسك. راجع [سطر الأوامر](https://octap.app/ar/docs/platforms/cli/#git).
- **التمرير** (`ssh -A`) يعمل ويسألك عند كل استخدام، لكن الطلب يسمّي `ssh` المحلي لديك، لا البرنامج البعيد.

على **Mac** يعمل التطبيق في عزلة (sandbox)، فيكون مقبس الوكيل في مجلد التطبيق نفسه، `~/Library/Group Containers/<team>.app.octap/agent.sock`، ولا يعدّل Octa Pass الملف `~/.ssh/config` بنفسه. تعرض **الإعدادات ← وكيل SSH** المسار مع زر للنسخ، والأسطر التي تضيفها إلى `~/.ssh/config` (في المسار مسافة، فأبقِ علامات الاقتباس):

```text
Host *
  IdentityAgent "~/Library/Group Containers/<team>.app.octap/agent.sock"
```

أو لطرفية واحدة: `export SSH_AUTH_SOCK="$HOME/Library/Group Containers/<team>.app.octap/agent.sock"`. و`<team>` هو فريق Apple الذي وقّع التطبيق؛ وتعرض الإعدادات المسار كاملًا.

على **Windows** يستخدم الوكيل القناة `openssh-ssh-agent` التي يبحث عنها `ssh.exe` في Windows. ولا يستطيع أخذها إلا وكيل واحد، فأوقف أولًا خدمة **OpenSSH Authentication Agent**؛ وتعرض الإعدادات الخطأ إن كانت مأخوذة.

### مفاتيح RSA

لحزمة `rsa` تنبيه أمني مفتوح، [RUSTSEC-2023-0071](https://rustsec.org/advisories/RUSTSEC-2023-0071) (هجوم Marvin)، وهو تسرّب توقيتي في عمليات المفتاح الخاص. وكان لا يزال بلا إصلاح حين فحصناه آخر مرة في 2 نوفمبر 2026، في 0.9.10 وفي 0.10.0-rc.19. لذلك لا يوقّع Octa Pass بتلك الحزمة أبدًا: تمر تواقيع RSA عبر [`ring`](https://github.com/briansmith/ring)، وهي ثابتة الزمن. لا تُنشأ إلا تواقيع `rsa-sha2-256` و`rsa-sha2-512`؛ ويُرفض `ssh-rsa` القديم القائم على SHA-1، لذلك لن يقبل خادم أقدم من أن يدعم SHA-2 مفتاح RSA الخاص بك. ولا تستطيع مفاتيح OpenPGP من نوع RSA التوقيع إطلاقًا، لأن تلك المكتبة ليس فيها خيار كهذا.

## ~/.ssh على هذا الحاسوب

في تطبيق سطح المكتب، يسرد محرر المفاتيح المفاتيح الخاصة الموجودة أصلًا في `~/.ssh`: اختر واحدًا لإدخاله، مع عبارة مروره إن كانت له. وعلى مفتاح محفوظ، يكتب **احفظ في ~/.ssh** المفتاح الخاص (بحيث لا يقرؤه غيرك) وملف `.pub` الخاص به، بعد أن تؤكد هويتك. ولا يستبدل ملفًا أبدًا ما لم تحدد ذلك المربع. ولا يحدث أي منهما من تلقاء نفسه: لا يراقب Octa Pass المجلد ولا يزامنه.

## ليس بعد

- الشاشات الأصلية في iOS وAndroid.
- ربط استيراد مديرين آخرين (Bitwarden وProton Pass و1PUX وKeeper) بنوع مفتاح SSH؛ وهي حاليًا تصل ملاحظات آمنة. CXF هو الاستثناء.
