user@linux-tutorials: ~/tutorials/10-ssh-and-remote-access — linux-tutorials

tutorials / linux / chapter-10.md · utf-8 ⬇ download chapter-10.md

فصل دهم: SSH و دسترسی از راه دور

SSH and Remote Access

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

در دنیای واقعی، بسیاری از سرورها در دیتاسنترها، سرویس‌های ابری و محیط‌های سازمانی قرار دارند و امکان دسترسی فیزیکی به آن‌ها وجود ندارد.

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

SSH پایه بسیاری از فعالیت‌های حرفه‌ای مانند:

  • مدیریت سرور
  • DevOps
  • Cloud Computing
  • امنیت سایبری
  • مدیریت زیرساخت

محسوب می‌شود.

SSH چیست؟

SSH مخفف:

Secure Shell

است.

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

با استفاده از SSH می‌توان:

  • وارد یک سیستم دیگر شد.
  • دستورات را روی سیستم مقصد اجرا کرد.
  • فایل انتقال داد.
  • سرویس‌ها را مدیریت کرد.
  • مشکلات سیستم را بررسی کرد.
[i]به زبان ساده: SSH یعنی کنترل یک کامپیوتر دیگر از طریق ترمینال، بدون نیاز به حضور فیزیکی کنار آن.

ساختار ارتباط SSH

ارتباط SSH معمولاً بین دو سیستم انجام می‌شود:

Client
   |
   |
Network
   |
   |
Server

SSH Client چیست؟

SSH Client برنامه‌ای است که اتصال را ایجاد می‌کند.

کاربر روی سیستم خود SSH Client را اجرا می‌کند و درخواست اتصال به سیستم مقصد ارسال می‌کند.

مثال:

Laptop
   |
   |
   SSH
   |
   |
   Server

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

برای بررسی نسخه:

user@linux-tutorials: ~/ch-10BASH
ssh -V

SSH Server چیست؟

SSH Server سرویسی است که روی سیستم مقصد اجرا می‌شود و منتظر درخواست‌های اتصال می‌ماند.

در لینوکس معمولاً از:

OpenSSH Server

استفاده می‌شود.

نصب OpenSSH Server

در توزیع‌های مبتنی بر Debian و Ubuntu:

user@linux-tutorials: ~/ch-10BASH
sudo apt install openssh-server

پس از نصب، سرویس SSH ایجاد می‌شود.

مدیریت سرویس SSH

بررسی وضعیت:

user@linux-tutorials: ~/ch-10BASH
systemctl status ssh

شروع سرویس:

user@linux-tutorials: ~/ch-10BASH
sudo systemctl start ssh

فعال کردن اجرای خودکار:

user@linux-tutorials: ~/ch-10BASH
sudo systemctl enable --now ssh

راه‌اندازی مجدد:

user@linux-tutorials: ~/ch-10BASH
sudo systemctl restart ssh

اتصال به سیستم دیگر

ساختار دستور:

user@linux-tutorials: ~/ch-10BASH
ssh username@ip-address

مثال:

user@linux-tutorials: ~/ch-10BASH
ssh amir@192.168.1.20

در این دستور:

username

نام کاربر سیستم مقصد است.

ip-address

آدرس سیستم مقصد است.

اولین اتصال SSH

در اولین اتصال، SSH اطلاعات سرور را بررسی می‌کند.

پیامی مشابه زیر نمایش داده می‌شود:

Are you sure you want to continue connecting?

پیش از تأیید، اثر انگشت کلید میزبان را از یک کانال مطمئن با مدیر سرور تطبیق دهید. تأیید بدون بررسی، اتصال نخست را در برابر حملهٔ میانی محافظت نمی‌کند. پس از تأیید، کلید میزبان ذخیره می‌شود.

این اطلاعات در فایل زیر قرار می‌گیرد:

~/.ssh/known_hosts

این فایل برای جلوگیری از حملات جعل هویت استفاده می‌شود.

روش‌های احراز هویت SSH

SSH معمولاً از دو روش استفاده می‌کند:

  1. Password Authentication

  2. Key-Based Authentication

ورود با رمز عبور

