</>

لینوکس‌پارسی

مرجع فارسی آموزش لینوکس

Gentoo • Arch • Debian • Ubuntu • Kali • Parrot
پرش به محتوای اصلی

Command Palette

Search for a command to run...

SSH در Ubuntu

آموزش کامل نصب و پیکربندی OpenSSH در Ubuntu: کلیدهای SSH، تأمین امنیت سرور، SSH tunneling، SFTP و رفع خطاهای رایج.

متوسط۷ دقیقه مطالعهآخرین بروزرسانی: ۹ تیر ۱۴۰۵ویرایش در گیت‌هاب

OpenSSH استاندارد طلایی برای ورود از راه دور و انتقال امن فایل در لینوکس است. در این آموزش با نصب، پیکربندی، امن‌سازی و استفادهٔ پیشرفته از SSH در Ubuntu آشنا می‌شوید.

نصب OpenSSH#

روی Ubuntu Desktop#

Ubuntu Desktop به‌طور پیش‌فرض فقط کلاینت SSH را دارد. برای نصب سرور:

# نصب سرور SSH
sudo apt update
sudo apt install -y openssh-server
 
# بررسی وضعیت سرویس
sudo systemctl status ssh
# ● ssh.service - OpenBSD Secure Shell server
#      Active: active (running) since ...

روی Ubuntu Server#

Ubuntu Server در طول نصب، از شما می‌پرسد آیا SSH نصب شود. اگر در زمان نصب فعال نکردید:

sudo apt install -y openssh-server
sudo systemctl enable --now ssh

نام سرویس SSH در Ubuntu

در Ubuntu 24.04 به بعد، سرویس SSH با نام ssh.service شناخته می‌شود (نه sshd.service). هر دو به یک فایل واحد اشاره می‌کنند، اما در دستورات systemctl از ssh استفاده کنید.

اتصال به سرور با SSH#

# اتصال با نام کاربری و آدرس
ssh ali@192.168.1.10
 
# اتصال با پورت غیرپیش‌فرض
ssh -p 2222 ali@192.168.1.10
 
# اتصال و اجرای یک دستور
ssh ali@192.168.1.10 "uname -a"
 
# اتصال با تخصیص کلید
ssh -i ~/.ssh/mykey ali@192.168.1.10

پس از اولین اتصال، اثر انگشت کلید سرور در ~/.ssh/known_hosts ذخیره می‌شود:

The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
ED25519 key fingerprint is SHA256:abc123...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.10' (ED25519) to the list of known hosts.
ali@192.168.1.10's password: ********

احراز هویت با کلید عمومی#

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

۱. ساخت کلید روی کلاینت#

# ساخت کلید ED25519 (توصیه‌شده)
ssh-keygen -t ed25519 -C "ali@laptop"
 
# خروجی:
# Generating public/private ed25519 key pair.
# Enter file in which to save the key (/home/ali/.ssh/id_ed25519):
# Enter passphrase (empty for no passphrase): ********
# Enter same passphrase again: ********
# Your identification has been saved in /home/ali/.ssh/id_ed25519
# Your public key has been saved in /home/ali/.ssh/id_ed25519.pub

ED25519 به‌جای RSA

الگوریتم ED25519 کوتاه‌تر، سریع‌تر و امن‌تر از RSA است. اگر نرم‌افزار قدیمی دارید که RSA لازم است، از ssh-keygen -t rsa -b 4096 استفاده کنید. در غیر این صورت، همیشه ED25519 را ترجیح دهید.

۲. کپی کلید عمومی روی سرور#

# روش ساده با ssh-copy-id
ssh-copy-id ali@192.168.1.10
 
# یا روش دستی
cat ~/.ssh/id_ed25519.pub | ssh ali@192.168.1.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys"

۳. تست اتصال#

# اکنون بدون رمز باید وارد شوید
ssh ali@192.168.1.10
# Enter passphrase for key '/home/ali/.ssh/id_ed25519': ********
# (این passphrase کلید است، نه رمز سرور)

۴. استفاده از ssh-agent برای جلوگیری از تکرار passphrase#

# شروع ssh-agent
eval "$(ssh-agent -s)"
 
# افزودن کلید
ssh-add ~/.ssh/id_ed25519
# Enter passphrase for /home/ali/.ssh/id_ed25519: ********
# Identity added: /home/ali/.ssh/id_ed25519
 
# حالا در این session، دیگر passphrase پرسیده نمی‌شود

پیکربندی سرور SSH#

فایل پیکربندی سرور در /etc/ssh/sshd_config (یا /etc/ssh/sshd_config.d/) است:

# ویرایش فایل اصلی
sudo nano /etc/ssh/sshd_config
 
# یا ساخت فایل drop-in (روش مدرن)
sudo nano /etc/ssh/sshd_config.d/99-custom.conf

تنظیمات امنیتی پیشنهادی#

# /etc/ssh/sshd_config.d/99-custom.conf
 
# پورت غیراستاندارد (مثلاً 2222)
Port 2222
 
# غیرفعال‌کردن ورود با رمز
PasswordAuthentication no
 
# غیرفعال‌کردن ورود root
PermitRootLogin no
 
