عن وكيل SSH

المقدمة


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

ما هو وكيل SSH


ssh-agentهو مدير رئيسي لـ SSH. يقوم بتخزين المفاتيح والشهادات في الذاكرة ، غير مشفرة وجاهزة للاستخدام ssh. هذا يلغي الحاجة لإدخال كلمة مرور في كل مرة تتصل فيها بالخادم. تعمل في الخلفية على نظامك ، منفصلة عن ssh، وعادة ما تبدأ في البداية الأولى ssh.

يحافظ وكيل SSH على أمان المفاتيح السرية لأنه لا :

  • لا يكتب أي معلومات أساسية إلى القرص.
  • لا يسمح لك بتصدير مفاتيحك الخاصة.

يمكن استخدام المفاتيح السرية المخزنة في Agent لغرض واحد فقط: توقيع رسالة.

ولكن إذا كان الوكيل يمكنه فقط توقيع الرسائل ، فكيف يقوم SSH بتشفير وفك تشفير حركة المرور؟

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

على سبيل المثال ، إليك كيفية التحقق من مفتاح مستخدم أثناء اتصال SSH ، من منظور الخادم:

  • يزود العميل الخادم بمفتاح عام.
  • يقوم الخادم بإنشاء وإرسال رسالة عشوائية قصيرة تطلب من العميل توقيعها باستخدام مفتاح خاص.
  • يطلب العميل من وكيل SSH توقيع الرسالة ويرسل النتيجة مرة أخرى إلى الخادم.
  • يتحقق الخادم من التوقيع باستخدام المفتاح العام للعميل.
  • الآن لدى الخادم دليل على أن العميل يمتلك المفتاح الخاص.

في وقت لاحق ، أثناء عملية الاتصال ، يتم إنشاء مجموعة من المفاتيح الجديدة والزائلة والمتماثلة ، والتي يتم استخدامها لتشفير حركة مرور جلسة SSH. قد لا تستمر هذه المفاتيح حتى جلسة كاملة ؛ يحدث حدث rekey على فترات منتظمة.

بروتوكول الوكيل


يستخدم SSH مقبس مجال Unix للتواصل مع الوكيل عبر بروتوكول وكيل SSH . معظم الناس يستخدمون ssh-agentما يأتي مع OpenSSH ، ولكن هناك العديد من البدائل مفتوحة المصدر.

بروتوكول الوكيل بسيط للغاية بحيث يمكنك كتابة وكيل SSH أساسي في يوم أو يومين. لديها فقط عدد قليل من العمليات الأساسية:

  • إضافة زوج مفاتيح عادي (مفاتيح خاصة ومفككة)
  • إضافة زوج مفاتيح محدود (مفاتيح خاصة ومفاتيح خاصة غير مشفرة)
  • إضافة مفتاح (عادي أو محدود) من البطاقة الذكية (المفتاح العام فقط)
  • حذف المفتاح
  • مفاتيح الإدراج المخزنة في الوكيل
  • توقيع رسالة بمفتاح مخزّن في الوكيل
  • قفل أو فتح وكيل كامل بكلمة مرور

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

الأمر ssh-addهو بوابتك إلى وكيل SSH. يقوم بجميع هذه العمليات باستثناء التوقيع. عندما تقوم بتشغيل ssh-add بدون أي معلمات ، سوف يقوم بفحص دليل المنزل الخاص بك لبعض المفاتيح القياسية وإضافتها إلى وكيلك. افتراضيًا ، يبحث عن:

  • ~/.ssh/id_rsa
  • ~/.ssh/id_ed25519
  • ~/.ssh/id_dsa
  • ~/.ssh/id_ecdsa

بمجرد إضافة المفاتيح إلى سلسلة المفاتيح ، سيتم استخدامها تلقائيًا ssh.

ssh-و macOS Keychain
ssh-agent ، التي يتم شحنها مع macOS ، يمكنها تخزين عبارة المرور للمفاتيح في macOS Keychain ، مما يجعل من السهل إعادة إضافة المفاتيح إلى الوكيل بعد إعادة التشغيل. اعتمادًا على إعدادات Keychain ، قد لا تزال بحاجة إلى إلغاء قفلها بعد إعادة التشغيل. لحفظ عبارات المرور الرئيسية إلى Keychain ، قم بتشغيل الأمر ssh-add -K [ ]. عادةً ما يتم تخزين عبارات المرور في "العناصر المحلية". ssh-agentستستخدم عبارات المرور المحفوظة تلقائيًا حسب الحاجة.

ما هو وكيل الشحن


تسمح ميزة إعادة توجيه الوكيل لوكيل SSH المحلي بالتواصل من خلال اتصال SSH موجود والمصادقة بشفافية على خادم بعيد. على سبيل المثال ، افترض أنك قمت بتسجيل الدخول إلى EC2 من خلال SSH وتريد استنساخ مستودع GitHub خاص من هناك. بدون إعادة توجيه الوكيل ، سيكون عليك تخزين نسخة من مفتاحك الخاص على GitHub على مضيف EC2. عند إعادة توجيه الوكيل ، يمكن لعميل SSH على EC2 استخدام المفاتيح الموجودة على الكمبيوتر المحلي للمصادقة على GitHub.

كيف يعمل وكيل الشحن


أولاً ، خلفية صغيرة. يمكن أن يكون لاتصالات SSH قنوات متعددة. فيما يلي مثال شائع: يتم إجراء اتصال تفاعلي لمضيف معقل (مربع الانتقال) على قناة واحدة. عندما يتم تمكين إعادة توجيه الوكيل للاتصال (يستخدم عادةً ssh -A) ، تفتح قناة ثانية في الخلفية لإعادة توجيه أي طلبات وكيل مرة أخرى إلى جهاز الكمبيوتر المحلي.

