الخطوات التفصيلية: إنشاء مفاتيح SSH وإدارتها للمصادقة على جهاز Linux الظاهري في Azure

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات مقياس مرنة

باستخدام زوج مفاتيح shell (SSH) الآمن، يمكنك إنشاء جهاز ظاهري Linux يستخدم مفاتيح SSH للمصادقة. توضح لك هذه المقالة كيفية إنشاء واستخدام زوج ملفات مفاتيح SSH RSA العام والخاص لاتصالات عميل SSH.

إذا كنت تريد أوامر سريعة بدلاً من شرح أكثر تعمقًا لمفاتيح SSH، فراجع كيفية إنشاء مفاتيح مزدوجة SSH عامة-خاصة لأجهزة Linux الظاهرية في Azure.

لإنشاء مفاتيح SSH واستخدامها للاتصال بجهاز Linux الظاهري من جهاز كمبيوتر يعمل بنظام التشغيل Windows، راجع كيفية استخدام مفاتيح SSH مع Windows على Azure. يمكنك أيضاً استخدام مدخل Azure لإنشاء مفاتيح SSH وإدارتها لإنشاء أجهزة ظاهرية في المدخل.

نظرة عامة على SSH والمفاتيح

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

  • يتم وضع المفتاح العام على الجهاز الظاهري الخاص بك.

  • يظل المفتاح الخاص على نظامك المحلي. عليك حماية هذا المفتاح الخاص. لا تشاركه.

عندما تستخدم عميل SSH للاتصال بجهاز VM الخاص بك (الذي يحتوي على المفتاح العام)، يقوم الجهاز الظاهري البعيد باختبار العميل للتأكد من أنه يحتوي على المفتاح الخاص الصحيح. إذا كان العميل لديه المفتاح الخاص، فإنه يتم منح حق الوصول إلى الجهاز الظاهري.

استنادا إلى نهج الأمان الخاصة بالمؤسسة، يمكنك إعادة استخدام زوج مفاتيح واحد من القطاعين العام والخاص للوصول إلى العديد من خدمات أجهزة Azure الظاهرية وخدماتها. لا تحتاج إلى زوج منفصل من المفاتيح لكل جهاز ظاهري أو خدمة ترغب في الوصول إليها.

يمكن مشاركة مفتاحك العام مع أي شخص، ولكن يجب أن يتوفر لديك (أو لدى البنية الأساسية الأمنية المحلية التي تعمل لديها) حق الوصول إلى مفتاحك الخاص.

تنسيقات مفاتيح SSH المدعومة

يدعم Azure حالياً بروتوكول SSH للمفاتيح المزدوجة العامة-الخاصة 2 (SSH-2) RSA بطول لا يقل عن 2048 بت. التنسيقات الرئيسية الأخرى مثل ED25519 و ECDSA غير مدعومة.

استخدام مفاتيح SSH ومزاياها

عند إنشاء الجهاز الظاهري Azure عن طريق تحديد المفتاح العام، يقوم Azure بنسخ المفتاح العام (بتنسيق .pub) إلى المجلد ~/.ssh/authorized_keys على الجهاز الظاهري. تضمن مفاتيح SSH في ~/.ssh/authorized_keys أن العملاء المتصلين يقدمون المفتاح الخاص المقابل أثناء اتصال SSH. في الجهاز الظاهري Azure Linux الذي يستخدم مفاتيح SSH للمصادقة، يعطل Azure نظام مصادقة كلمة مرور خادم SSH ويسمح فقط بمصادقة مفتاح SSH. من خلال إنشاء Azure Linux VM باستخدام مفاتيح SSH، يمكنك المساعدة في تأمين نشر الجهاز الظاهري وتوفير خطوة تكوين ما بعد النشر النموذجية لتعطيل كلمات المرور في ملف sshd_config.

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

إنشاء مفاتيح باستخدام ssh-keygen

لإنشاء المفاتيح، الأمر المفضل هو ssh-keygen، والذي يتوفر مع أدوات OpenSSH المساعدة في Azure Cloud Shell، ومضيف macOS أو Linux، وWindows (10 و11). يطرح ssh-keygen سلسلة من الأسئلة ثم يكتب مفتاحا خاصاً وآخر عاماً مطابقاً.

