اتصال به سرور مجازی با SSH نخستین و مهم‌ترین مهارتی است که هر کاربر پس از خرید یک سرور مجازی (VPS) باید بیاموزد. پروتکل SSH یا Secure Shell به شما اجازه می‌دهد از راه دور و به شکل کاملاً رمزنگاری‌شده به خط فرمان سرور دسترسی پیدا کنید، دستورها را اجرا کنید، فایل‌ها را جابه‌جا کنید و سرویس‌ها را مدیریت نمایید. در این مقاله از رپیدو سرور، به‌صورت گام‌به‌گام و کاربردی یاد می‌گیرید که چگونه در ویندوز، لینوکس و مک به سرور خود متصل شوید، کلید SSH بسازید، امنیت اتصال را بالا ببرید و رایج‌ترین خطاها را برطرف کنید.

SSH چیست و چرا برای اتصال به سرور مجازی حیاتی است؟

SSH یک پروتکل شبکه در لایه اپلیکیشن است که ارتباط امنی میان دو دستگاه — کلاینت (کامپیوتر شما) و سرور — برقرار می‌کند. تمام داده‌هایی که میان این دو رد و بدل می‌شوند، از جمله نام کاربری، رمز عبور و خروجی دستورها، با الگوریتم‌های رمزنگاری قدرتمند رمز می‌شوند. این ویژگی SSH را جایگزین امنی برای پروتکل‌های قدیمی مانند Telnet و rlogin کرده است که اطلاعات را به‌صورت متن ساده منتقل می‌کردند.

به‌طور پیش‌فرض، سرویس SSH روی پورت ۲۲ گوش می‌دهد و از مدل کلاینت-سرور پیروی می‌کند. روی سرور، سرویسی به نام sshd (SSH Daemon) اجرا می‌شود و منتظر درخواست‌های ورودی می‌ماند. زمانی که شما اتصال به سرور مجازی با SSH را آغاز می‌کنید، کلاینت و سرور ابتدا یک فرآیند تبادل کلید (Key Exchange) انجام می‌دهند تا یک کانال رمزنگاری‌شده بسازند و سپس هویت شما احراز می‌شود.

نکته: تقریباً تمام سیستم‌عامل‌های لینوکسی و توزیع‌های سروری، سرویس SSH را به‌صورت پیش‌فرض نصب و فعال دارند؛ بنابراین بلافاصله پس از تحویل سرور می‌توانید متصل شوید.

اطلاعاتی که پیش از اتصال به آن نیاز دارید

پیش از آنکه اولین اتصال را برقرار کنید، باید چند اطلاعات پایه را در اختیار داشته باشید. این اطلاعات معمولاً پس از خرید سرور مجازی از طریق ایمیل یا پنل کاربری در اختیار شما قرار می‌گیرد:

  • آدرس IP سرور: یک عدد چهاربخشی مانند 185.51.200.10 که آدرس عمومی سرور شماست.
  • نام کاربری: در بیشتر توزیع‌های لینوکس کاربر پیش‌فرض root است، اما در برخی نصب‌ها کاربری مانند ubuntu یا admin ارائه می‌شود.
  • رمز عبور یا کلید خصوصی: بسته به روش احراز هویت، یا رمز عبور دارید یا فایل کلید خصوصی SSH.
  • پورت SSH: اگر مدیر سرور پورت پیش‌فرض را تغییر نداده باشد، همان ۲۲ است.

اتصال به سرور مجازی با SSH در لینوکس و مک

در سیستم‌عامل‌های لینوکس و macOS، کلاینت SSH به‌صورت پیش‌فرض روی سیستم نصب است و نیازی به نصب نرم‌افزار اضافه ندارید. کافی است ترمینال را باز کنید و دستور زیر را وارد نمایید:

ssh root@185.51.200.10

اگر پورت SSH سرور شما چیزی غیر از ۲۲ باشد، آن را با سوییچ -p مشخص کنید:

ssh -p 2222 root@185.51.200.10

در نخستین اتصال، پیامی درباره اصالت میزبان (host authenticity) نمایش داده می‌شود و اثر انگشت کلید سرور را از شما می‌پرسد. با تایپ yes این کلید در فایل ~/.ssh/known_hosts ذخیره می‌شود تا در اتصال‌های بعدی از حملات جعل هویت جلوگیری شود. سپس رمز عبور را وارد کنید؛ توجه داشته باشید که هنگام تایپ رمز، هیچ کاراکتری روی صفحه نمایش داده نمی‌شود و این رفتار کاملاً طبیعی است.

