</>

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

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

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

Command Palette

Search for a command to run...

SSH در Debian

آموزش کامل SSH در Debian: نصب سرور OpenSSH، پیکربندی sshd_config، احراز هویت با کلید، port forwarding، fail2ban و امن‌سازی.

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

SSH (Secure Shell) پروتکلی امن برای ورود به سیستم و اجرای دستورات از راه دور است. در Debian، سرور پیش‌فرض SSH بستهٔ openssh-server است که تقریباً در هر نصب سروری فعال می‌شود. در این مستند با نصب، پیکربندی، احراز هویت با کلید و امن‌سازی SSH آشنا می‌شویم.

نصب سرور OpenSSH#

# نصب بسته
sudo apt install openssh-server
 
# بررسی فایل‌های نصب‌شده
dpkg -L openssh-server | grep -E 'sshd$|sshd_config'
# /usr/sbin/sshd
# /etc/ssh/sshd_config
 
# فعال‌سازی و شروع سرویس
sudo systemctl enable --now ssh
 
# بررسی وضعیت
sudo systemctl status ssh
# Active: active (running)

نام سرویس در Debian

در Debian، سرویس SSH ssh.service نام دارد (نه sshd.service). اما در نسخه‌های اخیر، هر دو نام به یک سرویس اشاره می‌کنند. در توزیع‌های دیگر مانند RHEL یا Arch، نام sshd رایج‌تر است.

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

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

پیکربندی sshd_config#

فایل پیکربندی سرور در /etc/ssh/sshd_config قرار دارد:

sudo nano /etc/ssh/sshd_config

تنظیمات مهم:

# /etc/ssh/sshd_config
 
# پورت پیش‌فرض (می‌توانید تغییر دهید برای امنیت بیشتر)
Port 22
 
# آدرس‌هایی که سرور به آن‌ها گوش می‌دهد
# 0.0.0.0 یعنی همهٔ آدرس‌ها
ListenAddress 0.0.0.0
 
# فقط IPv4
AddressFamily inet
 
# پروتکل SSH نسخه 2 (تنها نسخهٔ امن)
Protocol 2
 
# کلیدهای میزبان
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
 
# تنظیمات لاگین
PermitRootLogin no
MaxAuthTries 3
LoginGraceTime 30
 
# احراز هویت
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
 
# تنظیمات نشست
X11Forwarding yes
AllowTcpForwarding yes
PrintMotd no
 
# محدودیت کاربران (اختیاری)
# AllowUsers maryam ali
# AllowGroups ssh-users

پس از تغییر، پیکربندی را تست و سرویس را reload کنید:

# تست پیکربندی (بدون ری‌استارت)
sudo sshd -t
 
# بارگذاری مجدد پیکربندی
sudo systemctl reload ssh
# یا ری‌استارت کامل
sudo systemctl restart ssh

تست پیکربندی پیش از ری‌استارت

همیشه قبل از ری‌استارت ssh، دستور sudo sshd -t را اجرا کنید تا خطای نحوی را پیدا کنید. اگر پیکربندی اشتباه باشد، ممکن است سرویس بالا نیاید و دسترسی از راه دور خود را از دست بدهید.

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

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

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

# ساخت کلید 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

همیشه passphrase تعیین کنید

اگر کلید خصوصی بدون passphrase باشد و کسی لپ‌تاپ شما را بدزدد، می‌تواند به سرور وصل شود. با passphrase، حتی در صورت دزدیده‌شدن، دسترسی غیرممکن است.

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

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

۳. غیرفعال‌کردن ورود با رمز#

پس از اطمینان از کارکرد کلید، ورود با رمز را غیرفعال کنید:

# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
sudo sshd -t
sudo systemctl reload ssh

ابتدا کلید را تست کنید

پیش از غیرفعال‌کردن PasswordAuthentication، حتماً در یک ترمینال دیگر با کلید وارد شوید تا مطمئن شوید کار می‌کند. در غیر این صورت، دسترسی خود را از دست می‌دهید.

ssh-agent و افزودن passphrase#

برای عدم تایپ passphrase در هر اتصال، از ssh-agent استفاده کنید:

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

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

