کار با سرور، کلاینت و کلیدهای SSH
بهروزرسانی: ۲۷ فروردین ۱۴۰۳
ویژه انتشار در وبسایت دیدگاه
مقدمه
SSH یا Secure Shell یک پروتکل امن برای اتصال از راه دور به سرورهای لینوکسی است. این پروتکل امکان اجرای دستورات، مدیریت سرویسها و پیکربندی سیستم را از طریق یک کانال رمزنگاریشده فراهم میکند.
در این راهنمای جامع از دیدگاه، با مفاهیم اصلی SSH، روشهای اتصال، احراز هویت با کلید، تنظیمات سمت سرور و کلاینت، تونلسازی و تکنیکهای حرفهای کار با SSH آشنا میشوید. این محتوا بهصورت مرجع سریع و کاربردی تهیه شده است.
SSH چیست و چگونه کار میکند؟
SSH یک اتصال امن مبتنی بر مدل Client–Server است.
در سمت سرور، سرویسی به نام SSH Daemon (sshd) روی یک پورت مشخص (بهصورت پیشفرض 22) در حال اجراست و منتظر درخواست اتصال میماند.
در سمت کاربر، SSH Client وظیفه برقراری ارتباط، ارسال اطلاعات احراز هویت و اجرای دستورات را بر عهده دارد. تمام دادهها در طول این ارتباط بهصورت رمزنگاریشده منتقل میشوند.
پس از اتصال موفق، کاربر وارد یک محیط Shell متنی روی سرور میشود و تمام دستورات واردشده در ترمینال محلی، روی سرور اجرا خواهند شد.
روشهای احراز هویت در SSH
SSH بهطور کلی از دو روش برای احراز هویت استفاده میکند:
1. احراز هویت با رمز عبور
این روش ساده اما ناامنتر است. اگرچه ارتباط رمزنگاریشده است، اما حسابهایی که با رمز عبور قابل ورود هستند، هدف اصلی حملات Brute Force و رباتها محسوب میشوند.
2. احراز هویت با کلید SSH (روش پیشنهادی)
در این روش از یک جفت کلید رمزنگاریشده شامل کلید عمومی و کلید خصوصی استفاده میشود.
-
کلید عمومی روی سرور ذخیره میشود
-
کلید خصوصی فقط روی سیستم کاربر باقی میماند
-
بدون داشتن کلید خصوصی، ورود غیرممکن است
این روش بهمراتب امنتر و استاندارد توصیهشده برای مدیریت سرورهاست.
ساخت کلید SSH
برای ایجاد یک جفت کلید RSA روی سیستم محلی: برای سرورهای CentOS میتوانید مراحل اختصاصی را در راهاندازی SSH Key در CentOS 8 ببینید.
ssh-keygenکلیدها بهصورت پیشفرض در مسیر زیر ذخیره میشوند:
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
میتوانید برای کلید خود Passphrase تعیین کنید تا حتی در صورت دسترسی به فایل کلید خصوصی، استفاده از آن بدون عبارت عبور ممکن نباشد.
ایجاد کلید با امنیت بالاتر (4096 بیت)
ssh-keygen -b 4096تغییر یا حذف Passphrase کلید خصوصی
ssh-keygen -pبرای این کار دانستن Passphrase فعلی الزامی است. در صورت فراموشی، تنها راه، ساخت کلید جدید خواهد بود.
مشاهده Fingerprint کلید SSH
ssh-keygen -lFingerprint برای شناسایی یکتای کلیدها و بررسی صحت آنها استفاده میشود.
انتقال کلید عمومی به سرور
روش پیشنهادی: ssh-copy-id
ssh-copy-id username@server_ipپس از وارد کردن رمز عبور، کلید عمومی شما به فایل زیر اضافه میشود:
~/.ssh/authorized_keysانتقال بدون ssh-copy-id
cat ~/.ssh/id_rsa.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"انتقال دستی کلید
-
نمایش کلید عمومی:
cat ~/.ssh/id_rsa.pub-
ایجاد پوشه SSH روی سرور:
mkdir -p ~/.ssh-
افزودن کلید به authorized_keys:
echo "public_key_string" >> ~/.ssh/authorized_keysاتصال به سرور با SSH
ssh username@server_ipاجرای یک دستور بدون ورود به شل:
ssh username@server_ip commandاتصال به پورت غیر پیشفرض:
ssh -p 4444 username@server_ipاستفاده از فایل تنظیمات SSH در کلاینت
nano ~/.ssh/configنمونه تنظیم:
Host myserver
HostName example.com
Port 4444
User adminاتصال ساده:
ssh myserverاستفاده از SSH Agent
برای جلوگیری از وارد کردن مکرر Passphrase:
eval $(ssh-agent)
ssh-addفوروارد کردن کلید SSH (Agent Forwarding)
ssh -A username@server_ipاین قابلیت اجازه میدهد از داخل یک سرور به سرور دیگر متصل شوید، بدون کپی کلید خصوصی.
تنظیمات امنیتی سمت سرور
غیرفعالسازی ورود با رمز عبور
در فایل:
/etc/ssh/sshd_configPasswordAuthentication noسپس:
systemctl restart sshdتغییر پورت SSH
Port 4444محدود کردن کاربران مجاز
AllowUsers user1 user2یا مبتنی بر گروه:
AllowGroups sshmembersغیرفعالسازی ورود root
PermitRootLogin noتونلسازی SSH
برای بررسی کاملتر و مثالهای عملی بیشتر در این زمینه، میتوانید راهنمای اختصاصی SSH Port Forwarding (تونلسازی SSH) را مطالعه کنید.
Local Tunnel
ssh -L 8888:localhost:80 user@serverRemote Tunnel
ssh -R 8888:localhost:80 user@serverDynamic Tunnel (SOCKS Proxy)
ssh -D 7777 user@serverکنترل اتصال با Escape Code
قطع اتصال گیر کرده:
[ENTER]
~.فرستادن SSH به پسزمینه:
[ENTER]
~[CTRL+Z]جمعبندی
SSH یکی از حیاتیترین ابزارهای مدیریت سرور است. استفاده صحیح از کلیدها، تنظیمات امنیتی مناسب و قابلیتهایی مانند تونلسازی و Agent Forwarding میتواند امنیت و بهرهوری شما را به شکل چشمگیری افزایش دهد.
این راهنما توسط دیدگاه برای مدیران سیستم، توسعهدهندگان و کاربران حرفهای لینوکس تهیه شده است.
