استخدم OpenSSH لتوفير بيئة آمنة لتشغيل الأجهزة الطرفية البعيدة. الاستخدام الأساسي لـ OpenSSH والمحطة الطرفية بسيط للغاية، ولكن هذه المقالة ستغطي أيضًا العناصر الأخرى التي تسمح بتسجيل الدخول التلقائي إلى المضيفين البعيدين، وطرق تشغيل التطبيقات عن بعد، وكيفية نسخ الملفات بشكل آمن بين المضيفين.
حول هذه السلسلة
يمتلك مسؤول UNIX® النموذجي مجموعة من الأدوات المساعدة الأساسية والمعرفة والأنظمة التي يتم استخدامها بشكل متكرر للمساعدة في العملية الإدارية. توجد العديد من الأدوات المساعدة الرئيسية وسلاسل سطر الأوامر والبرامج النصية لتبسيط العمليات المختلفة. تأتي بعض هذه الأدوات من نظام التشغيل، لكن معظم المعرفة تأتي من الخبرة الطويلة الأمد والحاجة إلى تقليل الضغط على وظيفة مسؤول النظام. تركز هذه السلسلة من المقالات على الحصول على أقصى استفادة من الأدوات المتوفرة في بيئات UNIX المختلفة، بما في ذلك طرق تبسيط المهام الإدارية في البيئات غير المتجانسة.
لماذا نستخدم OpenSSH؟
تعمل خدمات الشبكة القياسية التي تستخدمها يوميًا، مثل FTP وTelnet وRCP وRemote Shell (rsh) وما إلى ذلك، بشكل جيد في بيئة مغلقة، ولكن المعلومات المنقولة عبر الشبكة باستخدام هذه الخدمات غير مشفرة. يمكن لأي شخص يستخدم أداة استشعار الحزم على شبكتك أو كمبيوتر بعيد عرض المعلومات المتبادلة وأحيانًا معلومات كلمة المرور.
علاوة على ذلك، مع كل هذه الخدمات، تكون خيارات أتمتة عملية تسجيل الدخول محدودة وتعتمد غالبًا على تضمين كلمة مرور نصية عادية في سطر الأوامر من أجل تنفيذ البيانات، مما يجعل عملية تسجيل الدخول أقل أمانًا.
تم تطوير بروتوكول Secure Shell (SSH) للتحايل على هذه القيود. يوفر SSH التشفير لقناة الاتصال بأكملها، بما في ذلك تبادل بيانات اعتماد تسجيل الدخول وكلمة المرور، ويعمل مع المفاتيح العامة والخاصة لتوفير المصادقة التلقائية لتسجيلات الدخول. يمكنك أيضًا استخدام SSH كبروتوكول النقل الأساسي. إن استخدام SSH بهذه الطريقة يعني أنه بعد فتح اتصال آمن، يمكن تبادل جميع أنواع المعلومات عبر القناة المشفرة، وحتى HTTP وSMTP يمكنهما استخدام هذه الطريقة لتأمين آلية الاتصال.
OpenSSH هو تطبيق مجاني لبروتوكولي SSH 1 وSSH 2. تم تطويره في الأصل كجزء من نظام التشغيل OpenBSD (Berkeley Software Distribution) ويتم إصداره الآن كحل عام لنظام التشغيل UNIX أو Linux® وأنظمة التشغيل المشابهة.
قم بتثبيت OpenSSH
OpenSSH هو برنامج مجاني ويمكن تنزيله من موقع OpenSSH الرئيسي (انظر الموارد). يمكن إنشاء أنظمة OpenSSH من التعليمات البرمجية المصدرية على مجموعة متنوعة من الأنظمة، بما في ذلك Linux وHP-UX وAIX® وSolaris وMac OS X والمزيد. من الممكن عادةً العثور على ثنائيات مجمعة مسبقًا للنظام الأساسي والإصدار الذي اخترته. حتى أن بعض البائعين يقدمون مجموعات أدوات OpenSSH كجزء من نظام التشغيل.
لبناء OpenSSH تحتاج إلى ما يلي:
إذا كنت بحاجة إلى استخدام إعدادات التكوين الافتراضية، فاستخدم تسلسل البناء العادي، كما هو موضح في القائمة 1 أدناه.
$ ./تكوين $ جعل $ قم بالتثبيت |
يؤدي هذا إلى تثبيت الثنائيات والمكتبات وملفات التكوين في الدليل /usr/local، على سبيل المثال، الثنائيات إلى /usr/local/bin وملفات التكوين إلى /usr/local/etc. إذا كنت تريد دمج أدوات متنوعة في البيئة الرئيسية، فقد تحتاج إلى تحديد خيار --prefix لتعيين الدليل الأساسي وخيار --sysconfdir لتعيين موقع ملف التكوين:
$ ./configure --prefix=/usr --sysconfidir=/etc/ssh |
تتضمن بعض الخيارات العامة الأخرى التي قد تحددها ما يلي:
بعد الانتهاء من التكوين، استخدم make للبناء بالطريقة العادية.
بعد اكتمال عملية الإنشاء والتثبيت، تحتاج إلى تكوين النظام عن طريق إنشاء مفتاح SSH أولاً الذي يعرّف النظام بشكل فريد، ثم تمكين الاتصال الآمن بين العميل والمضيف. يمكنك تشغيل:
$ اصنع مفتاح المضيف |
وبدلاً من ذلك، يمكنك تنفيذ الخطوات الفردية يدويًا في سطر الأوامر. تحتاج إلى إنشاء ثلاثة مفاتيح (واحد لكل من خوارزميات التشفير الرئيسية: rsa1، وrsa، وdsa). على سبيل المثال، توضح القائمة 2 كيفية إنشاء مفتاح rsa1.
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key إنشاء زوج مفاتيح rsa1 عام/خاص. أدخل عبارة المرور (فارغة لعدم وجود عبارة مرور): أدخل نفس عبارة المرور مرة أخرى: تم حفظ هويتك في /etc/ssh//ssh_host_key. تم حفظ مفتاحك العام في /etc/ssh//ssh_host_key.pub. البصمة الرئيسية هي: 43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 root@remotehost |
تتم مطالبتك بكلمة المرور الخاصة بك. بالنسبة لمفتاح المضيف، ربما لا تحتاج إلى كلمة مرور المفتاح، لذا يمكنك الضغط على "رجوع" لاستخدام كلمة مرور فارغة. وبدلاً من ذلك، يمكنك استخدام الخيار -N في سطر الأوامر لتسريع العملية (انظر القائمة 3).
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N "" إنشاء زوج مفاتيح rsa1 عام/خاص. تم حفظ هويتك في /etc/ssh/ssh_host_key. تم حفظ مفتاحك العام في /etc/ssh/ssh_host_key.pub. البصمة الرئيسية هي: a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 root@remotehost |
كرر الآن العملية لإنشاء مفتاحي rsa وdsa (انظر القائمة 4).
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" $ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N "" |
سيؤدي هذا إلى إنشاء ملفين لكل نوع مفتاح: المفتاح العام (في ملف ينتهي بـ .pub) والمفتاح الخاص. يجب عليك التأكد من أن المفتاح الخاص لا يُقرأ إلا من خلال عمليات الجذر وعمليات SSH - ويجب تكوين ذلك تلقائيًا. قد ترغب في نسخ المفتاح العام إلى موقع مركزي على مشاركة نظام ملفات الشبكة (NFS) حتى يتمكن الأشخاص من إضافته إلى قائمة مفاتيح المضيف المعروفة.
وأخيرًا، تحتاج إلى بدء عملية sshd وتكوينها للتنفيذ عند بدء التشغيل. بالنسبة لمضيفي Linux، يمكنك العثور على البرنامج النصي init المناسب في contrib/redhat/sshd.init والذي يمكن إضافته إلى /etc/init.d.
استخدام SSH للوصول إلى المحطة الأساسية
يتمثل الدور الأساسي لـ OpenSSH في كونه أداة SSH، وبديلاً آمنًا لبروتوكول Telnet لتسجيل الدخول الآمن عن بعد إلى مضيفي UNIX أو Linux.
للاتصال بمضيف بعيد باستخدام الصدفة القياسية، ما عليك سوى كتابة اسم المضيف:
مضيف بعيد $ssh |
افتراضيًا، يحاول النظام استخدام اسم المستخدم الحالي كاسم لتسجيل الدخول. لاستخدام اسم تسجيل دخول مختلف، ضع اسم تسجيل الدخول قبل اسم المضيف، مفصولاً بالرمز @. على سبيل المثال:
$ssh mc@remotehost |
تتم مطالبتك بكلمة مرور المستخدم الخاصة بك - وهذا مشابه لـ Telnet.
في المرة الأولى التي تتصل فيها بمضيف، سيتم سؤالك عما إذا كنت تريد حفظ نسخة من المفتاح العام للمضيف البعيد في ملف "المضيفين المعروفين" (انظر القائمة 5).
$ssh root@remotehost لا يمكن التحقق من صحة المضيف "remotehost (10.211.55.3)". بصمة مفتاح RSA هي cc:c8:8b:75:3d:b6:00:2f:a9:9c:53:4c:03:0f:3d:1b. هل أنت متأكد من رغبتك في مواصلة الاتصال (نعم/لا)؟ تحذير: تمت إضافة "المضيف البعيد" (RSA) بشكل دائم إلى قائمة المضيفين المعروفين. |
في المستقبل، لن تتلقى هذا التحذير، ولكن سيتم إصدار التحذير عندما يكتشف النظام أن المفتاح العام الذي أعاده المضيف البعيد لا يتطابق مع المفتاح العام في ملف المضيف، مما يشير إلى هجوم قرصنة محتمل. قد يعني ذلك أيضًا أن المسؤول قام بإعادة إنشاء مفتاح المضيف فقط.
في الأساس، لا يوجد فرق بين جلسات SSH وTelnet، باستثناء أن جلسات SSH مشفرة، مما يجعل من المستحيل تقريبًا لأي شخص أن يتطفل على جلستك أو يعرف كلمة المرور الخاصة بك أو الأوامر والعمليات التي تنفذها.
يمكنك أيضًا استخدام SSH لتشغيل الأوامر مباشرة على المضيف البعيد دون استخدام shell. على سبيل المثال، لتشغيل أمر who على المضيف البعيد، راجع القائمة 6.
القائمة 6. تشغيل أمر who على المضيف البعيد$ ssh mc@remotehost من وحدة تحكم المشرف 23 نوفمبر 14:04 mc ttyp1 2 ديسمبر 10:53 (sulaco.mcslp.pri) mc ttyp2 10 ديسمبر 06:50 (sulaco.mcslp.pri) المشرف ttyp3 12 ديسمبر 13:33 mc ttyp4 15 ديسمبر 12:38 (nautilus.mcslp.p) |
يحاكي التنفيذ عن بعد أيضًا الإدخال والإخراج والخطأ القياسي لمضيف العميل. هذا يعني أنه يمكنك إعادة توجيه الإخراج إلى أمر بعيد. على سبيل المثال، يمكنك إلحاق المعلومات مباشرة بملف بعيد عن طريق توصيل مخرجات الأمر إلى SSH على المضيف البعيد (انظر القائمة 7).
القائمة 7. إلحاق المعلومات مباشرة بملف بعيد$ echo "Hello World" |ssh mc@remotehost 'cat >> helloworlds.txt' |
يمكنك استخدام هذه الطريقة لزيادة إنتاجيتك عند استخدام SSH لتبسيط عملية تسجيل الدخول.
تبادل الملفات باستخدام SFTP
يعد الأمر sft بديلاً لـ FTP الذي يستخدم قناة الاتصال الآمنة التي يوفرها بروتوكول SSH.
لفتح اتصال SFTP، حدد اسم المضيف في سطر الأوامر:
المضيف البعيد $ sftp |
ضع في اعتبارك أن الأمر أعلاه يفترض أنك ترغب في استخدام نفس طريقة تسجيل الدخول مثل مضيفك الحالي. لاستخدام طريقة تسجيل دخول مختلفة، ألحق اسم المضيف باسم المستخدم:
$ sftp mc@remotehost |
على الرغم من أن SFTP يعمل بشكل مشابه لـ FTP، إلا أن هناك بعض القيود والاختلافات. على سبيل المثال، يوفر dir في FTP قائمة ملفات طويلة (انظر القائمة 8).
بروتوكول نقل الملفات> دير 502 "EPSV": الأمر غير مفهوم. 227 الدخول في الوضع السلبي (192,168,0,110,150,159) 150 فتح اتصال بيانات وضع ASCII لقائمة الدليل. المجموع 1472 drwx------ 3 mc Staff 102 4 نوفمبر 11:17 سطح المكتب drwx------ 3 mc Staff 102 4 نوفمبر 11:17 المستندات drwx------ 18 mc Staff 612 5 نوفمبر 18:01 المكتبة drwx------ 3 mc Staff 102 4 نوفمبر 11:17 أفلام drwx------ 3 mc Staff 102 4 نوفمبر 11:17 الموسيقى drwx------ 4 mc Staff 136 4 نوفمبر 11:17 صور drwxr-xr-x 4 mc طاقم العمل 136 4 نوفمبر 11:17 عام drwxr-xr-x 6 فريق العمل 204 نوفمبر 4 11:17 المواقع drwxrwxrwx 3 طاقم العمل الجذري 102 24 ديسمبر 07:30 tmp drwxr-xr-x 7 الموظفين الجذر 238 11 ديسمبر 08:39 المحاكمة 226 اكتمل النقل. |
في SFTP، يعمل dir كاسم مستعار لأمر قائمة دليل المضيف، وهو ls في UNIX أو Linux. بشكل افتراضي، يوفر dir قائمة قصيرة فقط (انظر القائمة 9).
sftp> دير سطح المكتب مكتبة المستندات الأفلام الموسيقى الصور العامة مواقع tmp التجريبية |
للحصول على قائمة طويلة، استخدم نفس الخيارات مثل ls (انظر القائمة 10).
sftp> دير -l drwx------ 3 mc Staff 102 4 نوفمبر 11:17 سطح المكتب drwx------ 3 mc Staff 102 4 نوفمبر 11:17 المستندات drwx------ 18 mc Staff 612 5 نوفمبر 18:01 المكتبة drwx------ 3 mc Staff 102 4 نوفمبر 11:17 أفلام drwx------ 3 mc Staff 102 4 نوفمبر 11:17 الموسيقى drwx------ 4 mc Staff 136 4 نوفمبر 11:17 صور drwxr-xr-x 4 mc طاقم العمل 136 4 نوفمبر 11:17 عام drwxr-xr-x 6 فريق العمل 204 نوفمبر 4 11:17 المواقع drwxrwxrwx 3 طاقم العمل الجذري 102 24 ديسمبر 07:30 tmp drwxr-xr-x 7 فريق الجذر 238 11 ديسمبر 08:39 المحاكمة |
تظل الأوامر الأخرى مثل تغيير الدلائل (cd وlcd محليًا) وإنشاء الدلائل (mkdir) وإرسال (وضع) واستقبال (get) الملفات دون تغيير. الأمران الأخيران، put و get، كلاهما يقبلان أحرف البدل (على غرار mput وmget في FTP)، ولكن كن حذرًا عند نقل ملفات متعددة بدون أحرف البدل في SFTP. على سبيل المثال، يتم التعرف على sftp> mget file1 file2 file3 على أنه يحاول الحصول على file1 وfile2 ووضعهما في الدليل المحلي file3، ولكن قد لا يكون هذا الدليل موجودًا.
انسخ الملفات بين المضيفين باستخدام scp
يعمل الأمر scp بشكل مشابه للأمر rc، باستثناء أنه يستخدم بروتوكول SSH لنقل الملفات. عند نقل الملفات المتعلقة بالمحتوى أو تبادل الملفات تلقائيًا على الإنترنت، يكون scp أفضل بكثير.
تنسيقه مشابه لـ rcp؛ حيث تحدد مسار الملف الذي سيتم النسخ بينه، ويجب دمج اسم المضيف فيه إذا لزم الأمر. على سبيل المثال، لنسخ ملف .bashrc من مضيف بعيد إلى جهازك المحلي، استخدم:
$ scp Remotehost:/users/mc/.bashrc ~/.bashrc |
كما كان من قبل، لتحديد اسم مستخدم لاستخدامه، ضع اسم المستخدم قبل المضيف، مفصولاً بالرمز @:
$ scp mc@remotehost:/users/mc/.bashrc ~/.bashrc |
بافتراض أن المستخدم الذي تتصل به لديه أذونات القراءة، فستحتاج أيضًا إلى استخدام الحرف التعريفي ~ للوصول إلى المعلومات الموجودة في الدليل الرئيسي الخاص بك.
$ scp mc@remotehost:~mc/.bashrc ~/.bashrc |
للنسخ من الدليل الرئيسي للمستخدم الذي قام بتسجيل الدخول، استخدم:
$ scp mc@remotehost:.bashrc ~/.bashrc |
يدعم الأمر scp أيضًا قواعد التوسعة القياسية. لذلك، لنسخ كافة ملفات .bash*، يمكنك استخدام:
$ scp mc@remotehost:.bash* ~ |
يمكنك أيضًا تحديد الملفات الفردية بشكل أكثر تحديدًا باستخدام الأقواس الموسعة ({}):
$ scp mc@remotehost:".bash{rc,_path,_aliases,_vars}" ~ |
لاحظ أن الأقواس الموسعة في مسار الملف (وليس تعبير المسار البعيد الكامل) محاطة بعلامات اقتباس مزدوجة.
في جميع الأمثلة المذكورة أعلاه، ستتم مطالبتك بكلمة مرور المضيف البعيد. يمكن تجنب ذلك من خلال تزويد المضيف بالجزء العام من مفتاحك الشخصي.
تمكين تسجيل الدخول التلقائي باستخدام المفتاح العام
عند تسجيل الدخول إلى نظام بعيد باستخدام ssh أو sftp أو scp، فإنك لا تزال بحاجة إلى كلمة مرور لإكمال عملية تسجيل الدخول. من خلال إنشاء مفتاح عام أو خاص، وإلحاق الجزء العام من المفتاح بملف ~/.ssh/authorized_keys، وتبادل مفتاح صالح مع الموقع البعيد، يمكنك إلغاء متطلبات توفير كلمة مرور والسماح بتسجيل الدخول التلقائي.
لإنشاء مفتاح عام أو خاص، تحتاج إلى استخدام ssh-keygen لتحديد نوع تشفير المفتاح. يتم استخدام نوع المفتاح rsa في العرض التوضيحي، لكن أنواع المفاتيح الأخرى صالحة أيضًا. لإنشاء المفتاح، راجع القائمة 11.
$ssh-keygen-trsa إنشاء زوج مفاتيح RSA عام/خاص. أدخل الملف الذي تريد حفظ المفتاح فيه (/root/.ssh/id_rsa): |
يجب عليك إدخال موقع الملف الذي يحتوي على المفاتيح (المكونات العامة والخاصة). عادةً ما يكون استخدام الإعداد الافتراضي (في دليل .ssh في دليلك الرئيسي) أمرًا جيدًا (انظر القائمة 12).
تم إنشاء الدليل "/root/.ssh". أدخل عبارة المرور (فارغة لعدم وجود عبارة مرور): |
إذا قمت بإدخال كلمة مرور في هذه المرحلة، فسيتم إنشاء ملف مفتاح الأمان، ولكن يجب عليك أيضًا إدخال كلمة المرور في كل مرة تستخدم فيها المفتاح. الضغط على "رجوع" يعني عدم الحاجة إلى كلمة مرور (انظر القائمة 13).
القائمة 13. تخطي متطلبات كلمة المرور بالضغط على زر الرجوعأدخل نفس عبارة المرور مرة أخرى: تم حفظ هويتك في /root/.ssh/id_rsa. لقد تم حفظ مفتاحك العام في /root/.ssh/id_rsa.pub. البصمة الرئيسية هي: 98:da:8d:48:a8:09:44:b1:b3:62:51:2d:a9:6b:61:ba root@remotehost |
تم الآن إنشاء المفتاح العام (id_rsa.pub) والمفتاح الخاص المقابل (id_rsa).
لتمكين تسجيل الدخول التلقائي، يجب عليك نسخ محتويات المفتاح العام إلى ملف Author_keys في الدليل ~/.ssh على المضيف البعيد. يمكنك أتمتة هذا باستخدام SSH (انظر القائمة 14).
$ cat ./.ssh/id_rsa.pub |. ssh mc@remotehost 'cat >> .ssh/authorized_keys'; |
وأيضًا، إذا كنت تفعل ذلك بشكل متكرر عبر مضيفين متعددين، فيمكنك استخدام برنامج نصي صغير أو وظيفة Shell لتنفيذ جميع الخطوات الضرورية، كما هو موضح في القائمة 15.
OLDDIR='pwd'; إذا [ -z "$1" ]؛ صدى بحاجة إلى معلومات المستخدم @ المضيف؛ مخرج؛ فاي؛ قرص مضغوط $HOME; إذا [ -e "./.ssh/id_rsa.pub" ]؛ cat ./.ssh/id_rsa.pub |.ssh $1 'cat >> .ssh/authorized_keys'; آخر سش-كجن -trsa; cat ./.ssh/id_rsa.pub |.ssh $1 'cat >> .ssh/authorized_keys'; فاي؛ قرص مضغوط $OLDDIR |
يمكنك استخدام البرنامج النصي setremotekey لنسخ مفتاح موجود، أو إذا كان المفتاح غير موجود، فقم بإنشاء واحد قبل النسخ:
$ setremotekey mc@remotehost |
الآن، عندما تحتاج إلى تسجيل الدخول إلى مضيف بعيد باستخدام مفتاح عام، يمكنك استخدام برنامج نصي للمفتاح الشخصي مع قائمة المفاتيح التي يقبلها هذا المستخدم على المضيف البعيد.
تلخيص
يعد OpenSSH أداة مهمة لتأمين الاتصالات ونقل المعلومات بين أجهزة الكمبيوتر. إنه ليس بديلاً آمنًا للأدوات التقليدية مثل Telnet وFTP وRCP فحسب، بل يمكنه أيضًا العمل كبروتوكول نقل لخدمات أخرى مثل Subversion وX Windows System وrsync. توضح لك هذه المقالة الخطوات الأساسية المطلوبة لتشغيل OpenSSH، وكيفية الاستخدام الأمثل للأدوات الرئيسية التي يوفرها OpenSSH، وكيفية استخدام أدوات تبادل المفاتيح لتبسيط مشكلات تسجيل الدخول والاتصال.