پس از ورود موفق، خط فرمان سرور را در اختیار خواهید داشت و می‌توانید دستورهای مدیریتی را اجرا کنید. برای مثال، برای مشاهده اطلاعات سیستم‌عامل:

cat /etc/os-release
uname -a

اتصال به سرور مجازی با SSH در ویندوز

در نسخه‌های جدید ویندوز ۱۰ و ۱۱، کلاینت OpenSSH به‌صورت داخلی وجود دارد و می‌توانید مستقیماً از PowerShell یا Command Prompt همان دستورهای لینوکسی را اجرا کنید:

ssh root@185.51.200.10

با این حال، بسیاری از کاربران ویندوز ترجیح می‌دهند از نرم‌افزار گرافیکی PuTTY استفاده کنند که سال‌هاست ابزار استاندارد این کار است. برای اتصال با PuTTY مراحل زیر را دنبال کنید:

  1. نرم‌افزار PuTTY را از سایت رسمی دانلود و اجرا کنید.
  2. در فیلد Host Name (or IP address) آدرس IP سرور را وارد کنید.
  3. در فیلد Port پورت SSH (معمولاً ۲۲) را بنویسید و مطمئن شوید نوع اتصال روی SSH است.
  4. روی دکمه Open کلیک کنید تا پنجره ترمینال باز شود.
  5. نام کاربری و سپس رمز عبور را وارد کنید.

اگر می‌خواهید از کلید خصوصی به‌جای رمز استفاده کنید، در PuTTY باید فایل کلید را با ابزار PuTTYgen به فرمت .ppk تبدیل کرده و سپس در بخش Connection > SSH > Auth آن را معرفی نمایید.

توصیه: اگر مرتب با سرورهای مختلف کار می‌کنید، پروفایل‌های اتصال را در PuTTY ذخیره (Save) کنید تا هر بار مجبور به وارد کردن دوباره اطلاعات نباشید.

ساخت و استفاده از کلید SSH برای امنیت بیشتر

احراز هویت با رمز عبور ساده است اما در برابر حملات Brute Force آسیب‌پذیر است. روش امن‌تر، استفاده از جفت‌کلید SSH است: یک کلید خصوصی که روی سیستم شما می‌ماند و یک کلید عمومی که روی سرور قرار می‌گیرد. برای ساخت جفت‌کلید در لینوکس، مک یا PowerShell ویندوز دستور زیر را اجرا کنید:

ssh-keygen -t ed25519 -C "my-laptop"

الگوریتم ed25519 امروزه امن‌ترین و سریع‌ترین گزینه است. اگر سرور قدیمی از آن پشتیبانی نکند، می‌توانید از rsa با طول ۴۰۹۶ بیت استفاده کنید:

ssh-keygen -t rsa -b 4096 -C "my-laptop"

در حین اجرا، مسیر ذخیره کلید و یک عبارت عبور (passphrase) اختیاری از شما پرسیده می‌شود. توصیه می‌شود حتماً یک passphrase قوی تعیین کنید تا حتی در صورت لو رفتن کلید خصوصی، کسی نتواند از آن استفاده کند. پس از ساخت کلید، آن را با دستور زیر روی سرور کپی کنید:

ssh-copy-id root@185.51.200.10

اگر دستور ssh-copy-id در دسترس نبود (مثلاً در برخی نسخه‌های ویندوز)، می‌توانید محتوای فایل کلید عمومی ~/.ssh/id_ed25519.pub را به‌صورت دستی به انتهای فایل ~/.ssh/authorized_keys روی سرور اضافه کنید. از این پس، اتصال بدون نیاز به رمز عبور و تنها با کلید انجام می‌شود.

سخت‌سازی و افزایش امنیت سرویس SSH

پس از اطمینان از اینکه ورود با کلید به‌درستی کار می‌کند، بهتر است چند تنظیم امنیتی روی سرور اعمال کنید. فایل پیکربندی اصلی سرویس در مسیر /etc/ssh/sshd_config قرار دارد. آن را با یک ویرایشگر متن باز کنید:

nano /etc/ssh/sshd_config