يتم الاحتفاظ بمفاتيح SSH افتراضياً في الدليل ~/.ssh. إذا لم يكن لديك دليل ~/.ssh، يقوم الأمر ssh-keygen بإنشائه لك باستخدام الأذونات الصحيحة. يتم إنشاء مفتاح SSH كمورد وتخزينه في Azure لاستخدامه لاحقاً.

إشعار

يمكنك أيضاً إنشاء مفاتيح من خلال Azure CLI باستخدام الأمر az sshkey create، كما هو موضح في إنشاء مفاتيح SSH وتخزينها.

مثال أساسي

ينشئ الأمر ssh-keygen التالي ملفات مفاتيح SSH RSA العامة والخاصة وهي 4096 بت بشكلٍ افتراضي في الدليل ~/.ssh. في حالة وجود مفاتيح مزدوجة SSH في الموقع الحالي، يتم الكتابة فوق هذه الملفات.

ssh-keygen -m PEM -t rsa -b 4096

مثال مفصل

يوضح المثال التالي خيارات أوامر إضافية لإنشاء زوج مفاتيح SSH RSA. في حالة وجود زوج مفاتيح SSH في الموقع الحالي، يتم استبدال هذه الملفات.

ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myprivatekey \
    -N mypassphrase

شرح الأمر

ssh-keygen = البرنامج المستخدم لإنشاء المفاتيح

-m PEM = تنسيق المفتاح كـ PEM

-t rsa = نوع المفتاح المطلوب إنشاؤه، في هذه الحالة بتنسيق RSA

-b 4096 = عدد البتات في المفتاح، في هذه الحالة 4096

-C "azureuser@myserver" = تعليق ملحق بنهاية ملف المفتاح العام للتعرف عليه بسهولة. عادةً ما يتم استخدام عنوان البريد الإلكتروني كتعليق، ولكن استخدم ما يناسب بنيتك الأساسية بشكلٍ أفضل.

-f ~/.ssh/mykeys/myprivatekey = اسم ملف المفتاح الخاص، إذا اخترت عدم استخدام الاسم الافتراضي. يتم إنشاء ملف المفتاح العمومي المقابل الملحق بـ .pub في نفس الدليل. يجب أن يكون الدليل موجوداً.

-N mypassphrase = عبارة مرور إضافية تستخدم للوصول إلى ملف المفتاح الخاص.

مثال على ssh-keygen

ssh-keygen -t rsa -m PEM -b 4096 -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_rsa.
Your public key has been saved in /home/azureuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[RSA 4096]----+
|        .oE=*B*+ |
|          o+o.*++|
|           .oo++*|
|       .    .B+.O|
|        S   o=BO.|
|         . .o++o |
|        . ... .  |
|         ..  .   |
|           ..    |
+----[SHA256]-----+

الملفات الرئيسية المحفوظة

Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa

اسم زوج المفاتيح لهذه المقالة. يعد وجود زوج مفاتيح يسمى id_rsa هو الخيار الافتراضي؛ قد تتوقع بعض الأدوات اسم ملف المفتاح الخاص id_rsa، لذا فإن امتلاك زوج واحد يعد فكرة جيدة. الدليل ~/.ssh/ هو الموقع الافتراضي لأزواج مفاتيح SSH وملف تكوين SSH. إذا لم يتم تحديده بمسار كامل، فإن ssh-keygen ينشئ المفاتيح في دليل العمل الحالي، وليس في ~/.ssh الافتراضي.

قائمة دليل ~/.ssh

لعرض الملفات الموجودة في الدليل ~/.ssh، قم بتشغيل الأمر التالي. إذا لم يتم العثور على أي ملفات في الدليل أو كان الدليل نفسه مفقودًا، فتأكد من تشغيل كافة الأوامر السابقة بنجاح. قد تحتاج إلى الوصول الجذر لتعديل الملفات في هذا الدليل على توزيعات Linux معينة.

