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

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

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

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

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

إشعار

ED25519 دعم مفتاح SSH لأجهزة Linux الظاهرية قيد المعاينة الآن في جميع المناطق بما في ذلك السحب السيادية.

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

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

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

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

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

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

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

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

يدعم Azure حالياً بروتوكول SSH للمفاتيح المزدوجة العامة-الخاصة 2 (SSH-2) RSA بطول لا يقل عن 2048 بت. دعم مفاتيح ED25519 قيد المعاينة، وتنسيقات المفاتيح الأخرى مثل ECDH و 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-keygen 256 بت ED25519 ملفات المفاتيح العامة والخاصة بشكل افتراضي في ~/.ssh الدليل. في حالة وجود مفاتيح مزدوجة SSH في الموقع الحالي، يتم الكتابة فوق هذه الملفات.

ssh-keygen -m PEM -t ed25519

مثال مفصل

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

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

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

ssh-keygen \
    -m PEM \
    -t ed25519 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myedprivatekey \
    -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 (RSA)

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]-----+

مثال على ssh-keygen (ED25519)

ssh-keygen -t ed25519 -m PEM -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_ed25519.
Your public key has been saved in /home/azureuser/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[ED25519 256]----+
|                 |
|..  .            |
|o+.o       .     |
|*=o o   o + +    |
|*+o+   oSB + o   |
|**++o.+oo = .    |
|=+*..*.o E       |
|..  o o..        |
|     .o.         |
+----[SHA256]-----+

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

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

أو

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

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

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

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

زوج مفاتيح RSA:

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

زوج مفاتيح ED25519:

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

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

Enter passphrase (empty for no passphrase):

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

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

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

إشعار

az sshkey create command deafults to RSA encryption ولا يمكن استخدامها لإنشاء أزواج مفاتيح ED25519، ولكن يمكنك إنشاء زوج مفاتيح ED25519 باستخدام ssh-keygen كما هو موضح أعلاه ثم استخدام هذا المفتاح العام لإنشاء جهاز ظاهري.

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

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

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

زوج مفاتيح RSA

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

زوج مفاتيح ED25519

cat ~/.ssh/id_ed25519.pub

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

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6I5JuhGq3RidMNpxrplIQwEfc4Rh7UyV8JYYH2U2xA azureuser@myserver

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

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

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

ssh-keygen \
-f ~/.ssh/id_ed25519.pub \
-e \
-m RFC4716 > ~/.ssh/id_edssh.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-add ~/.ssh/id_ed25519

تم تخزين عبارة مرور المفتاح الخاص الآن في 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 العام كتسجيل دخول بشكل أفضل من الأجهزة الظاهرية التي تم إنشاؤها باستخدام طريقة تسجيل الدخول الافتراضية، كلمات المرور.