مقدمه

SSH یک پروتکل رمزگذاری شده است که از آن برای مدیریت و تعامل با سرورها استفاده می‌شود. زمانی که با سرور Ubuntu کار می‌کنید، به احتمال زیاد در بیشتر مواقع در یک ترمینال سشن متصل به سرور از طریق SSH خواهید بود. در این مطلب آموزشی به روش نصب SSH-key روی سرور Ubuntu 18.04 می‌پردازیم. در واقع SSH-key راهی آسان و ایمن برای ورود به سرور ایجاد می‌کند و برای همه کاربرهای توصیه می‌شود. مراحل نصب SSH-key روی سرور Ubuntu 18.04 شباهت زیادی به نصب آن روی سرور Ubuntu 20.04 دارد. . با وان سنتر همراه باشید تا با این مراحل آشنا شوید.

مرحله اول – ایجاد یک جفت SSH-key

مرحله اول برای ایجاد یک جفت SSH-key در دستگاه (که معمولا کامپیوتر شما است) به شکل زیر می‌باشد:

ssh-ketgen

آخرین نسخه‌های ssh-keygen یک جفت SSH-key ۲۰۴۸ بیتی RSA ایجاد می‌کند که برای اکثر موارد استفاده به اندازه کافی امنیت دارد. (می‌توانید با ارسال فلگ یا پرچم –b 4096 یک SSH-key بزرگتر ۴۰۹۶ بیتی ایجاد کنید.)
بعد از وارد کردن دستور، باید یک خروجی به شکل زیر ببینید:

Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

دکمه ENTER  را بزنید تا SSH-key ایجاد شده را در زیرشاخه /ssh. دایرکتوری اصلی خود ذخیره کرده یا یک مسیر جایگزین برای آن تعیین کنید.
اگر قبلا یک جفت SSH-key تولید کرده باشید، چیزی به شکل زیر خواهید دید:

/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

اگر SSH-key  را روی دیسک جایگزین کنید، دیگر استفاده ازSSH-key  قبلی برای احراز هویت امکان‌پذیر نیست. اگر می‌خواهید yes  را انتخاب کنید، خیلی مراقب باشید چون این یک پروسه مخرب است که قابل بازگشت هم نیست.
در ادامه چیزی به شکل زیر خواهید دید:

Enter passphrase (empty for no passphrase):

در اینجا می‌توانید یک عبارت عبور امن به دلخواه خود بنویسید؛ این کار به شدت توصیه می‌شود. با تعیین عبارت عبور لایه‌های امنیتی سرور بیشتر می‌شود که این‌گونه سرور می‌تواند از ورود کاربران غیرمجاز جلوگیری کند. برای مطالعه بیشتر و یادگیری بالا بردن امنیت سرور، مطلب آموزشی نحوه پیکربندی احراز هویت با  SSH-key در یک سرور لینوکس را مطالعه کنید.
در ادامه باید خروجی شبیه به زیر را ببینید:

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:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

حالا شما public key و private key را برای احراز هویت در اختیار دارید. در مرحله بعد روش قرار دادن public key در سرور خود برای احراز هویت بر اساس SSH-key را به شما آموزش می‌دهیم.

مرحله دوم – کپی کردن Public key در سرور Ubuntu

سریع‌ترین راه برای کپی کردن Public key در هاست Ubuntu، استفاده از ابزار ssh-copy-id است. این روش چون خیلی ساده است، در صورتی که در دسترس باشد، به شدت توصیه می‌شود. اگر ابزار ssh-copy-id را در کامپیوتر خود ندارید، می‌توانید از دو روشی که در ادامه آن‌ها را توضیح می‌دهیم، استفاده کنید. (کپی کردن از طریق کلمه عبور بر اساس SSH، یا کپی کردن SSH-key به صورت دستی)

کپی کردن public key با استفاده از ابزار ssh-copy-id

ابزار ssh-copy-id به صورت پیش‌فرض در بیشتر سیستم‌های عامل وجود دارد. بنابراین احتمالا شما در سیستم خود این ابزار را دارید. برای اینکه بتوانید از این روش استفاده کنید، باید دسترسی SSH بر اساس کلمه عبور به سرور خود داشته باشید.
برای استفاده از این ابزار باید هاست ریموتی که می‌خواهید با آن وصل شوید، را تعیین کنید. همچنین باید حساب کاربری که دسترسی SSH بر اساس کلمه عبور دارد، را مشخص کنید؛ این حساب کاربری همان حسابی است که Public key شما در آن کپی خواهد شد.
سینتکس این‌گونه است:

ssh-copy-id username@remote_host