ls -al ~/.ssh
-rw------- 1 azureuser staff  1675 Aug 25 18:04 id_rsa
-rw-r--r-- 1 azureuser staff   410 Aug 25 18:04 id_rsa.pub

عبارة المرور الرئيسية

Enter passphrase (empty for no passphrase):

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

توليد المفاتيح تلقائياً أثناء النشر

إذا كنت تستخدم Azure CLI لإنشاء جهازك الظاهري، فيمكنك اختياريًا إنشاء ملفات مفاتيح SSH العامة والخاصة عن طريق تشغيل الأمر az vm create باستخدام الخيار --generate-ssh-keys. يتم تخزين المفاتيح في الدليل ~/.ssh. لاحظ أن خيار الأمر هذا لا يقوم بالكتابة فوق المفاتيح إذا كانت موجودة بالفعل في هذا الموقع، مثل بعض صور Compute Gallery المكونة مسبقًا.

قم بتوفير مفتاح SSH العمومي عند نشر جهاز ظاهري

لإنشاء جهاز Linux ظاهري يستخدم مفاتيح SSH للمصادقة، قم بتوفير مفتاح SSH العام الخاص بك عند إنشاء الجهاز الظاهري باستخدام مدخل Azure أو CLI أو قوالب إدارة الموارد أو طرق أخرى. عند استخدام المدخل، يمكنك إدخال المفتاح العمومي نفسه. إذا كنت تستخدم Azure CLI لإنشاء جهازك الظاهري باستخدام مفتاح عام موجود، فحدد قيمة أو موقع هذا المفتاح العام عن طريق تشغيل الأمر az vm create باستخدام الخيار --ssh-key-value .

إذا لم تكن معتاداً على تنسيق مفتاح SSH العمومي، يمكنك رؤية مفتاحك العمومي عن طريق تشغيل cat على النحو التالي، مع استبدال ~/.ssh/id_rsa.pub بموقع ملف المفتاح العمومي الخاص بك:

cat ~/.ssh/id_rsa.pub

الإخراج مشابه للمثال التالي (مثال منقح أدناه):

ssh-rsa XXXXXXXXXXc2EAAAADAXABAAABAXC5Am7+fGZ+5zXBGgXS6GUvmsXCLGc7tX7/rViXk3+eShZzaXnt75gUmT1I2f75zFn2hlAIDGKWf4g12KWcZxy81TniUOTjUsVlwPymXUXxESL/UfJKfbdstBhTOdy5EG9rYWA0K43SJmwPhH28BpoLfXXXXXG+/ilsXXXXXKgRLiJ2W19MzXHp8z3Lxw7r9wx3HaVlP4XiFv9U4hGcp8RMI1MP1nNesFlOBpG4pV2bJRBTXNXeY4l6F8WZ3C4kuf8XxOo08mXaTpvZ3T1841altmNTZCcPkXuMrBjYSJbA8npoXAXNwiivyoe3X2KMXXXXXdXXXXXXXXXXCXXXXX/ azureuser@myserver

إذا قمت بنسخ محتويات ملف المفتاح العمومي ولصقها في مدخل Azure أو قالب إدارة الموارد، فتأكد من عدم نسخ أي مسافة إضافية أو إدخال فواصل أسطر إضافية. على سبيل المثال، إذا كنت تستخدم macOS، فيمكنك تمرير ملف المفتاح العمومي (افتراضياً، ~/.ssh/id_rsa.pub) إلى pbcopy لنسخ المحتويات (هناك برامج Linux أخرى تفعل الشيء نفسه، مثل xclip).

إذا كنت تفضل استخدام مفتاح عام بتنسيق متعدد الأسطر، فيمكنك إنشاء مفتاح بتنسيق RFC4716 في حاوية 'pem' من المفتاح عام الذي قمت بإنشائه مسبقًا.

لإنشاء مفتاح بتنسيق RFC4716 من مفتاح SSH عمومي موجود:

ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem

SSH إلى الجهاز الظاهري الخاص بك باستخدام عميل SSH

