SSH چیست؟ + نحوه استفاده از SSH برای اتصال به سرور مجازی (VPS)
۱۸ دی ۱۴۰۳
یکی از ابزارهای ضروری یک مدیر سیستم، SSH است. SSH یا Secure Shell (به فارسی: پوسته امن)، پروتکلی است که برای ورود امن به سیستمهای از راه دور (سرورهای مجازی ریموت)، استفاده میشود. این روش، رایجترین راه برای دسترسی به سرورهای لینوکسِ ریموت، است.
در ادامه، بخوانید:
- آشنایی با Syntax پایه
- SSH چگونه کار میکند؟
- نحوه پیکربندی SSH
- نحوه دسترسی به SSH با Keyها
- گزینههای اتصال به سرورمجازی
- نتیجهگیری
آشنایی با Syntax پایه
برای اتصال به یک سرور مجازی از راه دور با استفاده از SSH، از دستور ssh
استفاده میکنیم. اگر که کاربر ویندوز هستید؛ باید OpenSSH را نصب کنید تا بتوانید از طریق ترمینال با دستور ssh
کار کنید. اگر که کار در PowerShell را ترجیح میدهید؛ طبق مستندات مایکروسافت عمل کنید تا OpenSSH را به PowerShell اضافه کنید. همچنین، اگر که میخواهید یک محیط کامل Linux در دسترس داشته باشید؛ میتوانید WSL (زیرسیستم ویندوز برای Linux) را راهاندازی کنید که به صورت پیشفرض، شامل ssh
خواهد بود. به عنوان گزینهای سبکتر حتی، میتوانید Git را نصب کنید که یک ترمینال bash ارائه میدهد و شامل دستور ssh
است. هر کدام از این گزینهها پشتیبانی خوبی دارند و انتخاب آنها، وابسته به تصمیم شما است.
اگر از Mac یا Linux استفاده میکنید؛ دستور ssh
به صورت پیشفرض در ترمینال شما، وجود دارد.
سادهترین فرم دستور SSH، به شکل زیر است:
ssh remote_host
در مثال فوق، remote_hos
t میتوانید آدرس IP و یا نام دامنهای باشد که قصد دارید به آن متصل شوید. این دستور فرض میکند که نام کاربری شما در سرور مجازی با نام کاربری شما در سیستم عامل localتان، یکسان است؛ در صورتی که نام کاربری شما در سرور مجازی متفاوت است، میتوانید با استفاده از Syntax زیر، آن را مشخص کنید:
ssh remote_username@remote_host
در دستور فوق، بایستی به جای عبارات remote_host
و remote_username
، نام دامنه و نام کاربری سرور مجازی خود را، وارد کنید.
پس از اتصال به سرور، ممکن است از شما خواسته شود تا با ارائه یک رمز عبور، هویت خود را تایید کنید؛ در ادامه، نحوه تولید کلیدها برای ستفاده به جای رمز عبور را بررسی خواهیم کرد. برای خروج از ssh ریموت و بازگشت به shell محلی (local)، میتوانید از دستور زیر استفاده کنید:
exit
همچنین بخوانید: سرور ابری چیست؟
SSH چگونه کار میکند؟
SSH با اتصال یک برنامه کلاینت به یک سرور ssh، که sshd
نامیده میشود، کار میکند. در بخش قبلی، ssh
یک برنامه کلاینت بود و فرض کردیم سرور sshای که روی remote_host
بود؛ از قبل در حال اجرا است.
تقریباً در همه محیطهای لینوکس، سرور sshd
باید به صورت خودکار، شروع به کار کند. اگر که این سرور مجازی به هر دلیلی، فعال نباشد، شاید نیاز باشد موقتاً از طریق یک کنسول مبتنی بر وب به سرور خود دسترسی پیدا کنید.
فرایند لازم برای شروع یک سرور ssh به توزیع لینوکسی که استفاده میکنید، بستگی دارد. به عنوان مثال، در Ubuntu، شما میتوانید یک سرور ssh را با اجرای دستور زیر، راهاندازی کنید:
sudo systemctl start ssh
دستور فوق یک sshd سرور برای شما راهاندازی میکند که میتوانید با دسترسی ریموت، وارد آن شوید.
نحوه پیکربندی SSH
وقتی تنظیمات SSH را تغییر میدهید؛ در واقع در حال تغییر تنظیمات سرور sshd
خود هستید. در Ubuntu، فایل پیکربندی اصلی sshd
در مسیر زیر قرار دارد:
/etc/ssh/sshd_config
قبل از ویرایش این فایل، بهتر است که یک فایل پشتیبان از آن تهیه کنید:
sudo cp /etc/ssh/sshd_config{,.bak}
اکنون، کافیست تا فایل پیکربندی را با استفاده از nano
یا ویرایشگر متن موردعلاقهتان، باز کنید:
sudo nano /etc/ssh/sshd_config
شاید بهتر باشد که اکثر گزینههای موجود در این فایل را بدون تغییر باقی بگذارید؛ با این حال، چند گزینه وجود دارد که ممکن است بخواهید آنها را بررسی کنید:
Port 22
دستور فوق، مشخص میکند که سرور sshd روی کدام پورت برای اتصالات گوش دهد. بهطور پیشفرض، این مقدار 22 است. احتمالاً بهتر است این گزینه را بدون تغییر باقی بگذارید، مگر اینکه دلایل خاصی برای تغییر آن داشته باشید. اگر قصد دارید که پورت خود را تغییر دهید، در ادامه این مقاله، نحوه اتصال به پورت جدید نیز به شما آموزش داده میشود.
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
دستور HostKey
مشخص میکند که global host keyها در کجا قرار گرفتهاند. در ادامه، به تعریف host key پرداخته خواهد شد.
SyslogFacility AUTH
LogLevel INFO
دو دستور فوق، سطح لاگگیری که باید انجام شود را، مشخص میکنند. اگر با SSH به مشکل برخوردید، افزایش میزان لاگگیری ممکن است روش خوبی برای کشف مشکل باشد.
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
پارامترهای فوق، برخی از اطلاعات مربوط به login را مشخص میکنند.
پارامتر LoginGraceTime
مشخص میکند که تا چند ثانیه اتصال را بدون ورود موفق، نگه دارد. میتواند ایده خوبی باشد که این زمان را کمی بیشتر از زمانی که معمولاً برای ورود نیاز دارید تنظیم کنید.
PermitRootLogin
تعیین میکند که آیا کاربر root، مجاز به ورود است یا خیر. در بیشتر موارد، زمانی که حساب کاربری ایجاد کردهاید و این حساب کاربری، دسترسی بالایی دارد (از طریق su یا sudo) و میتواند از طریق SSH وارد شود تا خطر دسترسی افراد به root سرور مجازیتان کاهش یابد، این مقدار باید به no تغییر کند.
strictModes یک محافظ امنیتی است که اگر در یک تلاش برای login، فایلهای احراز هویت برای همه قابل خواندن باشد، login را رد میکند. این کار باعث میشود زمانی که فایلهای پیکربندی امن نیستند، از تلاشهای login، جلوگیری شود.
X11Forwarding yes
X11DisplayOffset 10
پارامترهای فوق، قابلیتی تحت عنوان X11 Forwarding را پیکربندی میکنند. این ویژگی به شما این امکان را میدهد که در سیستم local خود، رابط گرافیکی کاربری (GUI) سرور مجازی ریموت را مشاهده کنید. این ویژگی، باید فعال باشد تا هنگام اتصال به کلاینت SSH با استفاده از فلگ X
-، به کار برود.
پس از اعمال تغییرات مدنظرتان، فایل پیکربندی را ذخیره کرده و ببندید؛ به عنوان مثال، اگر که از nano استفاده میکنید. کلیدهای ترکیبی CTRL + X
را فشار دهید. سپس وقتی از شما خواسته شد، Y
را بزنید و سپس Enter را بزنید.
در صورتی که هرگونه تنظیماتی را در /etc/ssh/sshd_config
تغییر دادهاید، مطمئن شوید که سرور sshd
خود را برای اعمال تغییرات، با اجرای دستور زیر، مجدداً بارگذاری کنید:
sudo systemctl reload ssh
شما باید تغییرات خود را بهطور کامل تست کنید تا اطمینان حاصل کنید همانطور که انتظار دارید عمل میکنند. بهتر است که چند ترمینال باز داشته باشید تا در حین اعمال تغییرات، بتوانید در صورت لزوم، پیکربندی را به حالت اولیه خودش، بازگردانید، بدون اینکه خودتان قفل شوید.
نحوه دسترسی به SSH با Keyها
توانایی login به یک سرور مجازی ریموت، از طریق رمزعبور، مفید است؛ اما تنظیم احراز هویت مبتنی بر key، سریعتر و امنتر است
احراز هویت مبتنی بر کلید (Key-Based) چگونه کار میکند؟
احراز هویت key-based با ایجاد یک جفت key کار میکند: یک کلید خصوصی (private key) و یک کلید عمومی (public key). کلید خصوصی روی دستگاه کلاینت قرار دارد و ایمن و مخفی نگه داشته میشود. کلید عمومی را میتوانید روی هر سروری که میخواهید به آن دسترسی پیدا کنید، قرار دهید.
زمانی که شما تلاش میکنید با استفاده از جفت کلید به سرور مجازی ریموت متصل شوید، سرور از کلید عمومی استفاده میکند تا یک پیام به کامپیوتر کلاینت ارسال کند که این پیام، فقط با کلید خصوصی قابل خواندن است. سپس کامپیوترِ کلاینت، پاسخ مناسب را به سرور ارسال میکند که به سرور میگوید کلاینت معتبر است. این فرایند بهطور خودکار و پس از پیکربندی کلیدهایتان، انجام میشود.
نحوه ایجاد SSH Keys
SSH Keyها باید در کامپیوتری ایجاد شوند که قصد دارید از طریق آن به سرور مجازی ریموت خود، متصل شوید. این کامیپوتر معمولاً سیستم local خودتان است و تنها کافیست تا دستور زیر را در ترمینال، اجرا کنید:
ssh-keygen -t rsa
پس از اجرای دستور فوق، ممکن است از شما خواسته شود که برای خودِ فایلهای کلید نیز، یک رمز عبور تعیین کنید، اما این عمل، نسبتاً نادر است و باید از طریق درخواستها Enter را فشار دهید تا تنظیمات پیشفرض را بپذیرید. کلیدهای شما در مسیرهای زیر ایجاد خواهند شد:
~/.ssh/id_rsa.pub
~/.ssh/id_rsa
حال، با اجرای دستور زیر وارد دایرکتوری .ssh
شوید:
cd ~/.ssh
و با اجرای دستور زیر، به مجوزهای فایل، نگاه کنید:
ls -l
احتمالاً، خروجی دستور فوق، باید مشابه قطعه کد زیر باشد:
Output
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
همانطور که میبینید، فایل id_rsa
فقط برای صاحب آن قابل خواندن و نوشتن است. این به حفظ محرمانگی آن کمک میکند. با این حال، فایل id_rsa.pub
قابل اشتراکگذاری است و مجوزهای مناسبی برای این کار دارد.
نحوه انتقال کلید عمومی به سرور
اگر در حال حاضر، به سرور مجازی خود، دسترسی مبتنی بر رمز عبور دارید، میتوانید کلید عمومی خود را با اجرای این دستور، درون سرور مجازی، کپی کنید:
ssh-copy-id remote_host
با اجرای دستور بالا، یک اتصال به سرور مجازی ایجاد میشود و پس از وارد کردن رمزعبورتان، کلید عمومی شما در فایل authorized keys
سرور، کپی میشود که به شما این امکان را میدهد دفعه بعد بدون نیاز به رمز عبور، وارد سرور مجازی خود شوید.
گزینههای اتصال به سرورمجازی
هنگام اتصال از طریق SSH
، چندین فلگ اختیاری وجود دارد که میتوانید از آنها استفاده کنید. برخی از این فلگها ممکن است برای هماهنگی با تنظیمات پیکربندی sshd
، ضروری باشند. برای مثال، اگر شماره پورت را در پیکربندی sshd
تغییر دادهاید، باید آن پورت را در سمت کلاینت با وارد کردن دستور زیر هماهنگ کنید:
ssh -p port_number remote_host
تغییر پورت SSH میتواند یک روش منطقی برای تأمین امنیت باشد. اگر اتصالات به سرور را با پیکربندی عمومی پیشفرض در پورت 22 مجاز کنید و احراز هویت مبتنی بر رمز عبور فعال باشد، احتمالاً مورد حمله قرار خواهید گرفت. استفاده از احراز هویت مبتنی بر کلید و اجرای SSH روی یک پورت غیراستاندارد، پیچیدهترین راهحل امنیتی نیست که میتوانید به کار ببرید، اما این اقدامات میتوانند میزان حملات را به حداقل برسانند.
اگر فقط میخواهید یک دستور واحد را روی سرور مجازی ریموت اجرا کنید، میتوانید آن را بعد از نام میزبان مشخص کنید:
ssh remote_host command_to_run
با اجرای دستور فوق، شما به سرور مجازی ریموت متصل میشوید، احراز هویت انجام میشود و دستور، اجرا خواهد شد.
همانطور که قبلاً گفته شد، اگر قابلیت X11 Forwarding روی هر دو کامپیوتر فعال باشد، میتوانید با وارد کردن دستور زیر به این قابلیت دسترسی پیدا کنید:
ssh -X remote_host
در صورتی که ابزارهای مناسب روی کامپیوتر شما نصب شده باشند، برنامههای GUI که روی سیستم راه دور استفاده میکنید، اکنون صفحه خود را روی سیستم local شما باز خواهند کرد.
غیرفعال کردن احراز هویت مبتنی بر رمز عبور
اگر که SSH Keyها را از قبل ایجاد کردهاید، اکنون میتوانید با غیرفعال کردن احراز هویت password-only، امنیت سرور خود را افزایش دهید. بهجز کنسول، تنها راه ورود به سرور شما از طریق کلید خصوصی خواهد بود که با کلید عمومی نصبشده روی سرور جفت شده است.
هشدار: قبل از ادامه این مرحله، مطمئن شوید که یک کلید عمومی روی سرور خود نصب کردهاید. در غیر این صورت، از دسترسی به سرور قفل خواهید شد!
بهعنوان root یا کاربر با مجوزهای sudo، فایل پیکربندی sshd
را باز کنید:
sudo nano /etc/ssh/sshd_config
خطی که شامل عبارت Password Authentication است را پیدا کنید و آن را با حذف # در ابتدای خط از حالت کامنت خارج کنید. سپس میتوانید مقدار آن را به no تغییر دهید:
PasswordAuthentication no
دو پارامتر دیگر که نیازی به تغییر ندارند عبارتند از PubkeyAuthentication و ChallengeResponseAuthentication. این پارامترها بهطور پیشفرض تنظیم شدهاند و باید به صورت زیر باشند (به شرطی که قبلاً آنها را تغییر نداده باشید):
PubkeyAuthentication yes
ChallengeResponseAuthentication no
پس از اعمال تغییرات، فایل را ذخیره کرده و ببندید. سپس، میتوانید SSH daemon را مجدداً بارگذاری کنید:
sudo systemctl reload ssh
اکنون احراز هویت با رمز عبور باید غیرفعال شده باشد و سرور شما تنها از طریق احراز هویت مبتنی بر کلید، قابل دسترس خواهد بود.
نتیجهگیری
یادگیری نحوه کار با SSH به شدت به نفع شما در زمینه رایانش ابری خواهد بود. با استفاده از گزینههای مختلف، شما قابلیتهای پیشرفتهتری را کشف خواهید کرد که میتواند توسعه نرمافزار شما را راحتتر کند. SSH به دلیل امنیت، سبک بودن و مفید بودن، همچنان در موقعیتهای مختلف، محبوب باقی مانده است.
با استفاده از سرویس IaaS لیارا، میتوانید سرور مجازی قدرتمند خود را راهاندازی کرده و در مسیر توسعه برنامههای خود با سرعت و کارایی بالا پیشرفت کنید. این سرویس ابری به شما امکان میدهد تا بدون نگرانی از زیرساخت، به راحتی و با انعطافپذیری بالا پروژههای خود را توسعه دهید.