SSH يا همان پوسته ايمن، پروتكل رمزگذاري شده است كه براي اداره و برقراري ارتباط با سرور مجازي ها استفاده مي شود. هنگام كار با سرور مجازي Ubuntu ، احتمال دارد بيشتر وقت خود را در يك بخش ترمينال متصل به سرور مجازي خود از طريق SSH بگذرانيد.
در اين راهنما ، ما روي تنظيم كليدهاي SSH براي نصب Ubuntu 20.04 تمركز خواهيم كرد. كليدهاي SSH روشي آسان و مطمئن براي ورود به سرور مجازي شما فراهم كرده و براي همه كاربران توصيه مي شود.
مرحله 1 – ايجاد جفت كليد
اولين قدم ايجاد يك جفت كليد در دستگاه كلاينت (معمولاً رايانه شما) ميباشد:
$ ssh-keygen

به طور پيش فرض نسخه هاي اخير ssh-keygen يك جفت كليد RSA ، 3072 بيتي ايجاد مي كنند ، كه براي بيشتر موارد استفاده به اندازه كافي ايمن است (ميتوانيد به صورت اختياري از پرچم -b 4096 عبور كنيد تا يك كليد بزرگتر 4096 بيتي ايجاد نماييد).
پس از وارد كردن دستور ، بايد خروجي زير را مشاهده كنيد:
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

Enter را فشار دهيد تا جفت كليد را در زيرديركتوري .ssh / در ديركتوري هوم خود ذخيره كنيد ، يا يك مسير جايگزين را مشخص كنيد.
اگر قبلاً يك جفت كليد SSH ايجاد كرده ايد ، ممكن است اعلان زير را مشاهده كنيد:
Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

اگر تصميم به بازنويسي كليد در ديسك داريد ، ديگر نمي توانيد با استفاده از كليد قبلي ، تأييد اعتبار كنيد. در انتخاب بله بسيار مراقب باشيد ، زيرا يك روند مخرب است كه قابل برگشت نخواهد بود.
سپس بايد اعلان زير را مشاهده كنيد:
Output
Enter passphrase (empty for no passphrase):

در اينجا ميتوانيد به صورت اختياري يك عبارت عبور مطمئن را وارد كنيد ، كه بسيار توصيه مي شود. عبارات عبور براي جلوگيري از ورود كاربران غيرمجاز ، يك لايه امنيتي ديگر اضافه مي كند. براي كسب اطلاعات بيشتر در مورد امنيت ، به آموزش ما در مورد چگونگي پيكربندي احراز هويت مبتني بر كليد SSH در سرور مجازي لينوكس مراجعه كنيد.
سپس بايد خروجي مشابه زير را مشاهده كنيد:
Output
Your identification has been saved in /your_home/.ssh/id_rsa
Your public key has been saved in /your_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host
The key’s randomart image is:
+—[RSA 3072]—-+
| .|
| + |
| + |
| . o . |
|o S . o |
| + o. .oo. .. .o|
|o = oooooEo+ …o|
|.. o *o+=.*+o….|
| =+=ooB=o…. |
+—-[SHA256]—–+

اكنون يك كليد عمومي و خصوصي داريد كه مي توانيد از آن براي تأييد اعتبار استفاده كنيد. مرحله بعدي قرار دادن كليد عمومي روي سرور مجازي خود ميباشد تا بتوانيد براي ورود به سيستم از تأييد اعتبار مبتني بر SSH استفاده كنيد.
مرحله 2 – كپي كردن كليد عمومي روي سرور مجازي Ubuntu
سريع ترين راه براي كپي كردن كليد عمومي خود در هاست Ubuntu ، استفاده از ابزاري به نام ssh-copy-id است. به دليل سادگي ، اين روش در صورت وجود بسيار توصيه مي شود. اگر شناسه ssh-copy-id را در دستگاه كلاينت خود نداريد ، ميتوانيد از يكي از دو روش جايگزين ارائه شده در اين بخش استفاده كنيد (كپي كردن از طريق SSH مبتني بر رمز عبور ، يا كپي كردن كليد به صورت دستي).
كپي كردن كليد عمومي با استفاده از ssh-copy-id
ابزار ssh-copy-id بصورت پيش فرض در بسياري از سيستم عامل ها گنجانده شده است ، بنابراين احتمالا آن را در سيستم محلي خود در دسترس داشته باشيد. براي كار با اين روش ، بايد از قبل دسترسي SSH به سرور مجازي مبتني بر رمزعبور را داشته باشيد.
براي استفاده از اين ابزار ، هاست از راه دور را كه مي خواهيد به آن متصل شويد و حساب كاربري كه دسترسي SSH مبتني بر رمز عبور به آن داريد را تعيين مي كنيد. اين حسابي است كه كليد عمومي SSH شما كپي مي شود.
تركيب به اين صورت است:
$ ssh-copy-id username@remote_host

