macOS Tahoe 26.3 أفسد SSH: تغييرات حساسية الأحرف وإزالة مفاتيح DSA ودليل الإصلاح الشامل

macOSTahoe ·
macOS Tahoe 26.3 أفسد SSH: تغييرات حساسية الأحرف وإزالة مفاتيح DSA ودليل الإصلاح الشامل

غيّر macOS Tahoe 26.3 بصمت معالجة أسماء المستخدمين في SSH لتصبح حساسة لحالة الأحرف وأوقف مفاتيح ssh-dss. دليل شامل لإصلاح اتصالات SSH وتحديث الإعدادات والانتقال إلى مفاتيح Ed25519.

أطلقت Apple نظام macOS Tahoe 26.3 في الحادي عشر من فبراير 2026، وعلى الفور توقفت اتصالات SSH لآلاف المطورين ومديري الأنظمة. لم يكن ثمة تحذير. لم يكن ثمة مساعد ترحيل. ولم يُشَر إلى هذا التغيير في ملاحظات الإصدار. في يوم ما كنت تستطيع تنفيذ ssh administrator@خادمك وفي اليوم التالي تحصل على Connection closed by 10.10.83.28 port 22. وإن كنت تعتمد على مفاتيح DSA للمصادقة على البنية التحتية القديمة، فقد توقفت عن العمل كلياً. يشرح هذا الدليل ما الذي تغيّر بالضبط، ولماذا حدث ذلك، وكيف تُصلح كل سير عمل متأثر -- من الجلسات التفاعلية إلى خطوط أنابيب CI/CD المؤتمتة.

النقاط الرئيسية

  • يُطبّق macOS Tahoe 26.3 أسماء مستخدمين SSH حساسة لحالة الأحرف. كتابة administrator بدلاً من Administrator يؤدي الآن إلى إغلاق الاتصال فوراً دون طلب كلمة المرور.
  • تمت إزالة مفاتيح ssh-dss (DSA) بصفة دائمة. يتضمن OpenSSH 10.0 المُجمَّع مع Tahoe 26.3 دعم DSA بشكل كامل من الملف الثنائي. لا يوجد علامة تهيئة لإعادة تفعيله.
  • تظهر الآن تحذيرات تبادل المفاتيح ما بعد الكمومية عند الاتصال بخوادم لا تدعم mlkem768x25519-sha256 أو sntrup761x25519-sha512.
  • Ed25519 هو نوع المفتاح الموصى به لجميع مفاتيح SSH الجديدة. إنه أسرع وأكثر أماناً ويُنتج توقيعات أصغر من RSA.
  • يجب مراجعة كل ملف ~/.ssh/config بحثاً عن عدم تطابق حالة الأحرف في توجيهات User وأي إشارات إلى ssh-dss في HostKeyAlgorithms أو PubkeyAcceptedAlgorithms.

فهرس المحتويات

  1. ما الذي تغيّر بالضبط في SSH في macOS Tahoe 26.3
  2. تشخيص أعطال اتصال SSH بعد التحديث
  3. فهم تغيير حساسية حالة الأحرف
  4. فهم إزالة مفاتيح DSA
  5. تحذيرات تبادل المفاتيح ما بعد الكمومية
  6. الإصلاح خطوة بخطوة: مشاكل حساسية الأحرف
  7. الإصلاح خطوة بخطوة: الانتقال من DSA إلى Ed25519
  8. دليل تدقيق إعدادات SSH الشامل
  9. تغييرات عميل SSH والتكامل مع Keychain
  10. التأثير على خطوط أنابيب CI/CD والأتمتة
  11. التأثير على سير عمل التطوير عن بُعد
  12. حلول بديلة للبنية التحتية القديمة
  13. أفضل ممارسات أمان SSH لعام 2026
  14. الأسئلة الشائعة
  15. خاتمة

ما الذي تغيّر بالضبط في SSH في macOS Tahoe 26.3

يأتي macOS Tahoe 26.3 مزوداً بـ OpenSSH 10.0، الذي يُقدّم ثلاثة تغييرات جوهرية تؤثر على سير عمل SSH اليومي. لم تُبرز Apple أياً منها في ملاحظات الإصدار الموجهة للمستخدم، تاركةً للمطورين اكتشافها من خلال الاتصالات الفاشلة.

التغيير الأول: مطابقة أسماء المستخدمين مع مراعاة حالة الأحرف

قبل Tahoe 26.3، كان عميل SSH على macOS متساهلاً بشأن حالة أحرف اسم المستخدم. يمكنك الاتصال بـ ssh administrator@خادم أو ssh Administrator@خادم أو حتى ssh ADMINISTRATOR@خادم، وكان الخادم البعيد يحلّ اسم المستخدم بشكل صحيح طالما أن نظام التشغيل الأساسي يُطابق الحساب. بعد التحديث، يُطبّق عميل SSH مطابقة صارمة لحالة الأحرف حتى قبل إنشاء الاتصال بالكامل. إذا لم تتطابق حالة الأحرف مع ما يتوقعه الخادم البعيد، يُغلق الاتصال فوراً -- قبل اكتمال مصادقة كلمة المرور أو تبادل المفاتيح.

التغيير الثاني: إزالة DSA (ssh-dss) بشكل كامل

كان OpenSSH يُهمّش DSA منذ الإصدار 7.0 عام 2015. اتبع الإهمال جدولاً زمنياً واضحاً:

التاريخإصدار OpenSSHحالة DSA
20157.0معطّل افتراضياً، يمكن إعادة التفعيل عبر الإعدادات
20249.xاختياري وقت التجميع، مُفعَّل افتراضياً
منتصف 20249.xاختياري وقت التجميع، معطّل افتراضياً
أبريل 202510.0تمت إزالته كلياً من قاعدة الكود
فبراير 202610.0 (macOS Tahoe 26.3)يُوزَّع على جميع مستخدمي macOS

مع macOS Tahoe 26.3، لا يوجد حل بديل PubkeyAcceptedAlgorithms +ssh-dss. الخوارزمية غير موجودة في الملف الثنائي. أي إعداد SSH يُشير إلى ssh-dss سيُنتج خطأ Bad key types.

التغيير الثالث: تحذيرات تبادل المفاتيح ما بعد الكمومية

قدّم OpenSSH 10.0 تحذيراً يُشغَّل عند الاتصال بخوادم لا تدعم خوارزميات تبادل مفاتيح ما بعد الكم. يقرأ التحذير:

WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.

في حين أنه تحذير وليس فشلاً صارماً، إلا أنه يُحدث ضجيجاً في مخرجات الطرفية وقد يُعطّل البرامج النصية المؤتمتة التي تُحلّل مخرجات SSH.

ما لم يتغيّر

تجدر الإشارة إلى ما لا يزال كما هو:

  • مفاتيح RSA تستمر في العمل (مع خوارزميات التوقيع rsa-sha2-256 وrsa-sha2-512)
  • مفاتيح ECDSA تستمر في العمل (وإن كان Ed25519 مُفضَّلاً)
  • إعادة توجيه منافذ SSH والنفق وProxyJump تعمل بشكل متطابق
  • تنسيق ملف ~/.ssh/known_hosts لم يتغير

إن كنت جديداً على SSH في macOS أو تُهيئ بيئة تطوير من الصفر، يغطي دليل إعداد المطور على macOS Tahoe الإعداد الأولي الكامل.


تشخيص أعطال اتصال SSH بعد التحديث

قبل إجراء أي تغييرات، تحتاج إلى تحديد أيٍّ من المشكلات الثلاث يؤثر على اتصالاتك. المخرج التفصيلي لـ SSH هو الأداة التشخيصية الأساسية.

الخطوة الأولى: تفعيل المخرج التفصيلي لـ SSH

نفّذ أمر SSH الفاشل مع أعلام التفصيل الثلاثية لرؤية تفاوض المصافحة الكاملة:

ssh -vvv user@hostname