در ادامه احتمالا چیزی به شکل زیر خواهید دید:

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 را بزنید.
در ادامه ابزاری که از آن استفاده می کنید یعنی ssh-copy-id، حساب کاربری شما را برای پیدا کردن key id_rsa.pub  که قبلا ایجاد کرده‌اید، اسکن می‌کند. سپس به محض پیدا کردن، از شما می‌خواهد که کلمه عبور حساب کاربری ریموت را وارد کنید:

/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
[email protected]'s password:

کلمه عبور را وارد کنید (کلمه عبوری که می‌نویسید به دلایل امنیتی نشان داده نمی‌شود) و بعد ENTER را بزنید. ابزار ssh-copy-id با استفاده از همین کلمه عبور به حساب کاربری شما در هاست ریموت وصل خواهد شد. در ادامه محتوای ssh/id_rsa.pub key./~ را داخل یک فایل در دایرکتوری ssh./~ حساب کاربری ریموت، به اسم authorized_keys کپی می‌کند.
در ادامه باید خروجی زیر را ببینید:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

حالا id_rsa.pub key شما در حساب کاربری ریموت آپلود شده است و می‌توانید وارد مرحله سوم نصب SSH-key روی سرور Ubuntu 18.04 شوید.

کپی کردن  Public keyبا استفاده از SSH

اگر ابزار ssh-copy-id را ندارید ولی دسترسی SSH به یک حساب کاربری در سرور خود با استفاده از کلمه عبور را دارید، می‌توانید SSH-key خود را با استفاده از روش متداول SSH آپلود کنید.
می‌توانید این کار را با دستور cat انجام دهید تا محتوای SSH-key داخل کامپیوتر خود را بخوانید و آن را از طریق یک اتصال SSH به سرور ریموت متصل کنید.
از طرفی دیگر می‌توانید مطمئن شوید که دایرکتوری ssh./~ موجود است و در حساب کاربری که از آن استفاده می‌کنید، دسترسی‌های درستی دارد.
در ادامه می‌توانید از محتوایی که به فایل authorized_key در دایرکتوری منتقل کردید، خروجی بگیرید. به جای جایگزین کردن یا اوررایت (overwrite) از علامت ریدایرکت (redirect) یا همان >> برای اضافه کردن محتوا استفاده کنید. با این کار می‌توانید SSH-key خود را بدون از بین بردی SSH-key قبلی اضافه کنید.
صورت کامل دستور به شکل زیر است:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

در ادامه پیغام زیر خواهد آمد:

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 را بزنید.
در ادامه باید کلمه عبور حساب کاربری ریموت را وارد کنید.

[email protected]'s password:

بعد از وارد کردن کلمه عبور، محتوای id_rsa.pub key شما در انتهای فایل authorized_keys حساب کاربری ریموت شما کپی می‌شود. بعد از این کار می‌توانید وارد مرحله سوم نصب SSH-key روی سرور Ubuntu 18.04 شوید.

کپی کردن Public key به صورت دستی

اگر دسترسی SSH با کلمه عبور به سرور ندارید، باید پروسه‌ای که در قسمت قبل توضیح دادیم را به صورت دستی انجام دهید. با انجام این پروسه، شما محتوای فایل id_rsa.pub خود را به فایل ~/.ssh/authorized_keys دستگاه ریموت خود اضافه خواهید کرد.
برای دیدن محتوای id_rsa.pub key خود دستور زیر را وارد کنید:

cat ~/.ssh/id_rsa.pub

در ادامه شما محتوای id_rsa.pub key را خواهید دید، که چیزی شبیه به شکل زیر خواهد بود:

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 شروع کنید.
در آخر، مطمئن شوید که دایرکتوری ssh./~ و فایل authorized_keys دسترسی‌های مناسب را دارند:

chmod -R go= ~/.ssh

این دستور همه دسترسی‌های “گروه” و “سایر” دایرکتوری /ssh./~ را به صورت بازگشت‌پذیر حذف می‌کند.
اگر از حساب کاربری روت (root) برای نصب SSH-key روی یک حساب کاربری استفاده می‌کنید، خیلی مهم است که بدانید دایرکتوری ssh./~ باید متعلق به کاربر باشد نه به روت:

chown -R username:username ~/.ssh

در این دستور شما باید نام کاربری حسابی که SSH-key را روی آن نصب می‌کنید، به جای username بنویسید.
حالا می‌توانید بدون احراز هویت کلمه عبور وارد سرور Ubuntu خود شوید. در مرحله سوم خواهید دید که چگونه می‌شود با استفاده از SSH-key در سرور Ubuntu احراز هویت کرد. با وان سنتر همراه باشید.

