المقدمة
وكيل 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 Keychainssh-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-agent
Unix إلى مضيف بعيد ، فإن هذا يشكل خطرًا على الأمان: يمكن لأي شخص لديه وصول جذري على المضيف البعيد الوصول إلى وكيل SSH المحلي الخاص بك من خلال المقبس. يمكنهم استخدام مفاتيحك لانتحال شخصيتك على أجهزة أخرى على الشبكة.فيما يلي مثال لكيفية ظهور هذا:
كيفية تقليل المخاطر الخاصة بك مع وكيل الشحن
إليك بعض الطرق لجعل إعادة توجيه الوكيل أكثر أمانًا:- لا تقم بالتمكين
ForwardAgent
بشكل افتراضي.
حظر وكيل ssh الخاص بك عند استخدام إعادة توجيه الوكيل. ssh-add -x
يحظر الوكيل بكلمة مرور ssh-add -X
ويفتحه. عندما تكون متصلاً بمضيف بعيد عن طريق إعادة توجيه الوكيل ، لا يمكن لأحد إدخال وكيلك بدون كلمة مرور.أو استخدم وكيل SSH البديل الذي يسألك عندما يكون قيد الاستخدام. يستخدم Sekey Touch ID على macOS لتخزين المفاتيح في جيب أمان MacBook Pro.أو لا تستخدم وكيل الشحن على الإطلاق. إذا كنت تحاول الوصول إلى المضيفين الداخليين من خلال المعقل ، فهناك ProxyJump
بديل أكثر أمانًا لحالة الاستخدام هذه. (انظر أدناه)الاستخدام ProxyJump
: بديل أكثر أمانًا
عندما ترغب في المرور عبر مضيف باستون (Jumpbox) ، فأنت لا تحتاج حقًا إلى إعادة توجيه وكيل. أفضل طريقة هي استخدام التوجيه ProxyJump
.بدلاً من إعادة توجيه الوكيل من خلال قناة منفصلة ، فإنه ProxyJump
يعيد توجيه المدخلات والمخرجات المعيارية لعميل SSH المحلي الخاص بك من خلال الحصن وبعد ذلك إلى المضيف البعيد. وإليك كيف يعمل:- اركض
ssh -J bastion.example.com cloud.computer.internal
للاتصال من cloud.computer.internal
خلال مضيف معقلك bastion.example.com
. cloud.computer.internal
هو اسم المضيف الذي يمكن العثور عليه عن طريق البحث في DNS على bastion.example.com
. - يستخدم عميل SSH مفاتيح وكيلك للاتصال به
bastion.example.com
. - بعد توصيل SSHD بالحصن ، فإنه يتصل
cloud.computer.internal
وينقل هذا الاتصال إلى عميل SSH المحلي. - يمر عميل 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 عبر الإنترنت:اقرأ أكثر