</>

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

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

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

Command Palette

Search for a command to run...

SSH در Gentoo — سرور OpenSSH، احراز هویت با کلید و امن‌سازی

آموزش کامل SSH در Gentoo: نصب سرور OpenSSH، پیکربندی sshd_config، احراز هویت با کلید ed25519، ssh-agent، ssh config، fail2ban و خطاهای رایج.

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

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

نصب سرور OpenSSH#

# نصب بسته (معمولاً در Stage3 نصب است)
emerge --ask net-misc/openssh
# خروجی:
# [ebuild   R   ] net-misc/openssh-9.7_p1-r1  USE="..."
 
# بررسی فایل‌های نصب‌شده
equery files net-misc/openssh | grep -E 'sshd$|sshd_config'
# /usr/sbin/sshd
# /etc/ssh/sshd_config

فعال‌سازی سرویس#

در OpenRC:

# افزودن به runlevel پیش‌فرض
rc-update add sshd default
# خروجی:
#  * service sshd added to runlevel default
 
# شروع سرویس
rc-service sshd start
# خروجی:
#  * Starting sshd ...
 
# بررسی وضعیت
rc-service sshd status
#  * status: started

در systemd:

systemctl enable sshd
systemctl start sshd
systemctl status sshd
# Active: active (running)

تفاوت sshd و ssh

بستهٔ OpenSSH شامل دو مؤلفه است: ssh (کلاینت) و sshd (سرور). دستور ssh user@host برای اتصال به سرور دیگر به کار می‌رود، در حالی که سرویس sshd روی سیستم خودتان اجرا می‌شود تا دیگران بتوانند به آن وصل شوند.

پیکربندی sshd_config#

فایل پیکربندی سرور در /etc/ssh/sshd_config قرار دارد. پس از هر تغییر باید سرویس را ری‌استارت کنید:

nano /etc/ssh/sshd_config
rc-service sshd restart   # یا systemctl restart sshd

پیش از ری‌استارت، نحوِ فایل را بررسی کنید:

sshd -t
# بدون خروجی یعنی نحوی درست است

جدول دستورالعمل‌های مهم sshd_config#

دستورالعملپیش‌فرضتوصیهتوضیح
Port2222 یا پورت دلخواهپورت شنید sshd
PermitRootLoginprohibit-passwordnoجلوگیری از ورود مستقیم root
PasswordAuthenticationyesnoفقط کلید، نه رمز
PubkeyAuthenticationyesyesفعال‌بودن احراز با کلید
AllowUsersهمهali bobفقط این کاربران می‌توانند
AllowGroupsهمهwheelفقط اعضای این گروه
X11Forwardingyesnoهنگام نیاز به GUI
MaxAuthTries63حداکثر تلاش احراز
LoginGraceTime12030ثانیه برای ورود
ClientAliveInterval0300بررسی اتصال هر ۵ دقیقه
PermitEmptyPasswordsnonoهرگز اجازه رمز خالی ندهید

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

# /etc/ssh/sshd_config
Port 22
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers ali
AllowGroups wheel
X11Forwarding no
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
Protocol 2

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

رمز عبور قابل حدس است، در معرض brute-force قرار می‌گیرد و در سرورهای میانی (man-in-the-middle) قابل رهگیری است. احراز هویت با کلید عمومی/خصوصی بسیار امن‌تر است: کلید خصوصی روی کلاینت نگه‌داری می‌شود و هرگز به سرور ارسال نمی‌گردد.

ساخت کلید#

روی کلاینت (سیستمی که می‌خواهید از آن وصل شوید):

# ساخت کلید ed25519 (پیشنهادی، کوتاه و امن)
ssh-keygen -t ed25519 -C "ali@gentoo-laptop"
# خروجی:
# Generating public/private ed25519 key pair.
# Enter file in which to save the key (~/.ssh/id_ed25519):
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
# Your identification has been saved in ~/.ssh/id_ed25519
# Your public key has been saved in ~/.ssh/id_ed25519.pub
 
# یا کلید RSA با طول 4096 (اگر ed25519 پشتیبانی نمی‌شود)
ssh-keygen -t rsa -b 4096 -C "ali@gentoo-laptop"

چرا ed25519؟

الگوریتم Ed25519 بر پایهٔ منحنی Edwards25519 ساخته شده، بسیار سریع‌تر از RSA است، کلید کوتاه‌تری دارد (۶۸ کاراکتر در برابر بیش از ۷۰۰ کاراکتر برای RSA-4096) و در برابر حملات side-channel مقاوم‌تر است. هرگز از ECDSA یا از RSA با طول کمتر از ۲۰۴۸ بیت استفاده نکنید.

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

ساده‌ترین راه با ssh-copy-id:

ssh-copy-id ali@gentoo-server
# خروجی:
# /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s)
# /usr/bin/ssh-copy-id: INFO: 1 key(s) remained to be installed
# ali@gentoo-server's password:
# Number of key(s) added: 1
# Now try logging into the machine, with: "ssh 'ali@gentoo-server'"

اگر ssh-copy-id در دسترس نبود، دستی کپی کنید:

# روی سرور
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

مجوزها حیاتی‌اند