فایل ~/.ssh/config به شما اجازه می‌دهد اتصال‌های متداول را ذخیره کنید:

# ~/.ssh/config
 
Host myserver
    HostName 192.168.1.10
    User ali
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    ForwardAgent yes
 
Host github.com
    User git
    IdentityFile ~/.ssh/github_key
 
Host *.local
    User admin
    Port 2222

پس از این پیکربندی:

# به‌جای ssh -i ~/.ssh/id_ed25519 ali@192.168.1.10
ssh myserver

Port Forwarding#

SSH می‌تواند تونل امن برای عبور ترافیک شبکه ایجاد کند:

Local Forwarding#

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

# دسترسی به وب‌سرور داخلی سرور (10.0.0.5:80) از طریق پورت محلی 8080
ssh -L 8080:10.0.0.5:80 user@server
 
# سپس در مرورگر: http://localhost:8080

Remote Forwarding#

دسترسی از سرور به سرویس محلی شما:

# در دسترس‌قرار دادن پورت محلی 3000 روی سرور در پورت 8080
ssh -R 8080:localhost:3000 user@server

Dynamic Forwarding (SOCKS Proxy)#

# ساخت پروکسی SOCKS روی پورت محلی 1080
ssh -D 1080 user@server
 
# تنظیم مرورگر برای استفاده از SOCKS5 روی localhost:1080

کپی فایل با scp و rsync#

# کپی فایل از کلاینت به سرور
scp file.txt user@server:/tmp/
 
# کپی از سرور به کلاینت
scp user@server:/var/log/syslog ./
 
# کپی یک دایرکتوری به‌صورت بازگشتی
scp -r mydir/ user@server:~/
 
# rsync برای انتقال هوشمندتر (فقط تغییرات)
rsync -avz --progress mydir/ user@server:~/mydir/

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

# نصب
sudo apt install fail2ban
 
# بررسی وضعیت
sudo systemctl status fail2ban
 
# بررسی jailهای فعال
sudo fail2ban-client status
 
# مشاهدهٔ جزئیات ssh jail
sudo fail2ban-client status sshd

fail2ban به‌طور پیش‌فرض بعد از ۵ تلاش ناموفق ورود، IP را برای ۱۰ دقیقه مسدود می‌کند.

امن‌سازی پیشرفته#

تغییر پورت پیش‌فرض#

# /etc/ssh/sshd_config
Port 2222

سپس در فایروال پورت جدید را باز کنید:

sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp

محدودیت IP با AllowUsers یا Match#

# فقط کاربران خاص
AllowUsers ali maryam
 
# یا بر اساس IP
Match Address 192.168.1.0/24
    AllowUsers ali

استفاده از UFW برای محدودیت#

# فقط اجازهٔ SSH از یک شبکهٔ خاص
sudo ufw allow from 192.168.1.0/24 to any port 22
sudo ufw deny 22

خطاهای رایج#

۱. Connection refused#

ssh: connect to host 192.168.1.10 port 22: Connection refused

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

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

۲. Permission denied (publickey)#

Permission denied (publickey).

راه‌حل:

# بررسی مجوزهای فایل
ls -ld ~/.ssh ~/.ssh/authorized_keys
# باید 700 و 600 باشند
 
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
 
# بررسی مالک
chown -R $USER:$USER ~/.ssh

۳. Connection timed out#

راه‌حل: فایروال روی سرور یا کلاینت پورت SSH را بسته است.

# بررسی فایروال
sudo ufw status
sudo ufw allow ssh
 
# بررسی iptables
sudo iptables -L -n | grep 22

۴. خطای "REMOTE HOST IDENTIFICATION HAS CHANGED"#

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

راه‌حل: یا سرور تغییر کرده (مثلاً نصب مجدد) یا حملهٔ man-in-the-middle رخ داده. اگر مطمئن هستید سرور همان است:

ssh-keygen -R 192.168.1.10
# سپس دوباره ssh کنید

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

SSH در Debian با openssh-server نصب و با systemctl مدیریت می‌شود. برای امنیت، از احراز هویت با کلید (به‌جای رمز)، fail2ban، و در صورت لزوم تغییر پورت و محدودیت IP استفاده کنید.

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

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

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