ssh key

چگونه SSH KEY ایجاد کنیم؟زمان مطالعه این مطلب 10دقیقه

SSH یک پروتکل رمز نگاری شده است که به منظور مدیریت و ایجاد ارتباط ایمن با سرورها از طریق شبکه مورد استفاده قرار می گیرد. به بیان دیگر پروتکل SSH اعتبارسنجی, رمزنگاری و یکپارچگی داده‌های منتقل شده از طریق شبکه را پوشش می دهد.
در این آموزش به نحوه ساخت و تنظیم کلید SSH در یک سیستم عامل تازه نصب شده ۱۶.۰۴ پرداخته شده است.

قدم اول: ایجاد کلید

اولین قدم  ایجاد یک جفت کلید بر روی رایانه کاربر است:

$ ssh-keygen

به صورت پیش‌فرض دستور ssh-keygen کلیدی با رمزنگاری  bit-2048 RSA ایجاد کرده که در اغلب موارد ایمن می باشد. ( با سویچ ۴۰۶۹ -b قادر به ایجاد کلید bit-4096 خواهید بود)
پس از وارد کردن دستور خروجی زیر ظاهر می گردد:

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

جهت تأیید محل ذخیره شدن کلید، در پوشه پیش‌فرض  home/username/.ssh/ کلید’enter’ را فشار داده و یا مسیر جایگزین را تعیین کنید.

درصورتی که کلید SSH را از قبل ایجاد کرده باشید عبارت زیر نمایانگر خواهد شد:

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

هشدار: درصورت انتخاب بازنویسی کلید بر روی دیسک، دیگر قادر به استفاده از کلید قبلی خود نبوده و در این فرایند امکان بازیابی وجود ندارد. از همین رو به هنگام انتخاب گزینه تایید دقت نمایید.

خط فرمان زیر برای شما نمایان خواهد شد:


Enter passphrase (empty for no passphrase):

در این مرحله توصیه می گردد یک عبارت امن را به عنوان رمز عبور استفاده از کلید، وارد نمایید. این عبارت این امکان را فراهم می‌کند که لایه‌ ی دیگری از ایمن سازی به منظور جلوگیری از ورود کاربران غیر مجاز افزوده شود.

در این مرحله شاهد خروجی زیر خواهیم بود:

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:icYVDgzA1JJz9PNG4VpXAnaq0fNJ01o+qpzA9eDEomA dani7@daniel
The key's randomart image is:
+---[RSA 2048]----+
| oo=oo. =.o .    |
|  = o..* = +     |
|   +  + X + o    |
|     . % * *     |
|  E   B S + o    |
| . . + * o . .   |
|    . o . o      |
|       o o       |
|        +        |
+----[SHA256]-----+

اکنون جفت کلید خصوصی و عمومی جهت اعتبار سنجی قابل استفاده می باشد. قدم بعدی قراردادن کلید عمومی بر روی سرور مورد نظر خواهد بود تا از طریق آن بتوان از مکانیسم‌های بر پایه کلید SSH جهت احراز هویت استفاده نمود.

