SSH بعمق
SSH بعمق
يُعدّ SSH (الصدفة الآمنة) الجهاز العصبي لكل بنية تحتية إنتاجية. تستخدمه للدخول إلى الخوادم، ونقل الملفات، وتنفيذ الأوامر عن بُعد، وإعادة توجيه المنافذ، وتسلسل الوصول عبر خوادم الوسيط. في شركات التقنية الكبرى، تُقنَّن تكوينات SSH وأنماط الـ Bastion ضمن سياسات أمنية رسمية، إذ قد يمتد تأثير الإعدادات الخاطئة ليشمل مراكز بيانات بأكملها. يغطي هذا الدرس الموضوع كما يتعامل معه مهندس SRE كبير: المفاتيح، وتصليب sshd، وملف إعداد العميل، والوكيل، والأنفاق، ونمط Bastion الذي يحمي الأسطول من التعرض المباشر للإنترنت.
المصادقة بالمفاتيح: الأساس
تُحظر المصادقة بكلمة المرور عبر SSH في كل بيئة واعية أمنياً تقريباً. المفاتيح أقوى وتُتيح الأتمتة. يتكون الزوج من مفتاح خاص (يبقى على محطة عملك، لا يُشارك أبداً، ويجب حمايته بعبارة مرور) ومفتاح عام (يُوضع على كل خادم تحتاج الوصول إليه).
authorized_keys على الخادم صلاحية 600 (قراءة وكتابة للمالك فقط) وأن يمتلك مجلد ~/.ssh صلاحية 700. الصلاحيات المتساهلة تجعل sshd يتجاهل الملف بصمت — وهو أحد أكثر أسباب "لماذا لا يعمل مفتاحي؟" شيوعاً في الإنتاج.
تصليب sshd: الخادم الوكيل
يأتي sshd_config الافتراضي بإعدادات معقولة في التوزيعات الحديثة، لكن عدة إعدادات يجب تشديدها قبل تعريض الخادم للإنترنت. حرر /etc/ssh/sshd_config أو الأفضل أنشئ ملفاً في /etc/ssh/sshd_config.d/99-hardening.conf للفصل النظيف عن الإعدادات الافتراضية.
بعد أي تعديل، اختبر التكوين دائماً قبل إعادة التحميل لتجنب إغلاق نفسك خارج الخادم:
sshd على جهاز بعيد. إعادة التحميل تؤثر فقط على الاتصالات الجديدة؛ جلستك الحالية تنجو. إذا كان التكوين الجديد معطوباً، لا يزال لديك مسار إنقاذ. على الأجهزة الافتراضية السحابية، تأكد من أن وحدة تحكم المورد (AWS Session Manager، GCP Cloud Shell، إلخ) متاحة كبديل قبل تشديد الإعدادات.
ملف إعداد عميل SSH
كتابة أوامر طويلة مثل ssh -i ~/.ssh/id_ed25519 -p 2222 -J bastion.company.com user@10.0.1.55 عرضة للخطأ ويصعب أتمتتها. ملف ~/.ssh/config يُرمّز كل هذا مرة واحدة ويتيح لك كتابة ssh prod-api-01 فقط.
بهذا التكوين، يمر ssh prod-api-01 تلقائياً عبر خادم الوسيط، ويستخدم المفتاح الصحيح، ويُطبّق التحقق من مفتاح المضيف — أمر واحد بدون أي علامات يدوية.
HashKnownHosts yes عالمياً. يُخزّن أسماء المضيفين المعروفين كتجزئات SHA-1 بدلاً من النص الصريح، مما يمنع المهاجم الذي يقرأ ~/.ssh/known_hosts من رسم خريطة شبكتك الداخلية.
وكيل SSH: فتح المفاتيح مرة واحدة
المفتاح المحمي بعبارة مرور آمن عند الراحة لكنه مزعج إذا أعدت كتابة عبارة المرور عند كل اتصال. يحتفظ وكيل SSH بالمفاتيح المفككة في الذاكرة طوال فترة جلستك. تفتحه مرة واحدة؛ والوكيل يُوقّع التحديات نيابة عنك.
إعادة توجيه الوكيل (ForwardAgent yes أو العلامة -A) تتيح لك SSH من خادم الوسيط إلى الخوادم الداخلية باستخدام المفاتيح من وكيلك المحلي — المفتاح الخاص لا يغادر حاسوبك المحمول قط. هذا هو البديل الآمن لوضع المفاتيح الخاصة على خادم الوسيط.
ForwardAgent فقط على خادم الوسيط (جهاز تثق به وتتحكم فيه). لا تفعّله أبداً لمضيفين عشوائيين: أي شخص يمتلك صلاحية root على جهاز تتصل به بوكيل مُعاد توجيهه يمكنه اختطاف مقبس وكيلك وانتحال هويتك لدى أي خادم آخر يملك مفتاحك صلاحية الوصول إليه.
أنفاق SSH
تتيح أنفاق SSH توجيه حركة TCP بأمان عبر قناة SSH المشفرة. هناك ثلاثة أوضاع:
- إعادة التوجيه المحلي (
-L) — يربط منفذاً على جهازك المحلي ويُوجّه الحركة إلى وجهة بعيدة عبر خادم SSH. الاستخدام الكلاسيكي: الوصول إلى قاعدة بيانات لا تستمع إلا على localhost الخادم البعيد. - إعادة التوجيه البعيد (
-R) — يربط منفذاً على الخادم البعيد ويُوجّه الحركة الواردة إلى جهازك المحلي. مفيد لتعريض خدمة تطوير محلية مؤقتاً لمضيف بعيد. - البروكسي الديناميكي / SOCKS (
-D) — يحوّل عميل SSH إلى بروكسي SOCKS5 يُوجّه حركة TCP التعسفية عبر الخادم. يُستخدم للتصفح في الشبكات الداخلية.
نمط Bastion
يُعدّ خادم الوسيط (Bastion) (المعروف أيضاً بخادم القفز) نقطة الدخول الوحيدة المعتمدة لوصول SSH إلى شبكة خاصة. لا تمتلك بقية الخوادم عناوين IP عامة وتقبل اتصالات SSH فقط من IP الخادم الداخلي. هذا يُقلّص سطح الهجوم بشكل جذري: جهاز واحد فقط مواجه للإنترنت، محكم وخاضع للمراقبة والتدقيق.
تُنفّذ بيئات السحابة الحديثة هذا النمط إما باستخدام خادم Bastion تقليدي أو بدائل مُدارة:
- AWS Systems Manager Session Manager — لا خادم وسيط على الإطلاق؛ وكيل على كل نسخة؛ وصول عبر سياسة IAM، مُدقّق بالكامل في CloudTrail.
- GCP Identity-Aware Proxy (IAP) tunneling — نموذج مشابه؛ لا يتطلب منفذ SSH عاماً.
- Tailscale / Cloudflare Access — شبكة تراكب أو بروكسي zero-trust؛ لا يتطلب VPN.
SSH القائم على الشهادات: ما وراء المفاتيح المُصرَّح بها
على نطاق واسع، تُصبح إدارة authorized_keys عبر مئات الخوادم كابوساً: مفتاح موظف مغادر يجب حذفه من كل جهاز بشكل فردي. تستخدم المنظمات الكبيرة بدلاً من ذلك شهادات SSH — بيانات اعتماد موقّعة قصيرة الصلاحية تصدرها هيئة مصادقة (CA) داخلية. المفتاح العام لـ CA يُوضع على كل خادم مرة واحدة؛ أي شهادة موقّعة من تلك الـ CA تُقبل طوال فترة صلاحيتها (غالباً 8-24 ساعة). عند مغادرة موظف، توقف ببساطة عن إصدار الشهادات — الجلسات الحالية تنتهي صلاحيتها بشكل طبيعي.
أوضاع الفشل الشائعة
- أخطاء صلاحيات
authorized_keys— يرفضsshdاستخدام الملف إذا كان قابلاً للكتابة للجميع أو كان مجلد المنزل قابلاً للكتابة للمجموعة. الحل:chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys. - حجب SELinux/AppArmor لـ sshd — على RHEL/CentOS، إذا نقلت SSH إلى منفذ غير قياسي يجب تشغيل
semanage port -a -t ssh_port_t -p tcp 2222وإلا سيحجب SELinux المنفذ الجديد حتى بعد تحديثsshd_config. - عدم تطابق مفتاح المضيف المعروف — بعد إعادة بناء خادم بنفس الـ IP، يتغير مفتاح المضيف. يرفض SSH الاتصال بتحذير مثير للقلق. الحل:
ssh-keygen -R <hostname-or-ip>. في الأتمتة، استخدمStrictHostKeyChecking accept-newللاتصال الأول من إدارة التكوين، ثم اقفله علىyes. - صلاحية مقبس إعادة توجيه الوكيل — إذا كان
SSH_AUTH_SOCKغير مضبوط أو اختفى ملف المقبس، يفشل التوجيه بصمت. تحقق عبرssh-add -lعلى المضيف البعيد.