ممكن است پيام زير را مشاهده كنيد:
Output
The authenticity of host ‘203.0.113.1 (203.0.113.1)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

اين بدان معني است كه رايانه محلي شما هاست از راه دور را تشخيص نمي دهد. اگر اولين بار است كه به هاست جديد وصل مي شويد. “yes” را تايپ كنيد و ENTER را براي ادامه فشار دهيد.
در مرحله بعد ، ابزار، حساب محلي شما را براي كليد id_rsa.pub كه قبلاً ايجاد كرديم ، اسكن مي كند. وقتي كليد را پيدا كرد ، رمز ورود به حساب كاربري از راه دور را از شما ميخواهد:
Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
username@203.0.113.1’s password:

گذرواژه را وارد كنيد (تايپ شما براي اهداف امنيتي نمايش داده نمي شود) و ENTER را فشار دهيد. اين ابزار با استفاده از گذرواژه اي كه ارائه داده ايد ، به هاست از راه دور متصل مي شود. سپس محتويات كليد ~ / .ssh / id_rsa.pub شما را در فايلي در ديركتوري ~/.ssh هوم حساب كاربري از راه دور به نام authorized_keys كپي مي كند.
بايد خروجي زير را مشاهده كنيد:
Output
Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘username@203.0.113.1′”
and check to make sure that only the key(s) you wanted were added.

در اين مرحله ، كليد id_rsa.pub شما در حساب راه دور بارگذاري شده است. مي توانيد به مرحله 3 برويد.
كپي كردن كليد عمومي با استفاده از SSH
اگر ssh-copy-id را در دسترس نداريد ، اما دسترسي SSH مبتني بر رمز عبور به يك حساب كاربري روي سرور مجازي خود داريد ، مي توانيد كليدهاي خود را با استفاده از يك روش معمولي SSH بارگذاري كنيد.
ما مي توانيم اين كار را با استفاده از دستور cat انجام دهيم تا محتواي كليد عمومي SSH را در رايانه محلي خود بخوانيم و از طريق اتصال SSH به سرور مجازي از راه دور اتصال برقرار كنيم.
از طرف ديگر ، مي توانيم اطمينان حاصل كنيم كه ديركتوري ~ / .ssh وجود دارد و داراي مجوزهاي صحيح تحت اكانتي است كه ما از آن استفاده مي كنيم.
سپس مي توانيم محتوياتي را كه به آن پيوند زده ايم را درون يك فايل به نام authorized_keys در اين ديركتوري وارد كنيم. ما از نماد >> تغيير مسير براي افزودن محتوا به جاي نوشتن آن استفاده خواهيم كرد. اين به ما امكان مي دهد بدون از بين بردن كليدهاي قبلي اضافه شده ، كليدهايي را اضافه كنيم.
فرمان كامل مانند اين است:
ممكن است پيام زير را مشاهده كنيد:
$ cat ~/.ssh/id_rsa.pub | ssh username@remote_host “mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys”

اين بدان معني است كه رايانه محلي شما هاست از راه دور را تشخيص نمي دهد. اگر اولين بار است كه به هاست جديد وصل مي شويد. yes را تايپ كنيد و ENTER را براي ادامه فشار دهيد.
پس از آن ، از شما خواسته مي شود رمزعبور حساب كاربري از راه دور را وارد كنيد:
Output
username@203.0.113.1’s password:

پس از وارد كردن گذرواژه ، محتواي كليد id_rsa.pub شما در انتهاي فايل authorized_keys حساب كاربري از راه دور كپي مي شود. اگر موفقيت آميز بود ، به مرحله 3 برويد.
كپي كردن كليد عمومي به صورت دستي
اگر دسترسي SSH مبتني بر رمز عبور به سرور مجازي خود را نداريد ، بايد مراحل فوق را به صورت دستي انجام دهيد.
ما به طور دستي محتواي فايل id_rsa.pub خود را به فايل ~/.ssh/authorized_keys روي دستگاه از راه دور شما اضافه خواهيم كرد.
براي نمايش محتواي كليد id_rsa.pub ، اين دستور را در رايانه محلي خود تايپ كنيد:
$ cat ~/.ssh/id_rsa.pub

محتواي كليد را مشاهده خواهيد كرد ، كه بايد چيزي شبيه به اين باشد:
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

با استفاده از روش ديگري كه در دسترس داريد ، به هاست راه دور خود دسترسي پيدا كنيد.
پس از دسترسي به حساب كاربري خود در سرور مجازي راه دور ، بايد اطمينان حاصل كنيد كه ديركتوري ~ / .ssh وجود دارد. اين دستور در صورت لزوم دايركتوري ايجاد مي كند يا در صورت وجود هيچ كاري انجام نمي دهد:
$ mkdir -p ~/.ssh

اكنون ، مي توانيد فايل authorized_keys را ايجاد كنيد و يا تغيير دهيد. مي توانيد مطالب مربوط به فايل id_rsa.pub خود را به انتهاي فايل authorized_keys اضافه كنيد و در صورت لزوم با استفاده از اين دستور آن را ايجاد كنيد:
$ echo public_key_string >> ~/.ssh/authorized_keys

در دستور فوق ، public_key_string را با خروجي دستور cat ~/.ssh/id_rsa.pub كه بر روي سيستم محلي خود اجرا كرده ايد ، جايگزين كنيد. بايد با ssh-rsa AAAA شروع شود …
سرانجام ، اطمينان خواهيم يافت كه ديركتوري ~ / .shsh و فايل authorized_keys مجموعه مجوزهاي مناسب را دارند:
$ chmod -R go= ~/.ssh

اين دستور به طور بازگشتي همه مجوزهاي “group” و “other” را براي ديركتوري ~ / .ssh / حذف مي كند.
اگر براي تنظيم كليدهاي يك حساب كاربري از كاربر ريشه استفاده مي كنيد ، مهم است كه ديركتوري ~ / .ssh متعلق به كاربر باشد و نه ريشه:
$ chown -R sammy:sammy ~/.ssh

در اين آموزش كاربر Sammy نامگذاري شده است اما بايد نام كاربري مناسب را در دستور فوق جايگزين كنيد.
اكنون مي توانيم با سرور مجازي Ubuntu ، احراز هويت بدون رمز عبور را امتحان كنيم.
مرحله 3 – تأييد اعتبار براي سرور مجازي Ubuntu با استفاده از كليدهاي SSH
اگر يكي از روشهاي فوق را با موفقيت انجام داده ايد ، بايد بتوانيد بدون ارائه رمز ورود به حساب راه دور ، وارد هاست راه دور شويد.
فرايند پايه يكسان است:
$ ssh username@remote_host

اگر اولين بار است كه به اين هاست متصل مي شويد (و در صورتي كه از آخرين روش در بالا استفاده كرديد) ، ممكن است چيزي شبيه به اين را مشاهده كنيد:
Output
The authenticity of host ‘203.0.113.1 (203.0.113.1)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