# فقط کلید ED25519 و RSA
PubkeyAcceptedKeyTypes ssh-ed25519,rsa-sha2-512,rsa-sha2-256
 
# محدودیت کاربران مجاز
AllowUsers ali maryam
 
# timeout نشست
ClientAliveInterval 300
ClientAliveCountMax 0
 
# غیرفعال‌کردن X11 forwarding (اگر سرور دسکتاپ ندارد)
X11Forwarding no
 
# محدودیت احراز هویت
MaxAuthTries 3
LoginGraceTime 30

پس از تغییر:

# تست پیکربندی
sudo sshd -t
 
# بارگذاری مجدد (بدون قطع نشست‌های فعلی)
sudo systemctl reload ssh

هرگز نشست SSH فعلی را نبندید

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

فایل پیکربندی کلاینت#

برای کلاینت SSH، می‌توانید در ~/.ssh/config میانبرهایی تعریف کنید:

# ~/.ssh/config
 
Host myserver
    HostName 192.168.1.10
    User ali
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
 
Host github.com
    User git
    IdentityFile ~/.ssh/github_key
    IdentitiesOnly yes

حالا به‌جای تایپ همهٔ گزینه‌ها:

ssh myserver
scp file.txt myserver:~/

SFTP — انتقال امن فایل#

# اتصال SFTP
sftp ali@192.168.1.10
 
# دستورات داخل sftp:
# sftp> ls
# sftp> cd /tmp
# sftp> get remote-file.txt local-file.txt
# sftp> put local-file.txt remote-file.txt
# sftp> exit

SCP — کپی مستقیم#

# کپی فایل محلی به سرور
scp file.txt ali@192.168.1.10:~/
 
# کپی فایل از سرور به محلی
scp ali@192.168.1.10:/var/log/syslog ./
 
# کپی پوشه به‌صورت بازگشتی
scp -r myfolder/ ali@192.168.1.10:~/
 
# با پورت غیرپیش‌فرض
scp -P 2222 file.txt ali@192.168.1.10:~/

SSH Tunneling (Port Forwarding)#

Local Port Forwarding#

دسترسی به یک سرویس روی سرور (که از بیرون قابل دسترسی نیست) از طریق پورت محلی:

# دسترسی به PostgreSQL روی سرور (پورت 5432) از طریق پورت محلی 15432
ssh -L 15432:localhost:5432 ali@192.168.1.10
 
# حالا به localhost:15432 وصل شوید
psql -h localhost -p 15432 -U postgres

Remote Port Forwarding#

باز کردن پورت روی سرور که به سرویس محلی شما منتقل می‌شود:

# نمایش وب‌سرور محلی روی پورت 8080 سرور
ssh -R 8080:localhost:80 ali@192.168.1.10

Dynamic Port Forwarding (SOCKS proxy)#

# ساخت SOCKS proxy روی پورت محلی 1080
ssh -D 1080 ali@192.168.1.10
 
# حالا در مرورگر، SOCKS5 proxy روی localhost:1080 تنظیم کنید

fail2ban برای محافظت از brute-force#

# نصب fail2ban
sudo apt install -y fail2ban
 
# فعال‌سازی
sudo systemctl enable --now fail2ban
 
# بررسی وضعیت
sudo fail2ban-client status sshd
# Status for the jail: sshs
# |- Filter
# |  |- Currently failed: 0
# |  |- Total failed:     3
# `- Actions
#    |- Currently banned: 0
#    |- Total banned:     1

خطاهای رایج#

۱. Permission denied (publickey)#

ali@192.168.1.10: Permission denied (publickey).

راه‌حل:

# اجرای ssh با debug برای دیدن دلیل
ssh -v ali@192.168.1.10
 
# بررسی مجوزهای فایل کلید
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

۲. Connection refused#

راه‌حل: سرویس SSH اجرا نیست:

# روی سرور
sudo systemctl start ssh
sudo systemctl enable ssh

۳. Connection timed out#

راه‌حل:

  • فایروال را بررسی کنید: sudo ufw status
  • آدرس IP را تأیید کنید: ping 192.168.1.10
  • پورت را بررسی کنید: nc -zv 192.168.1.10 22

۴. Host key verification failed#

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

راه‌حل: اگر مطمئن هستید سرور همان است (مثلاً reinstall شده):

# حذف کلید قدیمی
ssh-keygen -R 192.168.1.10
 
# اتصال مجدد
ssh ali@192.168.1.10

۵. SSH کند است در ورود#

راه‌حل: معمولاً به‌خاطر تلاش برای reverse DNS است. در فایل پیکربندی سرور اضافه کنید:

UseDNS no
GSSAPIAuthentication no
sudo systemctl reload ssh

خلاصه و مرحلهٔ بعد#

SSH در Ubuntu با OpenSSH راه‌اندازی ساده‌ای دارد، اما برای استفادهٔ امن و حرفه‌ای باید از کلید عمومی، فایل پیکربندی و fail2ban استفاده کنید. همیشه قبل از بستن نشست فعلی، پیکربندی جدید را تست کنید.

به‌عنوان گام بعدی:

اشتراک‌گذاری:

این صفحه در تاریخ ۹ تیر ۱۴۰۵ به‌روزرسانی شده است.