اگر ~/.ssh مجوز ۷۰۰ و authorized_keys مجوز ۶۰۰ نداشته باشند، sshd از روی احتیاط کلید را رد می‌کند. این شایع‌ترین دلیل خطای Permission denied (publickey) است.

تست اتصال#

ssh ali@gentoo-server
# خروجی:
# Enter passphrase for key '/home/ali/.ssh/id_ed25519':
# Last login: Mon Sep 12 10:23:45 2025 from 192.168.1.5

پیکربندی کلاینت ssh config#

فایل ~/.ssh/config به شما اجازه می‌دهد به‌جای اینکه هر بار IP، پورت و کاربر را بنویسید، مستقیماً ssh myserver بزنید:

# ~/.ssh/config
Host myserver
    HostName gentoo-server.example.com
    User ali
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 300
 
Host git-server
    HostName git.example.com
    User git
    IdentityFile ~/.ssh/id_ed25519_git
 
Host *
    ServerAliveInterval 60
    TCPKeepAlive yes
ssh myserver   # معادل ssh -i ~/.ssh/id_ed25519 -p 22 ali@gentoo-server.example.com

ssh-agent برای cache کردن passphrase#

اگر روی کلید خصوصی passphrase گذاشته‌اید (که باید این کار را بکنید)، تکرار آن خسته‌کننده می‌شود. ssh-agent آن را در حافظه نگه می‌دارد:

# شروع agent
eval $(ssh-agent)
# Agent pid 12345
 
# افزودن کلید
ssh-add ~/.ssh/id_ed25519
# Enter passphrase for /home/ali/.ssh/id_ed25519:
# Identity added: /home/ali/.ssh/id_ed25519
 
# لیست کلیدهای بارگذاری‌شده
ssh-add -l
# 256 SHA256:abc123... ali@gentoo-laptop (ED25519)

برای شروع خودکار ssh-agent در هر نشست، می‌توانید این قطعه را به ~/.bashrc اضافه کنید:

if [ -z "$SSH_AUTH_SOCK" ]; then
    eval $(ssh-agent) > /dev/null
    ssh-add ~/.ssh/id_ed25519 2> /dev/null
fi

fail2ban برای جلوگیری از brute-force#

اگر SSH شما به اینترنت باز است، حتماً fail2ban نصب کنید تا IPهایی که چندین تلاش ناموفق انجام می‌دهند مسدود شوند:

emerge --ask net-analyzer/fail2ban
rc-update add fail2ban default   # OpenRC
rc-service fail2ban start
 
# یا
systemctl enable --now fail2ban

پیکربندی در /etc/fail2ban/jail.local:

[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 3600
findtime = 600

خطاهای رایج#

۱. Permission denied (publickey)#

ali@gentoo-server: Permission denied (publickey).

دلیل: کلید عمومی روی سرور نیست، مجوزها اشتباه است، یا PasswordAuthentication no تنظیم شده اما کلید هنوز پیکربندی نشده. راه‌حل:

# روی سرور بررسی کنید
ls -la ~/.ssh/
# drwx------ 2 ali ali  .ssh           (700)
# -rw------- 1 ali ali  authorized_keys (600)
 
# محتوای authorized_keys
cat ~/.ssh/authorized_keys
# باید شامل کلید عمومی شما باشد
 
# بررسی لاگ sshd روی سرور
tail -f /var/log/auth.log    # یا journalctl -u sshd
# ممکن است این پیام را ببینید: Authentication refused: bad ownership

۲. Connection refused#

ssh: connect to host gentoo-server port 22: Connection refused

دلیل: سرویس sshd اجرا نمی‌شود یا فایروال بسته است. راه‌حل:

# روی سرور
rc-service sshd status
# یا
systemctl status sshd
 
# بررسی پورت
ss -tlnp | grep :22
# tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))

۳. ورود کند است (تأخیر چند ثانیه‌ای)#

دلیل: sshd تلاش می‌کند hostname کلاینت را از طریق DNS به‌صورت معکوس resolve کند و DNS کند است. راه‌حل:

# /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication no
rc-service sshd restart

خارج کردن خودتان از سیستم

اگر PasswordAuthentication no را تنظیم کرده‌اید و کلید عمومی به‌درستی کپی نشده باشد، دیگر نمی‌توانید وارد شوید! پیش از بستن نشست فعلی، یک ترمینال دیگر باز کنید و بررسی کنید که اتصال با کلید درست کار می‌کند یا نه. اگر کار نکرد، پیکربندی را به حالت قبل برگردانید و دوباره تلاش کنید.

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

SSH در Gentoo با بستهٔ net-misc/openssh نصب می‌شود و سرویس sshd آن را اجرا می‌کند. مهم‌ترین گام‌های امن‌سازی عبارت‌اند از: غیرفعال‌کردن ورود مستقیم root، فعال‌کردن احراز هویت با کلید ed25519، غیرفعال‌کردن ورود با رمز عبور و نصب fail2ban. فایل ~/.ssh/config و ssh-agent نیز تجربهٔ کاربری را بهبود می‌بخشند.

برای ایجاد کاربران و گروه‌ها به آموزش Users و برای اجرای دستورات مدیریتی به آموزش sudo مراجعه کنید. برای کلیات شبکه هم آموزش Networking را ببینید.

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

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