من حيث ssh، لا يوجد فرق بين المحلية والبعيدة ssh-agent. ينظر SSH دائمًا إلى متغير البيئة $SSH_AUTH_SOCKللعثور على مقبس مجال Unix للعامل. عند الاتصال بمضيف بعيد مع تمكين إعادة توجيه الوكيل ، سيقوم SSHD بإنشاء مأخذ مجال بعيد Unix مرتبط بقناة إعادة توجيه الوكيل وتصديره $SSH_AUTH_SOCKإلى ذلك.

صورة

ترتبط إعادة توجيه الوكيل بمخاطر معينة


عندما تعيد توجيه مقبس نطاق ssh-agentUnix إلى مضيف بعيد ، فإن هذا يشكل خطرًا على الأمان: يمكن لأي شخص لديه وصول جذري على المضيف البعيد الوصول إلى وكيل SSH المحلي الخاص بك من خلال المقبس. يمكنهم استخدام مفاتيحك لانتحال شخصيتك على أجهزة أخرى على الشبكة.

فيما يلي مثال لكيفية ظهور هذا:

صورة

كيفية تقليل المخاطر الخاصة بك مع وكيل الشحن


إليك بعض الطرق لجعل إعادة توجيه الوكيل أكثر أمانًا:

  • لا تقم بالتمكين ForwardAgentبشكل افتراضي.


حظر وكيل ssh الخاص بك عند استخدام إعادة توجيه الوكيل. ssh-add -xيحظر الوكيل بكلمة مرور ssh-add -Xويفتحه. عندما تكون متصلاً بمضيف بعيد عن طريق إعادة توجيه الوكيل ، لا يمكن لأحد إدخال وكيلك بدون كلمة مرور.

أو استخدم وكيل SSH البديل الذي يسألك عندما يكون قيد الاستخدام. يستخدم Sekey Touch ID على macOS لتخزين المفاتيح في جيب أمان MacBook Pro.

أو لا تستخدم وكيل الشحن على الإطلاق. إذا كنت تحاول الوصول إلى المضيفين الداخليين من خلال المعقل ، فهناك ProxyJumpبديل أكثر أمانًا لحالة الاستخدام هذه. (انظر أدناه)

الاستخدام ProxyJump: بديل أكثر أمانًا


عندما ترغب في المرور عبر مضيف باستون (Jumpbox) ، فأنت لا تحتاج حقًا إلى إعادة توجيه وكيل. أفضل طريقة هي استخدام التوجيه ProxyJump.

بدلاً من إعادة توجيه الوكيل من خلال قناة منفصلة ، فإنه ProxyJumpيعيد توجيه المدخلات والمخرجات المعيارية لعميل SSH المحلي الخاص بك من خلال الحصن وبعد ذلك إلى المضيف البعيد. وإليك كيف يعمل:

  1. اركض ssh -J bastion.example.com cloud.computer.internalللاتصال من cloud.computer.internalخلال مضيف معقلك bastion.example.com. cloud.computer.internalهو اسم المضيف الذي يمكن العثور عليه عن طريق البحث في DNS على bastion.example.com.
  2. يستخدم عميل SSH مفاتيح وكيلك للاتصال به bastion.example.com.
  3. بعد توصيل SSHD بالحصن ، فإنه يتصل cloud.computer.internalوينقل هذا الاتصال إلى عميل SSH المحلي.
  4. يمر عميل SSH المحلي بالاتصال مرة أخرى ، هذه المرة مع cloud.computer.internal

يمكنك التفكير في الأمر على أنه SSH في جلسة SSH ؛ إلا أن ssh لا يعمل على الحصن. بدلاً من ذلك ، فإنه sshdيتصل cloud.computer.internalبهذا الاتصال (المدخلات والمخرجات المعيارية) ويتيح التحكم فيه مرة أخرى إلى SSH المحلي ، والذي يقوم بعد ذلك بإجراء اتصال ثانٍ.

تكوين ProxyJump

دعنا نقول هذا المضيف bastion.example.com. يمكنني تكوين بلدي ~/.ssh/configمثل هذا:

Host bastion.example.com
	User carl

Host *.computer.internal
	ProxyJump bastion.example.com
	User carl

ثم أركض فقط ssh cloud.computer.internalللاتصال بالوجهة الداخلية عبر الحصن - دون إعادة توجيه الوكيل.

إذا لم يعمل ProxyJump ... لا تدعم

الإصدارات القديمة من SSH و SSHD (قبل الإصدار 7.2 ، الذي تم إصداره في عام 2016) ProxyJump. ولكن هل يمكن إجراء عملية تعادل باستخدام ProxyCommandو أداة netcat . هنا مثال:

ssh -o ProxyCommand="ssh bastion.example.com nc %h %p" cloud.computer.internal

يكمن السر هنا في أن SSH نفسه هو الخادم الوكيل الذي تستخدمه لـ SSH. يقوم الجزء nc %h %pببساطة بفتح اتصال مأخذ التوصيل الخام cloud.computer.internalعلى المنفذ 22. يتم تمرير الإدخال / الإخراج القياسي لأمر ssh الرئيسي مباشرةً ProxyCommandحتى يتمكن المصطلح ssh الأصل من المصادقة على المضيف الداخلي من خلال اتصال وكيل.



صورة
تعرف على تفاصيل كيفية الحصول على مهنة مرغوبة من الصفر أو المستوى الأعلى في المهارات والراتب من خلال الحصول على دورات SkillFactory عبر الإنترنت:



اقرأ أكثر



All Articles