در این روش کاربر با رمز عبور وارد سیستم می‌شود.

مثال:

user@linux-tutorials: ~/ch-10BASH
ssh user@server-ip

مزایا:

  • ساده
  • مناسب برای شروع

معایب:

  • امنیت کمتر
  • امکان حمله Brute Force

ورود با SSH Key

روش حرفه‌ای‌تر استفاده از کلیدهای SSH است.

در این روش از دو کلید استفاده می‌شود:

  • Private Key
  • Public Key

Private Key چیست؟

Private Key کلید خصوصی شماست.

این کلید باید فقط روی سیستم شخصی شما باقی بماند.

هرگز نباید آن را برای دیگران ارسال کنید.

Public Key چیست؟

Public Key کلید عمومی است.

این کلید روی سرور قرار می‌گیرد و برای شناسایی شما استفاده می‌شود.

ساخت SSH Key

برای ایجاد یک کلید مدرن Ed25519:

user@linux-tutorials: ~/ch-10BASH
ssh-keygen -t ed25519 -a 64

معمولاً فایل‌های زیر ساخته می‌شوند:

~/.ssh/id_ed25519

~/.ssh/id_ed25519.pub

انتقال کلید عمومی به سرور

برای کپی کردن Public Key:

user@linux-tutorials: ~/ch-10BASH
ssh-copy-id username@server-ip

مثال:

user@linux-tutorials: ~/ch-10BASH
ssh-copy-id amir@192.168.1.20

بعد از انجام این کار، ورود بدون رمز امکان‌پذیر خواهد بود.

پوشه SSH

تنظیمات SSH کاربران در مسیر زیر قرار دارد:

~/.ssh

فایل‌های مهم:

user@linux-tutorials: ~/ch-10BASH
authorized_keys

known_hosts

id_rsa

id_rsa.pub

authorized_keys

این فایل شامل کلیدهای عمومی مجاز برای ورود است.

مسیر:

~/.ssh/authorized_keys

هر کلیدی که داخل این فایل قرار گیرد، اجازه ورود خواهد داشت.

known_hosts

این فایل اطلاعات سرورهایی که قبلاً به آن‌ها متصل شده‌ایم را نگهداری می‌کند.

مسیر:

~/.ssh/known_hosts

تنظیمات SSH Server

فایل اصلی تنظیمات SSH:

/etc/ssh/sshd_config

در این فایل می‌توان رفتار SSH را تغییر داد.

تغییر پورت SSH

SSH به صورت پیش‌فرض از پورت:

22

استفاده می‌کند.

برای تغییر:

Port 2222

پیش از reload، syntax تنظیمات را بررسی کنید و نشست فعلی را باز نگه دارید:

user@linux-tutorials: ~/ch-10BASH
sudo sshd -t

اگر Firewall فعال است، ابتدا پورت جدید را فقط برای مبدأهای لازم باز کنید و سپس تنظیمات را بدون قطع اتصال فعلی بارگذاری کنید:

user@linux-tutorials: ~/ch-10BASH
sudo ufw allow 2222/tcp
sudo systemctl reload ssh

در بعضی توزیع‌ها نام unit برابر sshd است. در یک نشست دوم اتصال با ssh -p 2222 user@server را آزمایش کنید و فقط پس از موفقیت، قانون پورت قبلی را حذف کنید. تغییر پورت جای کلید، محدودسازی دسترسی و به‌روزرسانی را نمی‌گیرد.

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

SCP مخفف:

Secure Copy

است.

این ابزار برای انتقال فایل از طریق SSH استفاده می‌شود.

ساختار:

user@linux-tutorials: ~/ch-10BASH
scp file username@server:/path

مثال:

user@linux-tutorials: ~/ch-10BASH
scp test.txt amir@192.168.1.20:/home/amir

دریافت فایل از سرور

مثال:

user@linux-tutorials: ~/ch-10BASH
scp amir@192.168.1.20:/home/amir/test.txt .

SFTP چیست؟

SFTP مخفف:

SSH File Transfer Protocol

است.

این پروتکل امکان مدیریت فایل‌ها از طریق SSH را فراهم می‌کند.

اتصال:

user@linux-tutorials: ~/ch-10BASH
sftp username@server-ip

دستورات مهم SFTP

نمایش فایل‌ها:

user@linux-tutorials: ~/ch-10BASH
ls

دانلود فایل:

user@linux-tutorials: ~/ch-10BASH
get filename

آپلود فایل:

user@linux-tutorials: ~/ch-10BASH
put filename

خروج:

user@linux-tutorials: ~/ch-10BASH
exit

SSH Tunneling

SSH فقط برای ورود به سرور استفاده نمی‌شود.

می‌توان از آن برای ایجاد تونل امن شبکه استفاده کرد.

ساختار:

Local Machine
      |
      |
  SSH Tunnel
      |
      |
  Remote Server

کاربردها:

  • دسترسی امن به سرویس‌ها
  • عبور امن اطلاعات
  • اتصال به شبکه‌های داخلی

Local Port Forwarding

ساختار:

user@linux-tutorials: ~/ch-10BASH
ssh -L local-port:destination:destination-port user@server

مثال:

user@linux-tutorials: ~/ch-10BASH
ssh -L 8080:localhost:80 user@server

امنیت SSH

برای افزایش امنیت SSH:

  • استفاده از SSH Key
  • غیرفعال کردن ورود Root
  • استفاده از Firewall
  • تغییر پورت پیش‌فرض
  • محدود کردن کاربران
  • بروزرسانی سیستم

غیرفعال کردن ورود Root

فایل:

/etc/ssh/sshd_config

تنظیم:

PermitRootLogin no

محدود کردن کاربران SSH

مثال:

AllowUsers amir

مشاهده کاربران متصل

دستور:

user@linux-tutorials: ~/ch-10BASH
who

یا:

user@linux-tutorials: ~/ch-10BASH
w

مشاهده Log های SSH

برای بررسی رویدادهای SSH:

user@linux-tutorials: ~/ch-10BASH
journalctl -u ssh

مدیریت واقعی یک سرور

فرض کنید یک سرور لینوکسی دارید.

اتصال:

user@linux-tutorials: ~/ch-10BASH
ssh user@server-ip

بررسی منابع:

user@linux-tutorials: ~/ch-10BASH
top

بروزرسانی سیستم:

user@linux-tutorials: ~/ch-10BASH
sudo apt update

مدیریت سرویس‌ها:

user@linux-tutorials: ~/ch-10BASH
systemctl restart nginx

بررسی Log ها:

user@linux-tutorials: ~/ch-10BASH
journalctl

تمام این عملیات بدون حضور فیزیکی کنار سرور انجام می‌شود.

تمرین‌های فصل دهم

[01]بررسی نسخه SSH

user@linux-tutorials: ~/ch-10BASH
ssh -V

[02]بررسی وضعیت SSH

user@linux-tutorials: ~/ch-10BASH
systemctl status ssh

[03]ساخت SSH Key

user@linux-tutorials: ~/ch-10BASH
ssh-keygen

[04]مشاهده فایل‌های SSH

user@linux-tutorials: ~/ch-10BASH
ls ~/.ssh

[05]مشاهده کاربران متصل

user@linux-tutorials: ~/ch-10BASH
who

جمع‌بندی فصل دهم

در این فصل یاد گرفتیم:

  • SSH چیست.
  • Client و Server چگونه کار می‌کنند.
  • چگونه اتصال راه دور ایجاد کنیم.
  • SSH Key چگونه کار می‌کند.
  • Public Key و Private Key چیستند.
  • چگونه فایل منتقل کنیم.
  • SCP و SFTP چه هستند.
  • SSH Tunnel چیست.
  • چگونه SSH را امن‌تر کنیم.

SSH یکی از مهم‌ترین ابزارهای دنیای لینوکس است.

تسلط بر SSH یک قدم مهم برای ورود به حوزه‌های:

  • مدیریت سرور
  • DevOps
  • Cloud
  • امنیت سایبری

است.

با یادگیری SSH، کاربر لینوکس از یک استفاده‌کننده ساده به فردی تبدیل می‌شود که توانایی مدیریت سیستم‌های واقعی را دارد.