قدم دوم : کلید عمومی را بر روی سرور اوبونتو[ کپی کنید.

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

ssh-copy-id Username@remote_host

بعد از وارد کردن دستور بالا ممکن است پیام زیر را نمایش داده شود:

The authenticity of host '203.0.113.1 (203.113.0.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 در آن ذخیره شده بود، برای پیدا کردن کلید متناظر موجود در سرور، جستجو می‌کند. از آنجایی که هنوز کلید عمومی بر روی سرور وجود ندارد، بعد از آزمایش همه کلیدهای خصوصی و عدم موفقیت آنها، درخواست وارد کردن رمز عبور حساب کاربری نمایش داده می‌شود:

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that ...
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed --if you are promoted now it ...
username@203.0.113.1's password:

رمز عبور خود را تایپ نمایید (درحین تایپ عبارت نمایان نمی شود) و دکمه ’enter’ را فشار دهید. این ابزار از طریق رمزعبور موجود به سرور مورد نظر متصل می گردد. در این مرحله محتوای کلید ssh/id_rsa.pub ./~  که در  پوشه home کاربر ایجاد شده بود، به صورت از راه دور بر روی فایل authorized_keys در مسیر ssh. /~ موجود در سرور، کپی می گردد:

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 key(s) you wanted were added.

کلید id_rsa.pub شما در سرور مقصد آپلود شده است. همچنین روش دیگر کپی کلید در ادامه آورده شده است.

کپی کلید عمومی با استفاده از SSH

درصورت عدم وجود ssh-copy-id می‌توان با روش متداول SSH ، کلیدهای خود را آپلود نمایید.

بدین منظور می‌توان با استفاده از دستور cat محتوای کلید عمومی SSH را بر رایانه خود خوانده  و سپس با پایپ کردن آن از طریق SSH به سرور مقصد، ارسال نمود.

از طرفی می‌بایست از وجود پوشه ssh./ ~ و دسترسی های صحیح آن در سرور مقصد برای کاربر موجود، اطمینان حاصل کرد. سپس می‌توان خروجی پایپ شده مرحله قبل را در فایلی تحت عنوان authorized_keys در این پوشه کپی کرد. برای انجام این عمل می‌توان از علامت ‍‍‍‍<< استفاده کرد تا محتوای مورد نظر را به انتهای فایل مذکور نمود. با این کار از بازنویسی فایل جلوگیری می‌شود.

دستور کامل مورد استفاده به شکل زیر است:

cat ~/.ssh/id-rsa.pub | ssh username@remote_hoset "mkdir -p ~/.ssh && touch ~/.ssh/authorized

همچنین ممکن است پیغام زیر مشاهده گردد:

The authenticity of host '203.0.113.1 (203.113.0.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

ن بدین معنا است که رایانه شما سرور مقصد را شناسایی نکرده است. به طور کلی این پیام به هنگام اولین برقراری ارتباط با یک سرور نمایش داده می شود. و اکنون  می‌توانید دکمه enter را فشار دهید و ادامه دهید.

در ادامه, می بایست رمز عبور سرور مورد نظر را وارد کنید:

username@203.0.113.1's password:

بعد از وارد کردن رمز عبور خود، محتوای کلید id_rsa.pub در انتهای فایل authorized_keys کاربر کپی خواهد شد. در صورت موفقیت آمیز بودن از مرحله ۳ ادامه دهید.

کپی کلید عمومی به صورت دستی

در صورت عدم برخورداری از ارتباط SSH با رمزعبور جهت دسترسی به سرور, قادر خوهید بود تمامی مراحل بالا را به صورت دستی انجام  دهید.

بدین منظور محتوای فایل id_rsa.pub را به صورت دستی به انتهای فایل ~/.ssh/authorized_keys بر روی سرور مقصد اضافه خواهیم کرد.

جهت نمایش محتوای کلید id_rsa.pub عبارت زیر را تایپ کنید:

cat ~/.ssh/id_rsa.pub

پس از وارد کردن دستور ذکر شده محتوای زیر ظاهر می گردد:

در این مرحله با استفاده از یکی از راه‌های دسترسی به سرور مورد نظر، به حساب کاربری خود در سرور، وارد شده و از وجود پوشه ~/.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

ن دستور تمامی مجوز های “group” و “other” را برای پوشه ~/.ssh/  حذف می‌کند.

اگر از کاربر root جهت ساخت کلیدهای خود استفاده کرده‌اید این نکته حایز اهمیت خواهد بود که پوشه ~/.ssh متعلق به کاربر مورد نظر باشد و نه کاربر root.

chown -R sammy:sammy ~/.ssh

در این فایل آموزشی نام کاربر sammy انتخاب شده است و می بایست نام کاربری خود را جایگزین نمایید.

در حال حاضر امکان احراز هویت به سرور اوبونتو بدون رمز عبور  فراهم شده است.

قدم سوم: اعتبار سنجی  سرور اوبونتو با استفاده از SSH Key

درصورت انجام صحیح مراحل بالا قادر خواهید بود به سرور مقصد بدون رمزعبور متصل شوید.
مراحل اولیه آن مشابه مراحل قبلی است:

ssh username@remote_host

اگر برای اولین بار به سرور متصل می‌شوید , ممکن است عبارت زیر را مشاهده کنید:

The authenticity of host '203.0.113.1 (203.113.0.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 بدون رمز عبور باشید، بدان معناست که احراز هویت مبتنی بر کلید را با موفقیت بر روی حساب کاربری خود، پیکربندی نموده‌اید. با این حال همچنان دسترسی از طریق احراز هویت مبتنی بر رمز عبور فعال بوده و سرور شما در معرض حملات احتمالی خواهد بود.

قبل از تکمیل مراحل این قسمت، مطمئن شوید احراز هویت مبتنی بر کلید برای حساب کاربری root در سرور پیکربندی شده و یا ترجیحاً تنظیمات احراز هویت مبتنی بر کلید را برای کاربر غیر root با اختیارات sudo وجود داشته باشد.

بعد از اطمینان از اینکه حساب کاربری  شما دارای سطح دسترسی مدیریتی است، از طریق کلید SSH با سطح دسترسی root  یا کاربر دارای دسترسی sudo به سرور مقصد  وارد شوید. در ادامه فایل تنظیمات سرور ssh را باز کنید:

sudo nano /etc/ssh/sshd_config

در فایل تنطیماتPasswordAuthentication را جستجو کرده و سپس از حالت کامنت خارج و به حالت no تغییر دهید. این تغییر قابلیت ورود از طریق SSH را با استفاده از رمز عبور را غیر فعال خواهد کرد:

...
Password Authentication no
...

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

sudo systemctl restart ssh

جهت اطمینان بیشتر یک پنجره ترمینال جدید باز کرده و از کارکرد درست سرویس SSH  اطمینان حاصل نمایید.

$ ssh username@remote_host

س از حصول اطمینان از درستی سرویس SSH خود، می توانید تمامی نشست‌های فعلی به سرور را با خیال راحت ببندید.

در این مرحله سرویس ssh شما بر روی سرور اوبونتو، برای اتصال از طریق کلید‌های ssh به درستی تنظیم شده و همچنین دسترسی از طریق رمز عبور غیر فعال شده است.

نتیجه‌گیری

با انجام تنظیمات ارائه شده در این آموزش، احراز هویتی مبتنی بر کلید ssh بر روی سرور خود پیکربندی کرده‌اید که به شما امکان دسترسی به سرور بدون استفاده از رمزعبور را می‌دهد.

پاسخ دادن:

ایمیل شما نمایش داده نمی‌شود.