مرحله سوم – احراز هویت در سرور Ubuntu با استفاده از SSH-key

بعد از انجام یکی از سه پروسه‌ای که در مرحله دوم توضیح دادیم، باید بتوانید بدون وارد کردن کلمه عبور حساب کاربری ریموت وارد هاست ریموت شوید.
پروسه اصلی ورود به هاست ریموت هم همین‌گونه است:

ssh username@remote_host

وقتی که برای اولین بار وارد این هاست شوید (اگه از روش آخری که در مرحله دوم توضیح دادیم، استفاده کرده باشید)، چیزی به شکل زیر خواهید دید:

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 را بزنید.
اگر برای SSH-key شخصی خود عبارت عبور تعیین نکرده‌ باشید، بلافاصله وارد سرور خواهید شد. اما اگر در زمان ایجاد SSH-key، عبارت عبور برای private key خود تعیین کرده باشید، برای ورود به سرور باید عبارت عبور را وارد کنید. توجه داشته باشید که به دلایل امنیتی نوشته شدن عبارت عبور در ترمینال سشن نشان داده نمی‌شود. بعد از احراز هویت، یک شل سشن (shell session) جدید با حساب کاربری پیکربندی شده در سرور Ubuntu برای شما باز می‌شود.
اگر احراز هویت با SSH-key با موفقیت انجام شد، می‌توانید وارد مرحله چهارم شوید. در این مرحله به شما آموزش خواهیم داد که چگونه با غیرفعال کردن احراز هویت کلمه عبور، امنیت سیستم خود را بالا ببرید. با وان سنتر همراه باشید.

مرحله چهارم – غیرفعال کردن احراز هویت کلمه عبور در سرور

اگر توانسته باشید که با استفاده از SSH-key و بدون کلمه عبور وارد حساب کاربری خود شوید، پیکربندی احراز هویت با SSH-key در حساب کاربری شما با موفقیت انجام شده است. البته مکانیزم احراز هویت با کلمه عبور شما همچنان فعال است که نشان می‌دهد هنوز سرور شما در معرض حملات brute-force قرار دارد.
قبل از انجام مراحل این قسمت، باید احراز هویت با SSH-key برای حساب کاربری روت در این سرور، پیکر بندی شده باشد. اگر هم برای حساب روت این کار را انجام نشده، برای یک حساب کاربری به غیر از روت که دسترسی‌های sudo دارد، احراز هویت با SSH-key پیکربندی شده باشد. این مرحله ورودهای با کلمه عبور را محدود می‌کند، بنابراین بسیار مهم است که بتوانید دسترسی مدیریتی داشته باشید.
اول مطمئن شوید که حساب کاربری ریموت شما دسترسی‌های مدیریتی دارد. حالا با حساب کاربری روت یا با حساب کاربری که دسترسی sudo دارد، با استفاده از SSH-key وارد سرور ریموت شوید. بعد از ورود، فایل پیکربندی SSH daemon را باز کنید:

sudo nano /etc/ssh/sshd_config

در داخل فایل، دستوری به اسم PasswordAuthentication را پیدا کنید. این خط ممکن است که با # شروع شده باشد. این خط را با حذف # از حالت comment خارج کنید و ارزش آن را روی no تنظیم کنید. با این کار قابلیت ورود از طریق SSH با استفاده از کلمه عبور غیر فعال می‌شود:

. . .
PasswordAuthentication no
. . .
/etc/ssh/sshd_config

بعد از انجام این کار، با زدن CTRL+X فایل را ذخیره کنید و از آن خارج شوید. سپس برای تایید ذخیره فایل Y را بزنید و در آخر با زدن ENTER از nano خارج شوید. برای اینکه این تغییرات فعال شوند باید سرویس sshd را مجدد اجرا کنید:

sudo systemctl restart ssh

برای احتیاط، یک ترمینال جدید باز کنید و سرویس SSH را امتحان کنید تا از عملکرد درست آن مطمئن شوید. بعد از این کار سشن فعلی را ببنید:

ssh username@remote_host

وقتی که از عملکرد درست سرویس SSH مطمئن شدید، می‌توانید همه سشن‌های فعلی سرور را ببندید.
از این به بعد SSH daemon در سرور Ubuntu شما فقط در صورت احراز هویت با SSH-key کار خواهد کرد. ورودهای با کلمه عبور هم غیرفعال شده‌اند.
حالا روی سرور شما احراز هویت با SSH-key پیکربندی شده است و می‌توانید بدون ارائه کلمه عبور حساب کاربری وارد سرور شوید.

اشتراک گذاری