ينتج هذا مخرجاً تفصيلياً يُظهر كل مرحلة من مراحل الاتصال. ابحث عن هذه الأنماط المحددة:

نمط فشل حساسية الأحرف:

debug1: Connecting to 10.10.83.28 [10.10.83.28] port 22.
debug1: Connection established.
debug1: identity file /Users/you/.ssh/id_ed25519 type 3
debug3: receive packet: type 7
Connection closed by 10.10.83.28 port 22

المؤشر الرئيسي هو أن الاتصال يُغلق بعد الإنشاء لكن قبل أي محاولة مصادقة. لا توجد رسالة "Permission denied" -- الاتصال يسقط ببساطة.

نمط فشل مفتاح DSA:

/Users/you/.ssh/config line 15: Bad key types '+ssh-dss'.

أو:

Bad key types '+ssh-rsa,ssh-dss'

يظهر هذا الخطأ فوراً عندما يُحلّل عميل SSH ملف الإعدادات، قبل أي محاولة اتصال.

نمط تحذير ما بعد الكم:

WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.

يظهر هذا أثناء تبادل المفاتيح لكنه لا يمنع اكتمال الاتصال.

الخطوة الثانية: التحقق من إصدار عميل SSH

تحقق من إصدار OpenSSH الذي يعمل:

ssh -V

المخرج المتوقع على macOS Tahoe 26.3:

OpenSSH_10.0p1, LibreSSL 3.3.6

إن رأيت إصداراً أقدم، ربما يكون لديك OpenSSH مُثبَّت عبر Homebrew يأخذ الأولوية. تحقق من أي ملف ثنائي يُستخدم:

which ssh

SSH النظام موجود في /usr/bin/ssh. إن رأيت /opt/homebrew/bin/ssh أو /usr/local/bin/ssh، فأنت تستخدم إصدار Homebrew الذي قد يتصرف بشكل مختلف.

الخطوة الثالثة: الاختبار بمعاملات صريحة

عزل المشكلة باختبار حالة اسم المستخدم ونوع المفتاح بشكل صريح:

# اختبار حساسية الأحرف - جرّب كلا الحالتين
ssh -vvv Administrator@hostname
ssh -vvv administrator@hostname

# الاختبار بدون تدخل ملف الإعدادات
ssh -F /dev/null -vvv user@hostname

# الاختبار بمفتاح محدد
ssh -vvv -i ~/.ssh/id_ed25519 user@hostname

مخرج تصحيح SSH في الطرفية

الخطوة الرابعة: مراجعة إعدادات SSH بحثاً عن أخطاء

حلّل ملف الإعدادات لتحديد أي سطور تُشير إلى خوارزميات قديمة:

# التحقق من أي إشارات إلى ssh-dss
grep -n "ssh-dss" ~/.ssh/config

# التحقق من إشارات ssh-dss في إعدادات النظام
grep -n "ssh-dss" /etc/ssh/ssh_config

# التحقق من جميع توجيهات User لمراجعة حالة الأحرف
grep -n "User " ~/.ssh/config

للمزيد من الفهم لاستخدام الطرفية على macOS Tahoe، راجع دليل طرفية macOS Tahoe.


فهم تغيير حساسية حالة الأحرف

لماذا يُعطّل هذا التغيير الاتصالات

في معظم أنظمة Unix، أسماء المستخدمين حساسة لحالة الأحرف على مستوى نظام التشغيل. المستخدم المُسمى Administrator هو تقنياً حساب مختلف عن administrator. غير أن بروتوكول SSH نفسه (RFC 4252) ينص على أن أسماء المستخدمين "حساسة لحالة الأحرف" لكنه يُقرّ بأن تطبيقات الخادم قد تختار التعامل مع ذلك بشكل مختلف.

قبل macOS Tahoe 26.3، كان عميل SSH على macOS متساهلاً. عندما كتبت ssh administrator@خادم، كان العميل يُرسل اسم المستخدم كما هو، وكانت كثير من خوادم SSH (ولا سيما تلك التي تعمل على Windows أو macOS أو الأجهزة الشبكية) تُعيّر حالة الأحرف أثناء المصادقة. كان الاتصال ينجح لأن الخادم يتولى مطابقة administrator بالحساب Administrator.

مع OpenSSH 10.0، يُجري عميل SSH على macOS الآن فحصاً أكثر صرامة قبل المصادقة. إذا أعاد الخادم رسالة بروتوكول مبكرة تُشير إلى عدم تطابق حالة الأحرف، يُنهى الاتصال قبل المضي في المصادقة. هذا يعني:

  • الاتصالات بخوادم Windows (التي كانت تُعيّر حالة الأحرف تاريخياً) قد تنقطع
  • الاتصالات بالأجهزة الشبكية (أجهزة التوجيه والمحولات وأجهزة NAS) التي تستخدم أسماء مستخدمين غير حساسة لحالة الأحرف قد تنقطع
  • الاتصالات بخوادم macOS حيث الحساب الإداري Administrator (بحرف A كبير) لكن البرامج النصية تستخدم administrator (حرف صغير) ستنقطع
  • الاتصالات بخوادم Linux أقل احتمالاً للتأثر لأن أسماء مستخدمين Linux بالفعل حساسة لحالة الأحرف

السيناريوهات الشائعة التي تنكسر

السيناريو الأول: الإدارة عن بُعد من macOS إلى macOS

يتصل كثير من مديري الأنظمة بأجهزة Mac البعيدة باستخدام:

ssh [email protected]

لكن حساب المدير الافتراضي على macOS يُنشأ بصيغة Administrator بحرف A كبير. كان هذا يعمل قبل Tahoe 26.3 وينقطع بعده.

السيناريو الثاني: إدارة الأجهزة الشبكية

يستخدم الاتصال بأجهزة التوجيه والمحولات وجدران الحماية وأجهزة NAS في الغالب أسماء مستخدمين عامة:

ssh [email protected]
ssh [email protected]

إذا خزّن الجهاز اسم المستخدم كـ Admin أو ROOT، ستفشل هذه الاتصالات الآن بصمت.

السيناريو الثالث: أسماء مستعارة لإعدادات SSH

لدى كثير من المطورين مدخلات إعدادات SSH بحالة أحرف خاطئة كانت تعمل سابقاً:

# ~/.ssh/config - هذا قد ينكسر الآن
Host production
    HostName prod.example.com
    User deploy      # الخادم يتوقع "Deploy"
    IdentityFile ~/.ssh/prod_key

فهم إزالة مفاتيح DSA

الحجة الأمنية ضد DSA

يستخدم DSA (خوارزمية التوقيع الرقمي) المُطبَّق في SSH طول مفتاح ثابت يبلغ 1024 بت وSHA-1 للتجزئة. يوفر هذا المزيج ما يقرب من 80 بت من الأمان المتماثل -- أقل بكثير من الحد الأدنى البالغ 128 بت الذي توصي به معايير الأمان الحديثة.

نقاط الضعف المحددة لمفاتيح DSA:

الخاصيةDSA (ssh-dss)Ed25519RSA-4096
حجم المفتاح1024 بت256 بت4096 بت
خوارزمية التجزئةSHA-1SHA-512SHA-256/512
مستوى الأمان~80 بت~128 بت~128 بت
حجم التوقيع40 بايت64 بايت512 بايت
سرعة التوقيعبطيءسريعمعتدل
سرعة التحققبطيءسريعمعتدل
التعرض للتحيزمرتفعلا شيءلا شيء

DSA عرضة بشكل خاص لعيوب التطبيق. إذا كان لدى مولّد الأرقام العشوائية المُستخدم أثناء التوقيع أي تحيز، يمكن استعادة المفتاح الخاص من عدد صغير من التوقيعات. هذا ما استُغلّ في هجمات واقعية.

ما الذي تعنيه "الإزالة" فعلياً

في إصدارات macOS السابقة، كان DSA معطّلاً افتراضياً لكن يمكن إعادة تفعيله بخيارات الإعداد:

# كان هذا يعمل على macOS Sequoia والإصدارات الأقدم
Host legacy-server
    HostKeyAlgorithms +ssh-dss
    PubkeyAcceptedAlgorithms +ssh-dss

في macOS Tahoe 26.3، تُسبّب سطور الإعداد هذه نفسها أخطاءً لأن الملف الثنائي لـ SSH لم يعد يتعرف على ssh-dss كمعرّف خوارزمية صالح. الخطأ هو:

/Users/you/.ssh/config line 8: Bad key types '+ssh-dss'.

هذا يعني:

  1. لا يمكنك استخدام مفاتيح DSA للمصادقة (تسجيل الدخول بالمفتاح العام)
  2. لا يمكنك قبول مفاتيح مضيف DSA من الخوادم
  3. لا يمكنك حتى الإشارة إلى ssh-dss في ملفات الإعداد دون التسبب في أخطاء
  4. لا يستطيع أداة ssh-keygen بعد الآن توليد مفاتيح DSA

التحقق مما إذا كان لديك مفاتيح DSA

قبل المتابعة بالترحيل، تحقق من مفاتيحك الحالية:

# سرد جميع مفاتيح SSH مع أنواعها
for key in ~/.ssh/*.pub; do
    echo "=== $key ==="
    ssh-keygen -l -f "$key"
done

مثال على المخرج:

=== /Users/you/.ssh/id_dsa.pub ===
1024 SHA256:abc123... you@mac (DSA)          # يجب استبدال هذا المفتاح
=== /Users/you/.ssh/id_ed25519.pub ===
256 SHA256:xyz789... you@mac (ED25519)       # هذا المفتاح بخير
=== /Users/you/.ssh/id_rsa.pub ===
3072 SHA256:def456... you@mac (RSA)          # هذا المفتاح بخير

يجب استبدال أي مفتاح يُحدَّد بـ (DSA). إن وجدت واحداً، لا تحذفه بعد -- تحتاجه لتحديد الخوادم التي تُرخّصه.


تحذيرات تبادل المفاتيح ما بعد الكمومية

ما يعنيه التحذير

قدّم OpenSSH 10.0 تبادل مفاتيح ما بعد الكم باستخدام خوارزمية ML-KEM (المعروفة سابقاً بـ CRYSTALS-Kyber) مُهجَّنة مع X25519. خوارزمية تبادل المفاتيح الافتراضية هي الآن mlkem768x25519-sha256، مع sntrup761x25519-sha512 كبديل.

عند الاتصال بخادم لا يدعم أياً من هذه الخوارزميات، يعرض OpenSSH:

WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.

هجوم "التخزين الآن والفك لاحقاً" يعني أن عدواً يمكنه تسجيل حركة مرور SSH المُشفَّرة اليوم وفك تشفيرها في المستقبل عندما تصبح الحواسيب الكمومية قادرة على كسر خوارزميات تبادل المفاتيح الكلاسيكية.

متى سترى هذا التحذير

  • عند الاتصال بخوادم تُشغّل OpenSSH 8.x أو أقدم
  • عند الاتصال بأجهزة شبكية مع تطبيقات SSH مُضمَّنة
  • عند الاتصال بمثيلات سحابية مع إصدارات أقدم من SSH daemon
  • عند الاتصال بـ GitHub أو GitLab أو Bitbucket (قد تدعم خوارزميات PQ أو لا)

إسكات التحذير

إن فهمت الخطر وأردت قمع التحذير، أضف هذا إلى ~/.ssh/config:

# قمع تحذيرات ما بعد الكم بشكل عام
Host *
    WarnWeakCrypto no

أو لمضيفين محددين فقط:

Host legacy-server
    HostName 192.168.1.100
    WarnWeakCrypto no

الحل المثالي هو تحديث خوادمك إلى OpenSSH 9.0 أو أحدث، الذي يدعم sntrup761x25519-sha512، أو OpenSSH 9.9+ الذي يدعم mlkem768x25519-sha256 الأحدث.


الإصلاح خطوة بخطوة: مشاكل حساسية الأحرف

الإصلاح الأول: تحديد حالة الأحرف الصحيحة لاسم المستخدم

أولاً، تحقق من اسم المستخدم الدقيق على النظام البعيد. تعتمد الطريقة على نظام التشغيل البعيد:

لخوادم Linux/macOS البعيدة:

# إذا كان بإمكانك تسجيل الدخول عبر الوحدة الطرفية أو الوصول المادي أو عميل SSH آخر
grep "اسم_مستخدمك" /etc/passwd

# أو استخدم أمر id
id

# مثال على المخرج: uid=501(Administrator) gid=20(staff) groups=...

لخوادم Windows البعيدة (OpenSSH):

# في PowerShell على الجهاز البعيد
whoami
# المخرج: DOMAIN\Administrator

للأجهزة الشبكية:

تحقق من واجهة إدارة الويب للجهاز أو الوثائق للحصول على تنسيق اسم المستخدم الدقيق. الأنماط الشائعة:

  • Cisco IOS: عادةً أحرف صغيرة (admin)
  • Juniper: عادةً أحرف صغيرة (root)
  • Synology NAS: حساس لحالة الأحرف كما أُنشئ
  • QNAP NAS: حساس لحالة الأحرف كما أُنشئ

الإصلاح الثاني: تحديث ملف إعدادات SSH

افتح إعدادات SSH وصحّح جميع توجيهات User:

# فتح ملف الإعداد
nano ~/.ssh/config

قبل (مكسور):

Host production
    HostName prod.example.com
    User administrator
    IdentityFile ~/.ssh/prod_key

Host nas
    HostName nas.local
    User admin
    Port 22

بعد (مُصلَح):

Host production
    HostName prod.example.com
    User Administrator
    IdentityFile ~/.ssh/prod_key

Host nas
    HostName nas.local
    User Admin
    Port 22

الإصلاح الثالث: تحديث الأسماء المستعارة للصدفة والبرامج النصية

ابحث عن أوامر SSH في إعداد الصدفة:

# التحقق من أسماء bash المستعارة
grep -n "ssh " ~/.bashrc ~/.bash_profile 2>/dev/null

# التحقق من أسماء zsh المستعارة
grep -n "ssh " ~/.zshrc ~/.zprofile 2>/dev/null

# التحقق من أوامر SSH في البرامج النصية المخصصة
grep -rn "ssh " ~/scripts/ ~/bin/ 2>/dev/null

حدّث أي أسماء مستخدمين مُضمَّنة بشدة لاستخدام الحالة الصحيحة.

الإصلاح الرابع: تحديث متغيرات البيئة

تستخدم بعض الأدوات متغيرات البيئة لأسماء مستخدمي SSH:

# التحقق من متغيرات البيئة المتعلقة بـ SSH
env | grep -i ssh
env | grep -i user

# المتغيرات الشائعة للتحقق
echo $DEPLOY_USER
echo $SSH_USER
echo $REMOTE_USER

الإصلاح الخامس: التحقق من الإصلاح

بعد إجراء التغييرات، تحقق من كل اتصال:

# الاختبار مع مخرج تفصيلي
ssh -v production

# متوقع: مصادقة ناجحة
# debug1: Authentication succeeded (publickey).

الإصلاح خطوة بخطوة: الانتقال من DSA إلى Ed25519

يستعرض هذا القسم العملية الكاملة لاستبدال مفاتيح DSA بمفاتيح Ed25519. إن احتجت خلفية عن أوامر الطرفية، يغطي دليل إتقان Mac Terminal جميع الأساسيات.

مخطط ترحيل مفتاح SSH

المرحلة الأولى: جرد مفاتيح DSA

قبل توليد مفاتيح جديدة، وثّق مكان استخدام مفاتيح DSA:

# الخطوة الأولى: إيجاد جميع مفاتيح DSA على نظامك
find ~/.ssh -name "*.pub" -exec grep -l "ssh-dss" {} \;

# الخطوة الثانية: لكل مفتاح DSA، تحقق من الخوادم التي تُرخّصه
# لاحظ بصمة المفتاح العام
ssh-keygen -l -f ~/.ssh/id_dsa.pub

# الخطوة الثالثة: تحقق من known_hosts بحثاً عن مفاتيح مضيف DSA
grep "ssh-dss" ~/.ssh/known_hosts | awk '{print $1}'

أنشئ قائمة مراجعة الترحيل:

# إنشاء ملف تتبع الترحيل
cat > ~/ssh_migration_checklist.txt << 'EOF'
SSH DSA Key Migration Checklist
===============================
Date: $(date)

DSA Keys Found:
- [ ] ~/.ssh/id_dsa -> Used for: _______________
- [ ] ~/.ssh/id_dsa.pub -> Authorized on: _______________

Servers with DSA Host Keys:
- [ ] server1.example.com
- [ ] 192.168.1.100

Automation/Scripts Using DSA:
- [ ] deploy.sh
- [ ] backup-cron.sh
- [ ] CI/CD pipeline: _______________
EOF

المرحلة الثانية: توليد مفاتيح Ed25519 جديدة

أنشئ زوج مفاتيح Ed25519 جديد بتعليق ذو معنى:

# توليد مفتاح Ed25519 بتعليق وصفي
ssh-keygen -t ed25519 -C "اسمك@macbook-2026-02" -f ~/.ssh/id_ed25519

# ستُطلب منك عبارة مرور -- استخدمها
# تُشفّر عبارة المرور مفتاحك الخاص إن تعرض جهازك للاختراق

إن احتجت مفاتيح منفصلة لأغراض مختلفة (موصى به لعزل الأمان):

# مفتاح لخوادم العمل
ssh-keygen -t ed25519 -C "work-servers-2026" -f ~/.ssh/id_ed25519_work

# مفتاح للمشاريع الشخصية
ssh-keygen -t ed25519 -C "personal-2026" -f ~/.ssh/id_ed25519_personal

# مفتاح لأتمتة CI/CD
ssh-keygen -t ed25519 -C "cicd-automation-2026" -f ~/.ssh/id_ed25519_cicd

تحقق من المفاتيح المولَّدة:

# تحقق من المفتاح الجديد
ssh-keygen -l -f ~/.ssh/id_ed25519.pub

# المخرج المتوقع:
# 256 SHA256:abcdef123456... اسمك@macbook-2026-02 (ED25519)

المرحلة الثالثة: نشر المفاتيح الجديدة على الخوادم

لكل خادم كان يستخدم مفتاح DSA الخاص بك سابقاً، انشر المفتاح العام Ed25519 الجديد:

الطريقة الأولى: استخدام ssh-copy-id (إن كان بإمكانك المصادقة)

إن كان لديك طريقة مصادقة عاملة أخرى (كلمة مرور أو مفتاح مختلف):

# نشر المفتاح الجديد باستخدام مصادقة كلمة المرور
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server

# أو تحديد مفتاح عامل للمصادقة أثناء النشر
ssh-copy-id -i ~/.ssh/id_ed25519.pub -o "IdentityFile=~/.ssh/id_rsa" user@server

الطريقة الثانية: النشر اليدوي (إن لم يكن ssh-copy-id متاحاً)

# نسخ محتوى المفتاح العام
cat ~/.ssh/id_ed25519.pub | pbcopy

# تسجيل الدخول إلى الخادم بأي طريقة تعمل (كلمة مرور أو وحدة طرفية الخ)
ssh user@server

# على الخادم البعيد، أضف المفتاح
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "الصق_مفتاحك_العام_هنا" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

الطريقة الثالثة: للخوادم التي لا يمكن الوصول إليها عبر SSH

إن كان مفتاح DSA طريقة المصادقة الوحيدة ولم يعد يعمل:

  1. استخدم وحدة إدارة الويب للخادم (إن كانت متاحة)
  2. الوصول عبر وحدة طرفية مادية أو IPMI/iLO/iDRAC
  3. استخدم مضيفاً وسيطاً لا يزال يملك الوصول
  4. تواصل مع مدير الخادم

المرحلة الرابعة: تحديث إعدادات SSH

استبدل إشارات مفاتيح DSA في إعدادات SSH:

# قبل
Host old-server
    HostName legacy.example.com
    User admin
    IdentityFile ~/.ssh/id_dsa
    HostKeyAlgorithms +ssh-dss
    PubkeyAcceptedAlgorithms +ssh-dss

# بعد
Host old-server
    HostName legacy.example.com
    User Admin
    IdentityFile ~/.ssh/id_ed25519_work

المرحلة الخامسة: تنظيف المضيفين المعروفين

أزل مدخلات مفاتيح مضيف DSA القديمة:

# إيجاد خوادم بمفاتيح مضيف DSA في known_hosts
grep "ssh-dss" ~/.ssh/known_hosts

# إزالة مدخلات مضيف محددة (سيُقبل مفتاح المضيف مجدداً عند الاتصال التالي)
ssh-keygen -R hostname_or_ip

# أو إزالة جميع مدخلات DSA دفعة واحدة
# احتفظ بنسخة احتياطية أولاً
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.backup.$(date +%Y%m%d)

# ثم أزل مدخلات DSA
grep -v "ssh-dss" ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp
mv ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts

المرحلة السادسة: التحقق من أن كل شيء يعمل

اختبر اتصال كل خادم:

# اختبار الاتصالات مع مخرج تفصيلي
ssh -v old-server

# التحقق من تقديم المفتاح الصحيح
# ابحث عن: debug1: Offering public key: /Users/you/.ssh/id_ed25519_work ED25519

# تشغيل اختبار اتصال كامل لجميع المضيفين المُهيَّئين
for host in $(grep "^Host " ~/.ssh/config | awk '{print $2}' | grep -v '\*'); do
    echo "Testing: $host"
    ssh -o ConnectTimeout=5 -o BatchMode=yes "$host" echo "OK" 2>&1
    echo "---"
done

المرحلة السابعة: إيقاف مفتاح DSA

بمجرد ترحيل جميع الخوادم والتحقق منها:

# أرشفة مفاتيح DSA القديمة (لا تحذفها فوراً)
mkdir -p ~/.ssh/deprecated
mv ~/.ssh/id_dsa ~/.ssh/deprecated/id_dsa.retired.$(date +%Y%m%d)
mv ~/.ssh/id_dsa.pub ~/.ssh/deprecated/id_dsa.pub.retired.$(date +%Y%m%d)
chmod 400 ~/.ssh/deprecated/id_dsa.retired.*

احتفظ بالمفاتيح المؤرشفة لمدة 90 يوماً على الأقل في حال اكتشاف خادم فاتك.


دليل تدقيق إعدادات SSH الشامل

بعد معالجة المشاكل الفردية، أجرِ تدقيقاً كاملاً لإعدادات SSH. هذا مهم بشكل خاص إن كنت تستخدم SSH على macOS منذ سنوات وقد تراكمت لديك مدخلات إعداد عبر تحديثات macOS متعددة.

التدقيق الخطوة الأولى: التحقق من الخوارزميات القديمة

# التحقق من أي إشارات إلى خوارزميات قديمة
echo "=== التحقق من ~/.ssh/config ==="
grep -n -E "(ssh-dss|ssh-dsa|diffie-hellman-group1-sha1|diffie-hellman-group14-sha1|hmac-sha1-96|hmac-md5)" ~/.ssh/config 2>/dev/null

echo ""
echo "=== التحقق من /etc/ssh/ssh_config ==="
grep -n -E "(ssh-dss|ssh-dsa|diffie-hellman-group1-sha1)" /etc/ssh/ssh_config 2>/dev/null

echo ""
echo "=== التحقق من /etc/ssh/ssh_config.d/ ==="
grep -rn -E "(ssh-dss|ssh-dsa)" /etc/ssh/ssh_config.d/ 2>/dev/null

التدقيق الخطوة الثانية: التحقق من صحة بنية الإعدادات

# اختبار بنية إعدادات SSH دون الاتصال
ssh -G test-host 2>&1 | head -5

# إن كانت هناك أخطاء، ستظهر كـ:
# /Users/you/.ssh/config line X: Bad key types '...'

التدقيق الخطوة الثالثة: مراجعة جميع توجيهات User

# استخراج جميع توجيهات User والمضيفين التي تنطبق عليهم
awk '/^Host /{host=$2} /User /{print host, $0}' ~/.ssh/config

راجع المخرج وتحقق من حالة أحرف كل اسم مستخدم.

التدقيق الخطوة الرابعة: التحقق من أذونات الملفات

SSH صارم بشأن أذونات الملفات. الأذونات الخاطئة يمكن أن تُسبب أعطالاً صامتة:

# التحقق وإصلاح أذونات دليل SSH
echo "=== أذونات الدليل ==="
ls -la ~/.ssh/

echo ""
echo "=== الأذونات المتوقعة ==="
echo "~/.ssh/           -> drwx------ (700)"
echo "~/.ssh/config     -> -rw------- (600)"
echo "~/.ssh/id_*       -> -rw------- (600) للمفاتيح الخاصة"
echo "~/.ssh/*.pub      -> -rw-r--r-- (644) للمفاتيح العامة"
echo "~/.ssh/authorized_keys -> -rw------- (600)"
echo "~/.ssh/known_hosts     -> -rw-r--r-- (644)"

# إصلاح الأذونات إذا لزم الأمر
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config 2>/dev/null
chmod 600 ~/.ssh/id_* 2>/dev/null
chmod 644 ~/.ssh/*.pub 2>/dev/null
chmod 600 ~/.ssh/authorized_keys 2>/dev/null

التدقيق الخطوة الخامسة: نموذج إعداد SSH الحديث الموصى به

إليك نموذج إعداد SSH حديثاً وكاملاً يعمل مع macOS Tahoe 26.3:

# ~/.ssh/config
# مُحدَّث لـ macOS Tahoe 26.3 / OpenSSH 10.0
# آخر تدقيق: 2026-02-28

# ============================================
# الإعدادات الافتراضية العامة
# ============================================
Host *
    # استخدام مفاتيح Ed25519 افتراضياً
    IdentityFile ~/.ssh/id_ed25519

    # تقديم المفاتيح المُهيَّئة صراحةً لكل مضيف فقط
    IdentitiesOnly yes

    # التكامل مع macOS Keychain
    UseKeychain yes
    AddKeysToAgent yes

    # تفضيلات تبادل المفاتيح الحديثة
    KexAlgorithms mlkem768x25519-sha256,[email protected],curve25519-sha256,[email protected]

    # استقرار الاتصال
    ServerAliveInterval 60
    ServerAliveCountMax 3

    # تصليب الأمان
    HashKnownHosts yes
    StrictHostKeyChecking ask

# ============================================
# خوادم العمل
# ============================================
Host prod-web
    HostName prod-web.example.com
    User Deploy
    IdentityFile ~/.ssh/id_ed25519_work
    Port 22

Host staging
    HostName staging.example.com
    User Deploy
    IdentityFile ~/.ssh/id_ed25519_work
    Port 22

# ============================================
# الخوادم الشخصية
# ============================================
Host homelab
    HostName 192.168.1.100
    User admin
    IdentityFile ~/.ssh/id_ed25519_personal

# ============================================
# إعداد المضيف الوسيط
# ============================================
Host internal-*
    ProxyJump bastion.example.com
    User admin
    IdentityFile ~/.ssh/id_ed25519_work

Host bastion.example.com
    User jump-user
    IdentityFile ~/.ssh/id_ed25519_work
    ForwardAgent no

تغييرات عميل SSH والتكامل مع Keychain

يُحدث macOS Tahoe 26.3 أيضاً تغييرات دقيقة في كيفية تفاعل عميل SSH مع macOS Keychain.

التكامل مع Keychain

توجيه UseKeychain الخاص بـ macOS يستمر في العمل في Tahoe 26.3، لكن سلوكه صُقّل:

# إضافة مفتاح Ed25519 الجديد إلى macOS Keychain
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

# التحقق من إضافة المفتاح
ssh-add -l

إن أُضيف المفتاح بنجاح، سترى:

256 SHA256:abcdef123456... اسمك@macbook-2026-02 (ED25519)

التحميل الدائم للمفاتيح

تأكد من أن إعداد SSH يتضمن هذه التوجيهات للحفاظ على استمرارية المفاتيح عبر إعادة التشغيل:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_ed25519

بدون UseKeychain yes، ستحتاج إلى تشغيل ssh-add بعد كل إعادة تشغيل.

التحقق من عميل SSH

# التحقق من تشغيل العميل
echo $SSH_AUTH_SOCK

# سرد المفاتيح المحمَّلة
ssh-add -l

# إن لم تكن هناك مفاتيح محمَّلة، أضفها
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

للمزيد من التفاصيل حول إعدادات أمان macOS، راجع دليل أمان وخصوصية macOS Tahoe.


التأثير على خطوط أنابيب CI/CD والأتمتة

لتغييرات SSH في macOS Tahoe 26.3 آثار مهمة على سير العمل المؤتمت. إن كان خط أنابيب CI/CD يعمل على مشغّلي macOS (GitHub Actions أو GitLab CI أو Jenkins على Mac)، ستؤثر هذه التغييرات عليك بعد تحديث نظام تشغيل المشغّل.

GitHub Actions

إن كنت تستخدم مشغّلي macos-latest أو macos-15، سيُحدَّث الملف الثنائي لـ SSH في نهاية المطاف. دقّق في سير عملك الآن:

# .github/workflows/deploy.yml
# قبل (يُحتمل أن يكون مكسوراً)
- name: Deploy
  run: |
    ssh administrator@${{ secrets.DEPLOY_HOST }} "cd /app && git pull"

# بعد (مُصلَح)
- name: Deploy
  run: |
    ssh Administrator@${{ secrets.DEPLOY_HOST }} "cd /app && git pull"

تحقق من أسرار النشر:

  • DEPLOY_USER -- تحقق من مطابقة حالة الأحرف مع الحساب البعيد
  • SSH_PRIVATE_KEY -- تحقق من أنه ليس مفتاح DSA
  • KNOWN_HOSTS -- تحقق من عدم وجود مدخلات مفتاح مضيف DSA

GitLab CI

# .gitlab-ci.yml
deploy:
  before_script:
    # التحقق من نوع المفتاح قبل النشر
    - ssh-keygen -l -f ~/.ssh/id_deploy
    # التأكد من أنه ليس DSA
    - |
      if ssh-keygen -l -f ~/.ssh/id_deploy | grep -q "DSA"; then
        echo "ERROR: DSA key detected. Migration required."
        exit 1
      fi
  script:
    # استخدام حالة الأحرف الصحيحة لاسم المستخدم
    - ssh -o StrictHostKeyChecking=no Deploy@$DEPLOY_HOST "deploy.sh"

Jenkins

لخطوط أنابيب Jenkins التي تعمل على وكلاء macOS:

pipeline {
    agent { label 'macos' }
    stages {
        stage('Pre-flight SSH Check') {
            steps {
                sh '''
                    # التحقق من إصدار SSH
                    ssh -V

                    # التحقق من مفاتيح DSA في بيانات الاعتماد
                    for key in ~/.ssh/*.pub; do
                        if ssh-keygen -l -f "$key" | grep -q "DSA"; then
                            echo "WARNING: DSA key found: $key"
                            exit 1
                        fi
                    done

                    echo "SSH pre-flight check passed"
                '''
            }
        }
    }
}

Ansible Playbooks

إن كنت تُشغّل Ansible من عقدة تحكم macOS:

# ansible.cfg
[defaults]
# ضمان استخدام الملف الثنائي الصحيح لـ SSH
ssh_executable = /usr/bin/ssh

# فرض وسائط SSH محددة
[ssh_connection]
ssh_args = -o IdentitiesOnly=yes -o IdentityFile=~/.ssh/id_ed25519_ansible

تحقق من جرد Ansible بحثاً عن حالة أحرف اسم المستخدم:

# inventory.ini
# قبل
[webservers]
web1.example.com ansible_user=administrator

# بعد
[webservers]
web1.example.com ansible_user=Administrator

البرامج النصية للنسخ الاحتياطي المؤتمتة

راجع أي وظائف cron أو مهام launchd تستخدم SSH:

# إيجاد جميع وظائف cron مع إشارات SSH
crontab -l 2>/dev/null | grep -i ssh

# إيجاد ملفات plist لـ launchd مع إشارات SSH
grep -rl "ssh" ~/Library/LaunchAgents/ /Library/LaunchAgents/ /Library/LaunchDaemons/ 2>/dev/null

# التحقق من برامج النسخ الاحتياطي rsync (يستخدم rsync SSH افتراضياً)
grep -rn "rsync.*@" ~/scripts/ ~/bin/ 2>/dev/null

التأثير على سير عمل التطوير عن بُعد

VS Code Remote SSH

تخزّن إضافة Remote SSH لـ Visual Studio Code إعدادات الاتصال التي قد تتأثر:

# موقع إعداد SSH في VS Code
cat ~/Library/Application\ Support/Code/User/settings.json | grep -A5 "remote.SSH"

# التحقق من إشارات SSH في إعدادات VS Code
grep -n "ssh" ~/Library/Application\ Support/Code/User/settings.json 2>/dev/null

حدّث أهداف SSH في VS Code لاستخدام حالة الأحرف الصحيحة لاسم المستخدم ومفاتيح غير DSA.

JetBrains Gateway / التطوير عن بُعد

تخزّن بيئات التطوير المتكاملة JetBrains إعدادات SSH بشكل منفصل:

# التحقق من إعدادات SSH في JetBrains
find ~/Library/Application\ Support/JetBrains -name "*.xml" -exec grep -l "ssh" {} \; 2>/dev/null

tmux والجلسات الدائمة

إن كنت تستخدم tmux أو screen عبر SSH، تحتاج برامج إعادة الاتصال النصية إلى التحديث:

# اسم مستعار شائع لإعادة الاتصال بـ tmux - تحقق من حالة أحرف اسم المستخدم
alias tm='ssh -t Administrator@server "tmux attach || tmux new"'

للحصول على إعداد شامل لبيئة المطور، راجع الدليل الشامل للمطور على macOS Tahoe.


حلول بديلة للبنية التحتية القديمة

بعض البيئات لا يمكن تحديثها فوراً. قد تستلزم الأجهزة الشبكية والأنظمة المُضمَّنة والخوادم القديمة استخدام DSA لسنوات. إليك حلولاً بديلة عملية، مُرتَّبة من الأكثر إلى الأقل توصية.

الحل البديل الأول: استخدام مضيف وسيط (موصى به)

أنشئ مضيف بستيون Linux لا يزال يدعم DSA واستخدمه كوسيط:

# ~/.ssh/config
Host legacy-device
    HostName 192.168.1.1
    User admin
    ProxyJump bastion

Host bastion
    HostName bastion.example.com
    User jump
    IdentityFile ~/.ssh/id_ed25519

يُشغّل مضيف البستيون إصداراً أقدم من OpenSSH (أو إصداراً مُجمَّعاً بدعم DSA) ويتولى تفاوض DSA مع الجهاز القديم. يحتاج جهاز Mac الخاص بك فقط للمصادقة على البستيون باستخدام Ed25519.

الحل البديل الثاني: استخدام حاوية Docker

شغّل عميل OpenSSH أقدم داخل حاوية Docker:

# إنشاء Dockerfile لـ SSH القديم
cat > ~/legacy-ssh/Dockerfile << 'EOF'
FROM alpine:3.18
RUN apk add --no-cache openssh-client
ENTRYPOINT ["ssh"]
EOF

# بناؤه
docker build -t legacy-ssh ~/legacy-ssh/

# استخدامه للاتصال بالأجهزة القديمة
docker run --rm -it \
    -v ~/.ssh:/root/.ssh:ro \
    legacy-ssh \
    -o HostKeyAlgorithms=+ssh-dss \
    -o PubkeyAcceptedKeyTypes=+ssh-dss \
    admin@legacy-device

أنشئ اسماً مستعاراً للصدفة من أجل الراحة:

# أضف إلى ~/.zshrc
alias legacy-ssh='docker run --rm -it -v ~/.ssh:/root/.ssh:ro legacy-ssh'

# الاستخدام
legacy-ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-device

الحل البديل الثالث: تثبيت إصدار أقدم من OpenSSH عبر Homebrew

يمكنك تجميع OpenSSH 9.7p1 (آخر إصدار بدعم DSA) من المصدر:

# تثبيت التبعيات
brew install openssl@3

# تنزيل الكود المصدري لـ OpenSSH 9.7p1
curl -O https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
tar xzf openssh-9.7p1.tar.gz
cd openssh-9.7p1

# تهيئته بدعم DSA وبادئة مخصصة
./configure \
    --prefix=$HOME/openssh97 \
    --with-ssl-dir=$(brew --prefix openssl@3)

# بناؤه وتثبيته
make -j$(sysctl -n hw.ncpu)
make install

# استخدام الملف الثنائي الأقدم لـ SSH
~/openssh97/bin/ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-device

أنشئ اسماً مستعاراً للاتصالات القديمة:

# أضف إلى ~/.zshrc
alias ssh-legacy='~/openssh97/bin/ssh -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-dss'

# الاستخدام
ssh-legacy admin@old-router

الحل البديل الرابع: استخدام جهاز افتراضي Linux

إن كنت تستخدم UTM أو Parallels أو VMware Fusion:

  1. أنشئ جهازاً افتراضياً Linux خفيفاً (Alpine أو Ubuntu Server)
  2. SSH من جهاز Mac إلى الجهاز الافتراضي (باستخدام Ed25519)
  3. من الجهاز الافتراضي، SSH إلى الجهاز القديم (باستخدام DSA)

يوفر هذا عزلاً كاملاً ولا يتطلب تعديل تثبيت SSH على macOS.

على المدى البعيد: خطّط لاستبدال الأجهزة

إن كنت تعتمد على DSA لأن أجهزتك الشبكية لا تدعم الخوارزميات الحديثة، فهذه إشارة واضحة على أن هذه الأجهزة وصلت إلى نهاية عمرها من منظور الأمان. خطّط لجدول زمني للاستبدال:

  • أجهزة التوجيه/المحولات: معظم موردي المؤسسات يدعمون Ed25519 منذ 2018
  • أجهزة NAS: Synology وQNAP وTrueNAS تدعم جميعها Ed25519
  • الخوادم القديمة: إن كانت تُشغّل OpenSSH أقدم من 6.5، يحتاج النظام بأكمله إلى التحديث

أفضل ممارسات أمان SSH لعام 2026

مع التغييرات في macOS Tahoe 26.3 كحافز، هذا هو الوقت المناسب لتطبيق تحسينات أمان SSH شاملة.

أفضل ممارسات إدارة المفاتيح

أولاً: استخدم مفاتيح منفصلة لأدوار منفصلة:

# البنية التحتية للعمل
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "work-2026"

# المشاريع الشخصية
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C "personal-2026"

# CI/CD والأتمتة
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_automation -C "automation-2026"

# استضافة Git (GitHub أو GitLab)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_git -C "git-2026"

ثانياً: استخدم دائماً عبارة مرور:

تُشفّر عبارة المرور مفتاحك الخاص في حالة السكون. إن تعرض جهازك للاختراق، لا يستطيع المهاجم استخدام مفاتيح SSH بدون عبارة المرور. مدمجةً مع تكامل macOS Keychain، تحتاج فقط إلى كتابة عبارة المرور مرة واحدة.

# عند الطلب أثناء توليد المفتاح:
Enter passphrase (empty for no passphrase): [أدخل عبارة مرور قوية]
Enter same passphrase again: [اؤكد]

ثالثاً: قم بتدوير المفاتيح سنوياً:

أدرج السنة في تعليقات مفاتيحك حتى تعرف متى وُلِّدت:

ssh-keygen -t ed25519 -C "أنت@شركة-2026-Q1" -f ~/.ssh/id_ed25519_work_2026

عند حلول العام الجديد، أنشئ مفاتيح جديدة وانشرها وأوقف المفاتيح القديمة.

رابعاً: حدّد أذونات الملفات الصحيحة:

# المفاتيح الخاصة: للمالك فقط
chmod 400 ~/.ssh/id_ed25519*
chmod 600 ~/.ssh/id_ed25519*.pub

# المفاتيح العامة يمكن قراءتها من قِبَل الجميع
chmod 644 ~/.ssh/id_ed25519*.pub

# دليل SSH نفسه
chmod 700 ~/.ssh

# ملف الإعداد
chmod 600 ~/.ssh/config

تصليب الأمان على جانب الخادم

إن كنت تُدير خوادم SSH، استغل هذه الفرصة لتصليبها:

# /etc/ssh/sshd_config الإعدادات الموصى بها

# تعطيل مصادقة كلمة المرور (استخدام المفاتيح فقط)
 PasswordAuthentication no

# تعطيل تسجيل دخول root
 PermitRootLogin no

# السماح لمستخدمين محددين فقط
AllowUsers deploy admin

# استخدام تبادل المفاتيح الحديث
KexAlgorithms mlkem768x25519-sha256,[email protected],curve25519-sha256

# استخدام خوارزميات مفتاح المضيف الحديثة
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256

# استخدام الشفرات الحديثة
Ciphers [email protected],[email protected],[email protected]

# استخدام MACs الحديثة
MACs [email protected],[email protected]

# تحديد المعدل
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30

بعد تغيير sshd_config، اختبر دائماً قبل الانفصال:

# التحقق من صحة الإعداد
sudo sshd -t

# إن لم تكن هناك أخطاء، أعد تشغيل sshd
sudo systemctl restart sshd

# مهم: احتفظ بجلستك الحالية مفتوحة واختبر باتصال جديد
# قبل إغلاق الاتصال الحالي

المراقبة والتنبيه

أنشئ مراقبة لأحداث مصادقة SSH:

# مراقبة auth.log للمحاولات الفاشلة (خوادم Linux)
tail -f /var/log/auth.log | grep "sshd"

# مراقبة سجل نظام macOS لأحداث SSH
log stream --predicate 'process == "sshd"' --level info

استكشاف أخطاء شائعة وإصلاحها

الخطأ: "Connection closed by X.X.X.X port 22"

السبب: عدم تطابق حالة أحرف اسم المستخدم.

الإصلاح:

# تحديد اسم المستخدم الصحيح
ssh -vvv user@host 2>&1 | grep "debug1: Sending"

# جرّب الحالة المعاكسة
ssh Administrator@host  # إن فشل 'administrator'
ssh administrator@host  # إن فشل 'Administrator'

الخطأ: "Bad key types '+ssh-dss'"

السبب: يُشير إعداد SSH إلى خوارزمية DSA المُزالة.

الإصلاح:

# إيجاد وتحرير السطر المُشكل
grep -n "ssh-dss" ~/.ssh/config

# أزل أو استبدل إشارة الخوارزمية
# قبل: HostKeyAlgorithms +ssh-dss
# بعد: (أزل السطر بأكمله أو استبدله بخوارزميات حديثة)

الخطأ: "Bad key types '+ssh-rsa,ssh-dss'"

السبب: يحتوي إعداد SSH على قائمة خوارزميات مركّبة تتضمن DSA.

الإصلاح:

# قبل
HostKeyAlgorithms +ssh-rsa,ssh-dss
PubkeyAcceptedAlgorithms +ssh-rsa,ssh-dss

# بعد (أزل ssh-dss واحتفظ بـ ssh-rsa إن لزم لـ RSA القديم)
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

ملاحظة: ssh-rsa (مع توقيعات SHA-1) قديم أيضاً. استخدم rsa-sha2-256 أو rsa-sha2-512 إن كان لا بد من RSA:

HostKeyAlgorithms rsa-sha2-512,rsa-sha2-256
PubkeyAcceptedAlgorithms rsa-sha2-512,rsa-sha2-256

الخطأ: "No matching host key type found"

السبب: الخادم البعيد يُقدّم مفاتيح مضيف DSA فقط.

الإصلاح: يتطلب هذا إجراءات على جانب الخادم. أنشئ مفاتيح مضيف جديدة على الخادم:

# على الخادم البعيد (إن كان لديك وصول إلى الوحدة الطرفية)
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""
sudo systemctl restart sshd

إن لم تستطع تحديث الخادم، استخدم حلول المضيف الوسيط أو Docker الموضحة أعلاه.

الخطأ: "WARNING: connection is not using a post-quantum key exchange algorithm"

السبب: الخادم البعيد لا يدعم تبادل مفاتيح ما بعد الكم.

الإصلاح:

# اقمع لمضيف محدد
# أضف إلى ~/.ssh/config:
Host old-server
    WarnWeakCrypto no

# أو اقمع بشكل عام (غير موصى به)
Host *
    WarnWeakCrypto no

الخطأ: "Permission denied (publickey)"

السبب: بعد ترحيل المفاتيح، المفتاح الجديد غير مُرخَّص على الخادم.

الإصلاح:

# التحقق من المفتاح المُقدَّم
ssh -v user@host 2>&1 | grep "Offering public key"

# نشر المفتاح الصحيح
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host

الخطأ: "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"

السبب: بعد إزالة مدخلات مفتاح مضيف DSA من known_hosts، يُقدّم الخادم نوعاً مختلفاً من مفتاح المضيف.

الإصلاح:

# أزل مدخل مفتاح المضيف القديم
ssh-keygen -R hostname

# أعد الاتصال واقبل مفتاح المضيف الجديد
ssh user@hostname
# ستُطلب منك التحقق من بصمة مفتاح المضيف الجديد

فهم السياق الأشمل

تغييرات SSH في macOS Tahoe 26.3 هي جزء من اتجاه أوسع عبر الصناعة. يساعدك فهم هذا السياق على الاستعداد للتغييرات المستقبلية بدلاً من التفاعل مع كل منها.

الجدول الزمني لإصدارات OpenSSH

الإصدارالتاريخالتغييرات الرئيسية
7.02015تعطيل DSA افتراضياً
8.22020إهمال توقيعات SHA-1 لـ RSA
8.82022تعطيل توقيعات RSA SHA-1 افتراضياً
9.02022تفعيل تبادل مفاتيح ما بعد الكم (sntrup761) افتراضياً
9.92024إضافة دعم ما بعد الكم ML-KEM
10.02025إزالة DSA كلياً، ML-KEM افتراضياً

تخلّف macOS تاريخياً عن هذه الإصدارات بمقدار 6-12 شهراً، وهذا ما يجعل إزالة DSA تؤثر على مستخدمي macOS في مطلع 2026 رغم أنها كانت في OpenSSH 10.0 منذ أبريل 2025.

ما تتوقعه لاحقاً

استناداً إلى خارطة طريق تطوير OpenSSH:

  • توقيعات RSA SHA-1 (ssh-rsa) من المرجح أن تُزال كلياً في OpenSSH 11.x
  • ECDSA مع منحنيات NIST قد يُهمَّش لصالح Ed25519
  • توقيعات ما بعد الكم (ليس فقط تبادل المفاتيح) ستُضاف
  • المصادقة المبنية على الشهادات ستُعزَّز بشكل متزايد بدلاً من المفاتيح العامة الخام

استعد الآن من خلال:

  1. التأكد من أن جميع مفاتيحك هي Ed25519
  2. الانتقال إلى rsa-sha2-256/512 إن كان لا بد من RSA
  3. اختبار تبادل مفاتيح ما بعد الكم مع خوادمك
  4. تقييم بنية تحتية لشهادات SSH لمنظمتك

للمزيد من التفاصيل حول ما تغيّر في تحديث macOS Tahoe 26.3 الأشمل، راجع دليل إصدار macOS Tahoe 26.3.


المرجع السريع: الأوامر التي تحتاجها

إليك مرجعاً موحداً لكل أمر مذكور في هذا الدليل، مُنظَّماً حسب المهمة:

التشخيص

# التحقق من إصدار SSH
ssh -V

# اختبار الاتصال التفصيلي
ssh -vvv user@host

# التحقق من الملف الثنائي لـ SSH المُستخدَم
which ssh

# الاختبار بدون ملف إعداد
ssh -F /dev/null user@host

# التحقق من أنواع المفاتيح الحالية
for key in ~/.ssh/*.pub; do
    echo "=== $key ==="
    ssh-keygen -l -f "$key"
done

توليد المفاتيح

# توليد مفتاح Ed25519 (موصى به)
ssh-keygen -t ed25519 -C "وصف-YYYY" -f ~/.ssh/id_ed25519

# توليد مفتاح RSA (إن لم يُدعم Ed25519 من قِبَل الهدف)
ssh-keygen -t rsa -b 4096 -C "وصف-YYYY" -f ~/.ssh/id_rsa

نشر المفاتيح

# نشر المفتاح على خادم بعيد
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host

# إضافة المفتاح إلى macOS Keychain
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

تدقيق الإعداد

# إيجاد إشارات DSA في الإعداد
grep -n "ssh-dss" ~/.ssh/config /etc/ssh/ssh_config

# إيجاد جميع توجيهات User
grep -n "User " ~/.ssh/config

# التحقق من صحة بنية الإعداد
ssh -G test-host

# إصلاح الأذونات
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 400 ~/.ssh/id_*
chmod 644 ~/.ssh/*.pub

التنظيف

# إزالة مفتاح مضيف قديم
ssh-keygen -R hostname

# إزالة جميع مدخلات DSA من known_hosts
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
grep -v "ssh-dss" ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp
mv ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts

الأسئلة الشائعة

هل يمكنني تخفيض إصدار OpenSSH على macOS Tahoe 26.3 لاستعادة دعم DSA؟

لا يمكنك استبدال الملف الثنائي للنظام OpenSSH على macOS بسبب حماية تكامل النظام (SIP). لكن يمكنك تثبيت إصدار أقدم عبر Homebrew أو التجميع من المصدر في موقع مخصص. سيظل ssh النظامي في /usr/bin/ssh دائماً إصدار OpenSSH 10.0 المُتضمَّن في Tahoe 26.3. راجع قسم "حلول بديلة للبنية التحتية القديمة" للحصول على تعليمات تفصيلية حول بناء OpenSSH 9.7p1 من المصدر.

هل تغيير حساسية الأحرف دائم أم عُلّة برمجية؟

استناداً إلى ملاحظات إصدار OpenSSH 10.0 وتوجه المشروع، يبدو هذا سلوكاً متعمداً يتوافق مع مواصفات بروتوكول SSH (RFC 4252)، التي تُعرّف أسماء المستخدمين على أنها حساسة لحالة الأحرف. لم تُعلّق Apple على ما إذا كان هذا عُلّة، ولا يوجد ما يشير إلى إمكانية تراجعها عنه. يجب اعتبار هذا سلوكاً دائماً وتحديث إعداداتك وفقاً لذلك.

هل ستتوقف مفاتيح RSA عن العمل أيضاً؟

مفاتيح RSA بتوقيعات SHA-2 (rsa-sha2-256 وrsa-sha2-512) تستمر في العمل وستكون مدعومة في المستقبل المنظور. غير أن مفاتيح RSA بتوقيعات SHA-1 (ssh-rsa) كانت معطّلة افتراضياً منذ OpenSSH 8.8 ومن المرجح أن تُزال كلياً في إصدار مستقبلي. إن كنت تستخدم مفاتيح RSA، تأكد من أنها على الأقل 3072 بت وأن خوادمك تقبل توقيعات SHA-2. للمفاتيح الجديدة، Ed25519 هو الخيار المُفضَّل.

كيف أُصلح اتصالات SSH من macOS إلى Windows Server؟

كانت تطبيقات OpenSSH على Windows Server تاريخياً غير حساسة لحالة الأحرف في أسماء المستخدمين. بعد تحديث macOS Tahoe 26.3، تحتاج إلى استخدام الحالة الدقيقة التي يتعرف عليها Windows. لحسابات النطاق، استخدم DOMAIN\Username أو [email protected]. للحسابات المحلية، تحقق من اسم الحساب في إدارة الكمبيوتر. حدّث ~/.ssh/config وفقاً لذلك:

Host windows-server
    HostName win.example.com
    User DOMAIN\\AdminUser
    IdentityFile ~/.ssh/id_ed25519

هل يؤثر هذا على SFTP وSCP أيضاً؟

نعم. كلٌّ من sftp وscp يستخدمان مكتبة عميل SSH نفسها وتخضعان لتطبيق حساسية الأحرف وإزالة DSA بشكل متطابق. أي عملاء SFTP (مثل Cyberduck أو Transmit أو FileZilla) يستخدمون الملف الثنائي لـ SSH النظامي سيتأثرون أيضاً. عملاء SFTP ذوو واجهة رسومية يتضمنون مكتبة SSH الخاصة بهم (مثل Cyberduck مع بناء libssh2 الخاص به) قد لا يتأثرون، لكن ذلك يعتمد على التطبيق المحدد.


خاتمة

أطلق macOS Tahoe 26.3 تغييرات SSH أفسدت سير العمل الراسخة دون تحذير كافٍ. تطبيق أسماء المستخدمين الحساسة لحالة الأحرف والإزالة الكاملة لـ DSA وتحذيرات تبادل المفاتيح ما بعد الكمومية -- كل منها يحتاج إلى اهتمام، لكنها جميعاً سهلة الحل بمجرد أن تفهم ما الذي تغيّر.

الإجراءات الفورية هي:

  1. راجع ~/.ssh/config بحثاً عن عدم تطابق حالة الأحرف في توجيهات User وأزل أي إشارات ssh-dss
  2. أنشئ مفاتيح Ed25519 لاستبدال أي مفاتيح DSA متبقية
  3. انشر المفاتيح الجديدة على جميع الخوادم في جردك
  4. حدّث برامج الأتمتة وخطوط أنابيب CI/CD بحالة الأحرف الصحيحة لأسماء المستخدمين ومسارات المفاتيح
  5. اقمع تحذيرات ما بعد الكم أو أصلحها بناءً على وضعك الأمني

هذه التغييرات، وإن كانت مُعطِّلة، تدفع نظام SSH في macOS نحو إعدادات أمان أقوى افتراضياً. Ed25519 أسرع وأكثر أماناً ويُنتج مفاتيح أصغر من DSA. أسماء المستخدمين الحساسة لحالة الأحرف تتوافق مع مواصفات بروتوكول SSH. تبادل المفاتيح ما بعد الكمومية يحمي من التهديدات المستقبلية. ألم الترحيل حقيقي، لكن تحسينات الأمان جوهرية.

إن كنت تُهيئ بيئة تطوير جديدة على macOS Tahoe، ابدأ بـ دليل إعداد المطور على macOS Tahoe لإعداد كل شيء بشكل صحيح من البداية. لإعداد أمني أشمل، يغطي دليل أمان وخصوصية macOS Tahoe مجمل نظام الأمان بما يتجاوز SSH.