با این آموزش، میتوانیم کلیدهای عمومی و خصوصی ssh key بسازیم و با کلیدهای ساخته شده، بدون وارد کردن یوزرنیم و پسورد، به محیط ssh لاگین کنیم.
فهرست عناوین:
با کلیک بر روی هر عنوان، به همان قسمت از مقاله منتقل می شوید
معرفی ssh key در سرور
مزایای استفاده از ssh keys
روش و مراحل ssh keys
نمایش کلیدهای دیگر بر روی کلاینت لینوکس
نصب openssh برای استفاده از ssh
دستور ایجاد کلید به همراه تعیین نام و تعریف کامنت برای هر کلید
انتقال کلید عمومی به سرور در لینوکس
ایجاد کلید ssh در ویندوز (ویندوز 10 و 11)
ایجاد کلید ssh در ویندوز با استفاده از putty
خطای Server refused our key در زمان استفاده از putty
معرفی ssh keys
برای اتصال ssh در سرورها، نیاز به ورود به یوزرنیم و پسورد میباشد که در هر بار ورود به سرور این کار باید انجام شود.
این کار علاوه بر اینکه زمانبر هست، اگر تعداد سرورها زیاد باشد، مشکلساز میشود.
از طرف دیگر، اگر سرور به اینترنت متصل باشد، همیشه حملات بروت فورس بر روی سرور وجود دارد و امنیت سرور همیشه در خطر میباشد.
در برابر روش passwordbase authentication، روش keybase authentication وجود دارد که اتصال به ssh از طریق کلید انجام میشود.
در این روش یک جفت کلید در سمت کلاینت ساخته می شود که با هم pair یا جفت هستند.
کلید خصوصی در سمت کلاینت باقی میماند و کلید عمومی بر روی سرور قرار میگیرد.
در زمان اتصال کلاینت به سرور، این دو کلید با هم مطابقت داده میشوند و در صورت مطابقت موفق، دسترسی به ssh مجاز و فعال میشود.
مزایای استفاده از ssh keys
از مزایای این روش این است که با یک بار لاگین و احراز، دیگر نیاز به وارد کردن یوزر و پسورد نیست.
همینطور میتوان لاگین با پسورد را به طور کامل غیرفعال کرد که امنیت سرور را افزایش میدهد.
با غیرفعال کردن لاگین با پسورد، جلوی حملات brute force گرفته میشود.
همینطور امکان استفاده از ابرازها و اسکریپت های اتوماسیون مانند Ansible فراهم میشود که بدون نیاز به یوزرنیم و پسورد، امکان بروزرسانیها و دپلویها بر روی سرور به صورت زمان بندی شده فراهم میشود.
روش و مراحل ساخت کلید
ssh-keygen نام ابزاری است که در سیستم کلاینت، کلیدها توسط آن ساخته میشود.
ssh-keygen
در سیستمهای بر پایه یونیکس، مانند لینوکس و مک، در ترمینال با دستور زیر کلیدها ایجاد میشوند.
ssh-keygen -t rsa
ssh-keygen -t rsa b 4096
آپشن t- نوع کلیدی که ساخته میشود را مشخص میکند که به صورت پیش فرض RSA میباشد.
با آپشن b- بیت سایز کلید، تعیین میشود که میتواند 1024, 2048 , 4096 باشد.
در سیستم عامل ویندوز ممکن است نوع تنظیمات و تگهای دستور متفاوت باشد و دقیقا همان امکانات و تنظیمات که در لینوکس قابل انجام است، در ویندوز اجرا نشود و خطای Too many arguments بدهد.
محل ذخیره شدن کلیدها، در فولدری به نام ssh. در روت اصلی میباشد.
در ویندوز این کلیدها در فولدر کاربر ویندوز، در درایور سیستم عامل، عموما درایو C ذخیره میشود و با مراجعه به آدرس c:\users\pws میتوانید دو کلید عمومی و خصوصی ساخته شده را مشاهده کنید.
* به جای pws نام کاربری ویندوز شما جایگزین میشود.
نمایش کلیدهای دیگر بر روی کلاینت لینوکس
اگر بخواهیم مشخص کنیم روی سیستم کلاینت، چه تعداد کلید وجود دارد، این دستور را در ترمینال اجرا می کنیم.
ls -l ~/.ss
total 0
اگر مقدار total 0 برگردانده شود، یعنی کلیدی بر روی سیستم وجود ندارد.
نصب openssh برای استفاده از ssh
با زدن دستور زیر، میتوانیم ورژن openssh را مشاهده کنیم.
ssh -V
* در دستور بالا ،حرف V بزرگ میباشد.
در سیستم عامل ابونتو، به صورت پیش فرض openssh نصب نیست و باید نصب شود.
در صورتی که ssh بر روی سرور نصب نباشد با دستورات زیر در سرور، نصب میشود:
در اوبونتو با دستور زیر قابل نصب میباشد.
sudo apt install openssh-server
در آلمالینوکس از دستور زیر برای نصب openssh استفاده میکنیم. (از قبل نصب می باشد، با این حال در صورت نیاز بادستور زیر میتوان نصب کرد.)
sudo dnf install openssh-server
برای بررسی نصب ssh بر روی سرور، دستور زیر را وارد میکنیم.
sudo systemctl status sshd
برای استارت کردن ssh در صورتی که فعال نبود، دستور زیر را وارد میکنیم.
sudo systemctl start sshd
برای ران شدن ssh در زمان بوت این دستور را وارد میکنیم.
sudo systemctl enable sshd
ssh username@192.168.170.26
username یوزر سرور است
192.168.170.26 آی پی سرور است
همانطور که گفته شد، کلید عمومی و خصوصی در سمت کلاینت ایجاد میشود.
کلید عمومی بر روی سرور قرار میگیرد و کلید خصوصی، در سیستم کلاینت باقی میماند.
دستور ایجاد کلید به همراه تعیین نام و تعریف کامنت برای هر کلید
ssh-keygen -t ed25519 -f ~/.ssh/[filename] -C "[useful comment]"
-t type like rsa,dsa,ecdsa, نوع الگوریتم برای کد کردن هست
-f ~/.ssh/[filename]
محل ذخیره شدن کلیدها و نام آنها را مشخص میکند
اگر سرورهای متعدی داشته باشیم، بهتر است که نام کلید هایی که ایجاد می کنیم برای هر سرور مشخص باشد تا در صورت بروز مشکل قابل بررسی باشد.
-C "[useful comment]"
انتقال کلید عمومی به سرور
ssh-copy-id -i .ssh/keyname.pub username@server_ip
keyname.pub نام فایل کلید عمومی میباشد
username نام یوزر سرور میباشد
server_ip به جای آن باید آی پی سرور وارد شود
با زدن دستور بالا، سرور از ما درخواست پسورد میکند و بعد از وارد کردن پسورد، پیامی مبنی بر اضافه شدن کلید بر روی سرور نمایش داده میشود.
number of key(s) added : 1
بعد از وارد کردن دستور، سیستم درخواست ست کردن passphares میکند که اختیاری میباشد، که پیشنهاد میشود حتما وارد شود و در جای دیگر ذخیره شود.
در زمان وارد کردن passphares، چیزی بر روی صفحه نمایش داده نمیشود.
بعد از ایجاد کلیدها، با زدن دستور ls .ssh لیست کلیدهای ایجاد شده نمایش داده میشود.
passphares فقط یک بار در زمان اتصال ssh نیاز است که وارد شود.
در دفعات بعد میتوانیم با دستور زیر و بدون وارد کردن یوزرنیم و پسورد وارد محیط ssh شویم.
بعد از انجام تغیرات، اگر سیستم کلید خصوصی نداشته باشد و قصد اتصال ssh به سرور داشته باشد، خطای premission denide دریافت میکند.
ایجاد کلید ssh در ویندوز(ویندوز 10 و 11)
برای این کار، ابتدا وارد محیط کامند لاین ویندوز میشویم.
کلید win + R را میزنیم، در کادر باز شده عبارت cmd را تایپ می کنیم و روی ok کلیک میکنیم.
برای ایجاد کلید ها در محیط کامند لاین دستور ssh-keygen را اجرا می کنیم .
در صورتی که openssh در ویندوز فعال نبود، برای فعال کردن روی دکمه start ویندوز کلیک می کنیم.
عبارت optional futures را تایپ می کنیم تا این منو برای ما نمایش داده شود.
با کلیک بر روی آن، صفحه جدیدی باز می شود که در اولین گزینه Add an optional future دکمه ای به نام view futures وجود دارد روی آن کلیک می کنیم و
از لیست نمایش داده شده ، openssh را انتخاب می کنیم تا نصب شود.
بعد از اینکه openssh فعال شد، مجدد وارد محیط کامندلاین ویندوز می شویم و دستور ssh-keygen را وارد میکنیم.
این بار پیام دیگری مطابق تصویر زیر نمایش داده میشود.
1- مسیر ذخیره شدن کلیدها مشخص شده است که به صورت پیش فرض، در فولدری با نام کاربری ویندوز میباشد. (در مثال بالا کدها در فولدر C:\Users\karimeh ایجاد میشوند.
2و3- در این قسمت میتوانیم برای کلیدهای خود رمز تعریف کنیم که حتما باید در جایی ذخیره و یادداشت کنیم. (این مورد اختیاری هست و می تواند خالی گذاشت)
3- کلید خصوصی ما هست
4- کلید عمومی ایجاد شده میباشد که دارای پسوند pub هست.
کلید خصوصی، پسوند خاصی ندارد و با عبارت زیر شروع میشود.
-----BEGIN OPENSSH PRIVATE KEY-----
کلبد عمومی پسوند pub دارد که مخفف public به معنی عمومی است و با عبارت ssh-rsa شروع می شود.
ssh-rsa
ایجاد کلید ssh در ویندوز با استفاده از putty
در لحظه نگارش این مقاله، جدیدترین نسخه putty، نسخه 0.79 می باشد(دانلود فایل نصبی برای ویندوز 64 بیتی)
برای دانلود برای سایر سیستم عامل ها و یا سایر ورژن ها، به صفحه وب سایت رسمی putty مراحعه بفرمایید.
در زمان نصب putty، اپلیکیشن PuTTYgen هم نصب میشود. که وظیفه آن تولید جفت کلید عمومی و خصوصی می باشد.
1- در این قسمت می توانیم تعیین کنیم که کلید ساخته شود و یا اینکه کلیدی که قبلا ساخته ایم را با کلیک بر روی دکمه load ، بارگزاری کنیم.
در این پست ما قصد ایجاد کلید جدید را داریم .
2- در قسمت Parameters ما می توانیم نوع کلید خود را مشخص کتیم که به صورت پیش فرض بر روی RSA تنظیم می باشد.
و در کادر مقدار بیت کلید هم به صورت پیش فرض 2048 نمایش داده می شود که کلید ساخته شده 2048 بیتی می باشدو نیاز به تغییر نیست.
3- با کلیک بر روی دکمه Generate ، صفحه جدید برای ایجاد کلید باز می شود .
در این صفحه از ما خواسته می شود که نشانگر ماوس را بر روی صفحه حرکت دهیم تا یک رشته تصادفی ساخته شود و بعد از انجام این کار، کلید ما ساخته خواهد شد.
1- کلید عمومی RSA (در روی کلاینت باقی می ماند). این کلید را کپی می کنیم و در یک ادیتور متن مثل نوت پد و یا ++notepad ذخیره می کنیم.
2- key fingerprint مربوط به کلید ما می باشد.
3- در این قسمت می توانیم یک کامنت برای کلید ایجاد شده وارد کنیم . اگر چندین سرور داشته باشیم این کامنت به ما کمک می کند که تشخیص دهیم این این کلید برای کدام سرور است . بعد از هر بار لاگین این کامنت برای ما نمایش داده می شود.
4- کلید passphares اختیاری می باشد اما برای امنیت بیشتر پیشنهاد می شود این قسمت تکمیل شود. در زمان لاگین یک بار از ما پرسیده می شود و نیاز است که وارد شود.
5- با کلیک بر روی هر کدام از این دکمه ها ، فایل های کلید دانلود می شوند.
برای لاگین به سرور با استفاده از putty، بعد از لاگین به سرور، با دستور
cd .ssh
به فولدر ssh. می رویم.
دستور مقابل را برای ویرایش فایل authorized_keys وارد می کنیم
nano authorized_keys
فایل در محیط ادیتور nano برای ما باز می شود .
کلید عمومی که در puttygen ساخته بودیم را در این فایل کپی می کنیم و ctrl+x را می زنیم. در زمان خروج از ما پرسیده می شود که فایل ذخیره شود یا خیر؟
دکمه y را به نشانه تایید می زنیم و مجدد پیام نمایش داده می شود که این فایل جایگزین فایل قبلی می شود که تایید می کنیم
در این مرحله کلید عمومی ما در فایل مخصوص در سرور اضافه شده است .
در تنظیمات سمت چپ پاتی به منوی زیر می رویم :
category/conection/SSH/Auth/credentials
بر روی دکمه browse کلیک می کنیم و محل ذخیره فایل کلید خصوصی را در نرم افزار putty در فیلد روبرو دکمه قرار می دهیم و به قسمت session برگشته و تغییرات را ذخیره می کنیم
بر روی دکمه save کلیک می کنیم تا تغییرات انجام شده و کلید خصوصی اضافه شده در پروفایل تنظیمات ( به طور مثال pws در مثال بالا) ذخیره شود.
1- بعد از ذخیره کردن، برای لاگین کافی است روی گزینه pws رفته و دکمه load کلیک کنیم و روی open بزنیم تا بدون پسورد به محیط ssh لاگین کنیم.
2- حتما توجه داشته باشید که یوزر سرور به همراه علامت @ قبل از آی پی باید اضافه شده باشد در غیر اینصورت، چون یوزر مشخص نشده در زمان لاگین باید یوزر را وارد کنیم.
3- با کلیک بر روی open نرم افزار putty بدون نیاز به یوزرنیم و پسورد به سرور لاگین میکند و آماده واردکردن دستورات ssh میشود.
کامنتی که در زمان ایجاد کلیدها ایجاد کرده بودیم در زمان لاگین برای ما نمایش داده میشود.
اقدامات لازم برای دسترسی ssh در سمت سرور
در سمت سرور نیاز است که فولدر ssh. که محل نگهداری کلیدهای عمومی است ساخته شود.
با دستورات زیر این فولدر را در فولدر روت اصلی میسازیم و دسترسی آن را روی 700 قرار میدهیم
mkdir -p ~/.ssh
chmod 700 ~/.ssh
اگر سرور ما کاربران دیگری هم داشته باشد، آنها هم باید این دستور را وارد کنند تا این فولدر در فولدر home پروفایل آنها ساخته شود.
بعد از انجام این کار، این دستور را در کلاینت اجرا میکنیم.
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
به جای یوزر نام کاربری سرور را وارد میکنیم. اگر کاربر روت باشیم کلمه root را جایگزین میکنیم.
با دستور whoami نام یوزر فعلی در سرور نمایش داده میشود.
به جای server ، آی پی سرور را وارد می کنیم .
برای مشاهده آی پی سرور دستور زیر را در ترمینال وارد می کنیم .
ip a
و یا
hostname -I
به جای id_rsa.pub
، نام کلیدی عمومی خود را وارد میکنیم.
به 3 طریق میتوان به سرور ssh زد :
با استفاده از ip
با استفاده از hostname
با استفاده domain name
زمانی که دستور ssh-cophy-id اجرا میشود و کلید به سرور منتقل شد و به سرور اضافه شد. یک فایل به نام authorized_keys ایجاد میشود که کلید عمومی ما در آن قرار میگیرد.
در صورتی که در زمان تهیه کلیدها، مقدار passphrase را وارد کرده بودیم، در هر بار لاگین به سرور باید این مقدار را وارد کنیم.
اگر این فیلد را خالی گذاشته بودیم در هر بار لاگین نیاز به وارد کردن چیزی نیست و به صورت خودکار لاگین میشود.
غیرفعال کردن لاگین با پسورد در سرور (Disable password authentication)
برای غیرفعال کردن کامل ورود با پسورد در سمت سرور، میتوانیم تغییرات زیر را انجام دهیم
sudo nano /etc/ssh/sshd_config
از حالت کامنت خارج کرده و مقدار آن را به no تغییر میدهیم
PasswordAuthentication no
sudo systemctl reload sshd
روش سریع تر برای ssh
nano .ssh/config
در فایل باز شده، مقادیر را به صورت زیر وارد و ذخیره میکنیم
Host pws_new
HostName 195.214.235.42
IdentityFile ~/.ssh/pws_new
User root
تو رفتگی در زمان وارد کردن دستورات باید رعایت شود.
بعد از ذخیره شدن دستور ،برای استفاده از دستور ssh فقط کافیست که دستور به صورت زیر تایپ شود
ssh pws_new
خطای Server refused our key در زمان استفاده از putty
ممکن است که دسترسی فایلها و فولدر درست نباشد که دستورات زیر را در خط فرمان سرور اجرا میکنیم
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
chown $USER:$USER .ssh -R
نکته دیگر این است که کلید عمومی که وارد authorized_keys میشود، باید حتما در یک لاین باشد و هیچ فاصله در ابتدا و انتهای فایل وجود نداشته باشد.
در صورتی که در فعالسازی ssh در سرور، هر گونه سوال و یا ابهامی وجود داشت میتوانید تیکت بزنید (ارسال تیکت)
یا اگر تجربهای در این زمینه داشتید، در بخش نظرات مطرح بفرمایید.