DevOps Engineer / personal Site : sadeghkhademi.com
احراز هویت مبتنی بر SSH key در لینوکس
پروتکل SSH، یا Secure SHel، یک پروتکل رمزگذاری شده است که برای مدیریت و ارتباط با سرورها مورد استفاده قرار می گیرد.
کلید SSH چگونه کار می کند؟
سرور SSH می تواند کاربران را با استفاده از روش های مختلف تأیید کند. اساسی ترین آنها احراز هویت با استفاده از گذرواژه است که آسانترین روش برای استفاده است، اما امن ترین نیست.
اگر چه گذرواژه ها به شیوه ای امن به سرور ارسال می شوند، اما به طور کلی پیچیده یا به اندازه کافی بلند نیستند تا در مقابل حملات مکرر مهاجمان مقاوم باشند. اگر چه روش های دیگری برای اضافه کردن امنیت اضافی (fail2ban، و غیره) وجود دارد، کلیدهای SSH ثابت کردن که یک جایگزین قابل اعتماد و مطمئن هستند.
جفت کلید SSH دو کلید رمزنگاری امن است که می تواند برای تأیید هویت یک مشتری به یک سرور SSH مورد استفاده قرار گیرد. هر جفت کلیدی شامل یک کلید عمومی و یک کلید خصوصی است.
کلید خصوصی توسط مشتری حفظ می شود و باید کاملا مخفی نگه داشته شود. هرگونه در معرض خطر قرار دادن کلید خصوصی به hacker اجازه می دهد تا به سرورهایی که با کلید عمومی مربوطه پیکربندی شده اند بدون احراز هویت اضافی وارد شوند. میتوان کلید خصوصی را روی دیسک رمزگذاری شده نگهداری کرد.
کلید عمومی را می توان بدون هیچ گونه عواقب منفی آزادانه به اشتراک گذاشت. کلید عمومی پیام ها را رمزگذاری میکند بطوری که تنها با کلید خصوصی می توان رمزگشایی کرد. از این ویژگی به عنوان راهی برای اعتبار سنجی با استفاده از جفت کلید استفاده می شود.
کلید عمومی در ریموت سروری آپلود می شود که می خواهید با SSH وارد شوید. کلید در یک فایل خاص در حساب کاربری شما به نام authorized_keys ذخیره میشود که در مسیر زیر نگهداری میشود.
~/.ssh/authorized_keys
چگونه کلید SSH بسازیم؟
گام اول برای پیکربندی SSH key، ایجاد یک جفت کلید SSH بر روی کامپیوتر شما است.
برای انجام این کار، می توانیم از یک ابزار ویژه به نام ssh-keygen استفاده کنیم که شامل مجموعه ای از ابزارهای استاندارد OpenSSH می باشد. به طور پیش فرض یک جفت کلید RSA 2048 بیتی ایجاد می کند که برای اکثر موارد استفاده می شود.
در کامپیوتر خود، دستور زیر را وارد نمایید:
ssh-keygen
خروجی دستور شبیه زیر خواهد بود :
Generating public/private rsa key pair. Enter file in which to save the key (/username/.ssh/id_rsa):
این ابزار به شما این امکان را می دهد که برای کلیدهای تولید شده یک مکان انتخاب کنید. به طور پیش فرض کلید در دایرکتوری ssh. در دایرکتوری home کاربر ذخیره می شود. کلید خصوصی id_rsa نامیده می شود و کلید عمومی مرتبط آن id_rsa.pub نامیده می شود.
معمولا بهتر است در محل پیش فرض در این مرحله باقی بمانند. انجام این کار به SSH client این اجازه را می دهد به صورت خودکار هنگام تلاش برای authenticate کلید های SSH را پیدا کند.
اگر قبلا یک جفت کلید SSH ایجاد کرده باشید، ممکن است پیامی شبیه به این را ببینید:
/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?
اگر انتخاب کنید کلید را بازنویسی کنید، دیگر نمی توانید با استفاده از کلید قبلی authenticate کنید. هنگام انتخاب Yes بسیار مراقب باشید، این فرآیند غیر قابل برگشت است.
بعد، از شما خواسته خواهد شد تا یک کلمهعبور برای کلید وارد کنید. این کلمهعبور اختیاری است که می تواند برای رمزگذاری فایل کلید خصوصی روی دیسک استفاده شود.
Enter passphrase (empty for no passphrase):
شاید بدانید SSH-Key چه مزایای را فراهم می کند. برخی از مزایا عبارتند از:
- کلید خصوصی SSH (بخشی که می تواند توسط کلمهعبور محافظت شود)، هرگز در شبکه نمایش داده نمی شود. کلمهعبور فقط برای رمزگشایی کلید در کامپیوتر لوکال استفاده می شود. این به این معنی است که brute forcing در برابر کلمهعبور امکان پذیر نخواهد بود.
- کلید خصوصی در یک دایرکتوری محدود قرار دارد. خود کلید نیز باید دارای مجوزهای محدود (خواندن و نوشتن فقط برای مالک باشد). به این معنی دیگر کاربران سیستم نمیتوانند از آن استفاده کنند.
- هر هکری که بخواهد کلمهعبور کلید خصوصی SSH را از بین ببرد، باید به سیستم دسترسی داشته باشد. به این معنی که برای این کار آنها باید قبلا به حساب کاربری شما یا حساب کاربری root دسترسی پیدا کنند. اگر در چنین موقعیتی باشید، کلمهعبور می تواند مانع از ورود مهاجم به دیگر سرور های شما شود.
از آنجا که کلید خصوصی هرگز در شبکه نیست و از طریق مجوزهای فایل محافظت می شود، این فایل هرگز نباید برای کسی غیر از شما (و کاربر root) در دسترس باشد. کلمهعبور به عنوان یک لایه اضافی حفاظت در صورت مواجه شدن با این شرایط عمل می کند.
کلمهعبور یک افزونه اختیاری است و باید آن را هر بار که از این کلید استفاده می کنید وارد کنید. توصیه می کنیم از کلمهعبور استفاده کنید، اما اگر نمی خواهید می توانید به راحتی ENTER را فشار دهید تا این اعلان را کنار بگذارد.
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=++. |
+-----------------+
شما یک کلید عمومی و خصوصی دارید که می توانید برای authenticate از آن استفاده کنید. گام بعدی این است که کلید عمومی را در سرور خود قرار دهید تا بتوانید از SSH key برای ورود استفاده کنید.
چگونه کلید عمومی را در سرور خود کپی کنیم؟
روش مورد استفاده شما به ابزارهایی که در دسترس دارید بستگی دارد. روش های زیر نتیجهی یکسان را دارند. ساده ترین و اتوماتیک ترین، روش اول است و روش های بعدی نیاز به مراحل دستی بیشتری دارند.
کپی کردن کلید عمومی با استفاده از SSH-Copy-ID
ساده ترین راه برای کپی کردن کلید عمومی شما به یک سرور موجود، استفاده از یک ابزار به نام ssh-copy-id است. به دلیل سادگی آن، این روش توصیه می شود.
ابزار ssh copy-id در بسته های OpenSSH در بسیاری از توزیع ها موجود است، بنابراین شما می توانید آن را در سیستم خود در دسترس داشته باشید. برای کار، شما باید دسترسی SSH مبتنی بر رمز ورود به سرور خود داشته باشید.
برای استفاده از این ابزار، دستور زیر را وارد نمایید :
ssh-copy-id username@remote_host
ممکن است یک پیام مانند این را ببینید:
The authenticity of host '111.111.111.111 (111.111.111.111)' 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 اسکن می کند که قبلا ایجاد کردیم. هنگامی که کلید را پیدا کند، به شما برای رمز عبور حساب کاربری ریموت پاسخ می دهد:
/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@111.111.111.111's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@111.111.111.111'"
and check to make sure that only the key(s) you wanted were added.
در این مرحله، کلید id_rsa.pub شما به حساب ریموت آپلود شده است.
کپی کردن کلید عمومی با استفاده از SSH
اگر ssh copy-id در دسترس نیست ولی دسترسی SSH مبتنی بر رمز عبور را بر روی یک حساب کاربری در سرور خود دارید، می توانید کلیدهای خود را با استفاده از SSH آپلود کنید.
من از نماد redirect >> برای اضافه کردن محتوا به جای رونویسی آن استفاده خواهیم کرد.
دستور کامل مانند این خواهد بود:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
The authenticity of host '111.111.111.111 (111.111.111.111)' 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 را فشار دهید. بعد از آن از شما میخواهد گذرواژهی حساب کاربری که میخواهید به آن متصل شوید را وارد نمایید:
username@111.111.11.111'spassword:
پس از ورود با گذرواژه خود، محتوای کلید id_rsa.pub شما به انتهای فایل authorized_keys از حساب کاربری کاربر ریموت کپی می شود.
کپی کلید عمومی به صورت دستی
اگر شما دسترسی SSH مبتنی بر رمز عبور را در دسترس نداشته باشید، باید فرایند فوق را به صورت دستی انجام دهید.
محتوای فایل id_rsa.pub شما باید به فایل در authorized_keys در دستگاه ریموت اضافه شود.
برای نمایش محتویات کلید id_rsa.pub خود، این را به کامپیوتر محلی خود وارد کنید:
cat ~/.ssh/id_rsa.pub
محتوای کلیدی را مشاهده خواهید کرد که ممکن است چیزی شبیه به این باشد:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== nix@sadeghkhademi.com
با استفاده از هر شیوه ای که در دسترس دارید، به سرور ریموت خود وصل شوید.
پس از دسترسی به حساب کاربری خود در سرور ریموت، باید مطمئن شوید که دایرکتوری 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 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
با استفاده از کلیدهای SSH به سرور خود لاگین کنید
اگر قبلا یکی از روشهای فوق را تکمیل کرده باشید، باید بتوانید بدون داشتن رمز عبور حساب کاربری سرور ریموت وارد آن سیستم شوید.
ssh username@remote_host
گر این اولین بار است که به این میزبان وصل می شوید (اگر از آخرین روش فوق استفاده کردید)، ممکن است چیزی شبیه به این را ببینید:
The authenticity of host '111.111.111.111 (111.111.111.111)' 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 را فشار دهید.
اگر شما کلمهعبور را برای کلید خصوصی خود ارائه نکردید، بلافاصله وارد سیستم می شوید. اگر یک کلمه عبور برای کلید خصوصی ایجاد کردید، لازم است که آن را وارد کنید.
اگر این مطلب را دوست داشتید آن را ❤️ کنید و به دوستان خود معرفی کنید. باعث خوشحالی خواهد بود که نظر و تجربه خود را در قسمت نظرات به اشتراک بگذارید.
مطلبی دیگر از این انتشارات
بهترین ضبط کننده های دسکتاپ برای اوبونتو
مطلبی دیگر از این انتشارات
بهترین جایگزین برای لینوکس RedHat
مطلبی دیگر از این انتشارات
چرا بهتر است کودکان با لینوکس کار کنند؟