بالإضافة إلى توزيع المفتاح العام على جهازك الظاهري من Azure، والمفتاح الخاص على نظامك المحلي، أضف SSH إلى جهازك الظاهري باستخدام عنوان IP أو اسم DNS الخاص بجهازك الظاهري. استبدل azureuser وmyvm.westus.cloudapp.azure.com في الأمر التالي باسم مستخدم المسؤول واسم المجال المؤهل بالكامل (أو عنوان IP):

ssh azureuser@myvm.westus.cloudapp.azure.com

إذا قدمت عبارة مرور عند إنشاء زوج المفاتيح، فأدخل عبارة المرور عندما يُطلب منك ذلك أثناء عملية تسجيل الدخول. (تمت إضافة الخادم إلى مجلد ~/.ssh/known_hosts الخاص بك، ولن تتم مطالبتك بالاتصال مرة أخرى حتى يتغير المفتاح العمومي على جهاز Azure الظاهري أو تتم إزالة اسم الخادم من ~/.ssh/known_hosts.)

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

استخدم ssh-agent لتخزين عبارة مرور المفتاح الخاص بك

لتجنب كتابة عبارة مرور ملف المفتاح الخاص مع كل تسجيل دخول عبر SSH، يمكنك استخدام ssh-agent لتخزين عبارة مرور ملف المفتاح الخاص مؤقتًا إلى نظامك المحلي. إذا كنت تستخدم جهاز Mac، فإن سلسلة مفاتيح macOS تخزن عبارة مرور المفتاح الخاص بشكلٍ آمن عند استدعاء ssh-agent.

تحقق من استخدام ssh-agent وssh-add لإبلاغ نظام SSH بملفات المفاتيح حتى لا تحتاج إلى استخدام عبارة المرور بشكلٍ تفاعلي.

eval "$(ssh-agent -s)"

أضف الآن المفتاح الخاص إلى ssh-agent باستخدام الأمر ssh-add.

ssh-add ~/.ssh/id_rsa

تم تخزين عبارة مرور المفتاح الخاص الآن في ssh-agent.

استخدم ssh-copy-id لنسخ المفتاح إلى جهاز ظاهري موجود

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

ssh-copy-id -i ~/.ssh/id_rsa.pub azureuser@myserver

إنشاء ملف تكوين SSH وتكوينه

يمكنك إنشاء ملف تكوين SSH وتكوينه (~/.ssh/config) لتسريع عمليات تسجيل الدخول وتحسين سلوك عميل SSH.

يوضح المثال التالي تكويناً بسيطاً يمكنك استخدامه لتسجيل الدخول بسرعة كمستخدم إلى جهاز ظاهري معين باستخدام المفتاح الخاص SSH الافتراضي.

إنشاء الملف.

touch ~/.ssh/config

تحرير الملف لإضافة تكوين SSH الجديد

vim ~/.ssh/config

أضف إعدادات التكوين المناسبة للجهاز الظاهري المضيف. في هذا المثال، اسم الجهاز الظاهري (المضيف) هو myvm، واسم الحساب (المستخدم) هو azureuser وعنوان IP أو FQDN (اسم المضيف) هو 192.168.0.255.

# Azure Keys
Host myvm
  Hostname 192.168.0.255
  User azureuser
# ./Azure Keys

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

الآن بعد أن أصبح لديك مفاتيح مزدوجة SSH وملف تكوين SSH تم تكوينه، يمكنك تسجيل الدخول إلى جهاز Linux الظاهري الخاص بك بسرعة وأمان. عند تشغيل الأمر التالي، يقوم SSH بتحديد موقع وتحميل أي إعدادات من مجموعة Host myvm في ملف تكوين SSH.

ssh myvm

في المرة الأولى التي تسجّل فيها الدخول إلى خادم باستخدام مفتاح SSH، يطالبك الأمر بعبارة المرور الخاصة بملف المفتاح هذا.

الخطوات التالية

التالي هو إنشاء Azure Linux VMs باستخدام مفتاح SSH العمومي الجديد. يتم تأمين الأجهزة الظاهرية Azure التي تم إنشاؤها باستخدام مفتاح SSH العام كتسجيل دخول بشكل أفضل من الأجهزة الظاهرية التي تم إنشاؤها باستخدام طريقة تسجيل الدخول الافتراضية، كلمات المرور.