اين بدان معني است كه رايانه محلي شما هاست از راه دور را تشخيص نمي دهد. “yes” را تايپ كرده و ENTER را براي ادامه فشار دهيد.
اگر كلمه عبور براي كليد خصوصي خود ارائه نكرده ايد ، بلافاصله وارد سيستم مي شويد. اگر هنگام ايجاد كليد ، يك عبارت عبور را براي كليد خصوصي تهيه كرده باشيد ، از شما خواسته مي شود اكنون آن را وارد كنيد (توجه داشته باشيد كه كليدهايي گه فشار ميدهيد براي امنيت در بخش ترمينال نمايش داده نميشوند). پس از تأييد اعتبار ، بايد يك بخش پوسته جديد با حساب پيكربندي شده روي سرور مجازي Ubuntu باز شود.
اگر تأييد هويت مبتني بر كليد موفقيت آميز بود ، ادامه بدهيد تا ببينيد كه چگونه با غيرفعال كردن احراز هويت رمز عبور ، امنيت بيشتري در سيستم خود داشته باشيد.
مرحله 4 – غيرفعال كردن احراز هويت رمز عبور روي سرور مجازي خود
اگر توانستيد با استفاده از SSH بدون پسورد وارد حساب كاربري خود شويد ، تأييد هويت مبتني بر كليد SSH را با موفقيت پيكربندي كرده ايد. با اين حال ، مكانيسم تأييد اعتبار مبتني بر رمز عبور شما هنوز فعال است ، به اين معني كه سرور مجازي شما هنوز در معرض حملات خطرناك ميباشد.
قبل از انجام مراحل در اين بخش ، مطمئن شويد كه احراز هويت مبتني بر كليد SSH را براي حساب اصلي در اين سرور مجازي پيكربندي كرده ايد ، يا ترجيحاً احراز هويت مبتني بر كليد SSH را براي يك حساب غير ريشه با امتيازات sud در اين سرور مجازي پيكربندي كرده ايد. در اين مرحله ورود به سيستم هاي مبتني بر رمز عبور قفل خواهد شد ، بنابراين اطمينان از اينكه همچنان مي توانيد دسترسي ادمين داشته باشيد بسيار مهم است.
هنگامي كه تأييد كرديد كه حساب از راه دور شما داراي امتيازات ادمين است ، با كليدهاي SSH ، به صورت ريشه يا با يك حساب داراي امتيازات sudo وارد سرور مجازي راه دور خود شويد. سپس فايل پيكربندي Daemon SSH را باز كنيد:
$ sudo nano /etc/ssh/sshd_config

در داخل فايل ، يك دستورالعمل با نام PasswordAuthentication را جستجو كنيد. اين خط ممكن است در ابتدا با يك # شروع شود. خط را با حذف # باطل كرده ، و مقدار را بر روي no قرار دهيد. با اين كار توانايي ورود به سيستم از طريق SSH با استفاده از گذرواژه هاي حساب غيرفعال مي شود:
/etc/ssh/sshd_config
. . .
PasswordAuthentication no
. . .

پس از اتمام فايل را با فشار دادن CTRL + X ، سپس Y ذخيره كرده و آن را ببنديد تا تأييد كنيد كه فايل ذخيره شود و درنهايت ENTER را براي خروج از nano وارد كنيد. براي فعال كردن اين تغييرات ، بايد سرويس sshd را مجدداً راه اندازي كنيم:
$ sudo systemctl restart ssh

براي احتياط ، قبل از بستن بخش فعلي خود ، يك پنجره ترمينال جديد باز كنيد و آزمايش كنيد كه سرويس SSH به درستي كار مي كند:
$ ssh username@remote_host

پس از تأييد صحت عملكرد سرويس SSH ، مي توانيد با اطمينان تمام بخش هاي فعلي سرور مجازي را ببنديد.
اكنون SSH daemon در سرور مجازي Ubuntu شما فقط به احراز هويت مبتني بر كليد SSH پاسخ مي دهد. ورود به سيستم مبتني بر رمز عبور غيرفعال شده است.
نتيجه
اكنون بايد تأييد هويت مبتني بر كليد SSH را روي سرور مجازي خود پيكربندي كنيد كه به شما اجازه ميدهد بدون ارائه رمز ورود به حساب كاربري خود وارد شويد.
اگر مي خواهيد در مورد كار با SSH اطلاعات بيشتري كسب كنيد ، به راهنماي ضروريات SSH نگاهي بيندازيد.