تغییرات زیر به‌شدت توصیه می‌شوند:

  • غیرفعال کردن ورود با رمز: مقدار PasswordAuthentication no را تنظیم کنید تا تنها ورود با کلید ممکن باشد.
  • محدود کردن ورود مستقیم root: با PermitRootLogin prohibit-password ورود root تنها با کلید مجاز می‌شود؛ یا با no کاملاً غیرفعال می‌گردد.
  • تغییر پورت پیش‌فرض: با تنظیم Port 2222 بخش زیادی از اسکن‌های خودکار اینترنت را دور می‌زنید.
  • محدود کردن کاربران مجاز: با AllowUsers deploy admin تنها به کاربران مشخصی اجازه ورود می‌دهید.

پس از هر تغییر، سرویس را ری‌استارت کنید تا تنظیمات اعمال شوند:

systemctl restart sshd
هشدار مهم: پیش از بستن پنجره ترمینال فعلی، حتماً در یک پنجره جدید اتصال را آزمایش کنید. اگر تنظیمی را اشتباه وارد کرده باشید و اتصال قطع شود، ممکن است دسترسی خود به سرور را از دست بدهید و مجبور شوید از کنسول پنل مدیریت وارد شوید.

انتقال فایل با SCP و SFTP

پروتکل SSH تنها برای اجرای دستور نیست؛ با ابزارهای مبتنی بر آن می‌توانید فایل‌ها را نیز به‌صورت امن جابه‌جا کنید. دستور scp برای کپی فایل میان سیستم محلی و سرور استفاده می‌شود. برای مثال، آپلود یک فایل به سرور:

scp ./backup.tar.gz root@185.51.200.10:/root/

و برای دانلود یک فایل از سرور به سیستم محلی:

scp root@185.51.200.10:/var/log/nginx/access.log ./

اگر می‌خواهید یک پوشه کامل را به‌صورت بازگشتی منتقل کنید از سوییچ -r استفاده کنید. همچنین ابزارهای گرافیکی مانند FileZilla و WinSCP امکان اتصال SFTP را با محیط کشیدن و رها کردن (drag and drop) فراهم می‌کنند که برای مدیریت فایل‌های سرور بسیار راحت است.

رفع رایج‌ترین خطاهای اتصال SSH

گاهی هنگام اتصال به سرور مجازی با SSH با خطاهایی روبه‌رو می‌شوید. در ادامه رایج‌ترین آن‌ها و راه‌حل هرکدام را بررسی می‌کنیم:

خطاعلت احتمالیراه‌حل
Connection refusedسرویس SSH خاموش است یا پورت اشتباه استپورت را بررسی و سرویس sshd را روشن کنید
Connection timed outفایروال یا مسیر شبکه مسدود استقوانین فایروال و دسترسی شبکه را بررسی کنید
Permission deniedرمز یا کلید اشتباه استنام کاربری، رمز و کلید را دوباره چک کنید
Host key verification failedکلید سرور تغییر کرده استخط مربوطه را از known_hosts حذف کنید

برای عیب‌یابی دقیق‌تر می‌توانید اتصال را در حالت پرگو (verbose) اجرا کنید تا جزئیات هر مرحله را ببینید:

ssh -v root@185.51.200.10

اگر خطای Host key verification failed گرفتید و مطمئن هستید سرور تغییر کرده (مثلاً بازنصب شده)، کلید قدیمی را حذف کنید:

ssh-keygen -R 185.51.200.10

برای آشنایی بیشتر با مدیریت سرورهای لینوکسی و آموزش‌های تکمیلی، می‌توانید به بخش مقالات رپیدو سرور مراجعه کنید که مجموعه‌ای کامل از راهنماهای عملی را در اختیار شما می‌گذارد.

ساده‌سازی اتصال با فایل پیکربندی SSH

اگر مرتب به چند سرور مختلف متصل می‌شوید، تایپ کردن هر بار آدرس IP، پورت و نام کاربری خسته‌کننده می‌شود. خوشبختانه SSH یک فایل پیکربندی سمت کلاینت دارد که این کار را بسیار ساده می‌کند. کافی است فایل ~/.ssh/config را بسازید یا ویرایش کنید:

nano ~/.ssh/config

سپس برای هر سرور یک بلوک تعریف کنید. برای مثال:

Host rapido
    HostName 185.51.200.10
    User root
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host web-prod
    HostName 91.107.180.20
    User deploy
    Port 22

از این پس به‌جای تایپ دستور کامل، تنها کافی است نام مستعار را بنویسید و اتصال با تمام تنظیمات ذخیره‌شده برقرار می‌شود:

ssh rapido

