دقیقه مطالعه

آموزش ایجاد کلید ssh key در لینوکس

آموزش ایجاد کلید ssh key در لینوکس
20 - آبان - 1402

با این آموزش، می‌توانیم کلیدهای عمومی و خصوصی 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

روش و مراحل ساخت کلید

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 در ویندوز

بعد از اینکه openssh فعال شد، مجدد وارد محیط کامندلاین ویندوز می شویم و دستور ssh-keygen  را وارد می‌کنیم.

این بار پیام دیگری مطابق تصویر زیر نمایش داده می‌شود.

/ساخته شدن ssh key در ویندوز

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  را به نشانه تایید می زنیم و مجدد پیام نمایش داده می شود که این فایل جایگزین فایل قبلی می شود  که تایید می کنیم

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

تنظیمات putty برای ssh key

در تنظیمات سمت چپ پاتی به منوی زیر می رویم  :

category/conection/SSH/Auth/credentials

بر روی دکمه browse کلیک می کنیم و محل ذخیره فایل کلید خصوصی را در نرم افزار putty  در فیلد روبرو دکمه قرار می دهیم و به قسمت session برگشته و تغییرات را ذخیره می کنیم

لاگین خودکار به ssh

بر روی دکمه save  کلیک می کنیم تا تغییرات انجام شده و کلید خصوصی اضافه شده در پروفایل تنظیمات ( به طور مثال pws  در مثال بالا) ذخیره شود.

1- بعد از ذخیره کردن، برای لاگین کافی است روی گزینه pws  رفته و دکمه load  کلیک کنیم و روی open بزنیم تا بدون پسورد به محیط ssh لاگین کنیم.

2- حتما توجه داشته باشید که یوزر سرور  به همراه علامت @ قبل از آی پی باید اضافه شده باشد در غیر اینصورت، چون یوزر مشخص نشده در زمان لاگین باید یوزر را وارد کنیم.

3- با کلیک بر روی open نرم افزار putty  بدون نیاز به یوزرنیم و پسورد به سرور لاگین می‌کند و آماده واردکردن دستورات ssh می‌شود.

کامنت کلمه کلیدی کلید عمومی لاگین به 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 در سرور، هر گونه سوال و یا ابهامی وجود داشت می‌توانید تیکت بزنید (ارسال تیکت)
یا اگر تجربه‌ای در این زمینه داشتید، در بخش نظرات مطرح بفرمایید.

5/5 - (6 امتیاز)
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

[bws_google_captcha]