این روش نه‌تنها سریع‌تر است، بلکه احتمال خطا در وارد کردن اطلاعات را نیز به صفر می‌رساند. می‌توانید در همین فایل گزینه‌های پیشرفته‌تری مانند ServerAliveInterval برای جلوگیری از قطع شدن اتصال‌های بی‌کار نیز اضافه کنید.

حفظ نشست و اجرای فرآیندهای طولانی

یکی از چالش‌های رایج هنگام اتصال به سرور مجازی با SSH این است که اگر اتصال شما قطع شود، هر فرآیندی که در حال اجرا بوده نیز متوقف می‌شود. تصور کنید در حال دانلود یک فایل بزرگ یا اجرای یک به‌روزرسانی طولانی هستید و ناگهان اینترنت شما قطع می‌شود. برای حل این مشکل، ابزارهای مدیریت نشست مانند tmux و screen ساخته شده‌اند. ابتدا tmux را نصب کنید:

apt install tmux -y

سپس یک نشست جدید بسازید و کار خود را در آن اجرا کنید:

tmux new -s mywork

حالا حتی اگر اتصال SSH شما قطع شود، فرآیندها همچنان روی سرور اجرا می‌مانند. در اتصال بعدی می‌توانید دوباره به همان نشست بازگردید:

tmux attach -t mywork
توصیه: عادت کنید کارهای طولانی را همیشه درون tmux اجرا کنید. این عادت ساده می‌تواند شما را از دردسرهای بزرگ ناشی از قطعی ناگهانی اتصال نجات دهد.

تونل‌سازی و پورت فورواردینگ با SSH

یکی از قابلیت‌های کمتر شناخته‌شده اما بسیار قدرتمند SSH، توانایی ساخت تونل امن برای انتقال ترافیک است. فرض کنید یک پایگاه داده روی سرور دارید که تنها به‌صورت محلی (localhost) قابل دسترسی است و نمی‌خواهید پورت آن را روی اینترنت باز کنید. با پورت فورواردینگ محلی می‌توانید به‌صورت امن به آن متصل شوید:

ssh -L 5432:localhost:5432 root@185.51.200.10

در این دستور، پورت ۵۴۳۲ روی سیستم محلی شما به پورت ۵۴۳۲ روی سرور (از طریق تونل رمزنگاری‌شده) متصل می‌شود. به این ترتیب می‌توانید با ابزارهای گرافیکی پایگاه داده روی سیستم خود، انگار که پایگاه داده محلی است، به آن وصل شوید، در حالی که تمام ترافیک از طریق تونل امن SSH عبور می‌کند. این قابلیت برای دسترسی امن به سرویس‌های داخلی سرور بدون باز کردن پورت‌های اضافی روی فایروال، بسیار ارزشمند است.

سوالات متداول

آیا برای اتصال به سرور مجازی با SSH نیاز به نرم‌افزار خاصی دارم؟

خیر. در لینوکس و مک کلاینت SSH به‌صورت پیش‌فرض نصب است و در ویندوز ۱۰ و ۱۱ نیز OpenSSH داخلی وجود دارد. تنها اگر بخواهید محیط گرافیکی داشته باشید، می‌توانید از نرم‌افزارهایی مانند PuTTY استفاده کنید.

ورود با کلید امن‌تر است یا با رمز عبور؟

ورود با کلید SSH به‌مراتب امن‌تر است، زیرا کلید خصوصی هیچ‌گاه روی شبکه منتقل نمی‌شود و در برابر حملات حدس رمز مقاوم است. توصیه می‌شود پس از تنظیم کلید، ورود با رمز را کاملاً غیرفعال کنید.

پورت SSH را چگونه تغییر دهم و چرا این کار مفید است؟

با ویرایش فایل /etc/ssh/sshd_config و تغییر مقدار Port و سپس ری‌استارت سرویس، می‌توانید پورت را عوض کنید. این کار حجم زیادی از اسکن‌ها و حملات خودکار روی پورت ۲۲ را کاهش می‌دهد، هرچند به‌تنهایی جایگزین سایر تدابیر امنیتی نیست.

اگر رمز root را فراموش کنم چطور به سرور وصل شوم؟

در این حالت می‌توانید از طریق کنسول VNC یا پنل مدیریت سرور که ارائه‌دهنده در اختیار شما قرار داده وارد شوید و رمز را بازنشانی کنید. این کنسول مستقل از SSH کار می‌کند و دسترسی سطح پایین به سرور می‌دهد.