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 yessudo 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 myserverPort Forwarding
SSH میتواند تونل امن برای عبور ترافیک شبکه ایجاد کند:
Local Forwarding
دسترسی به یک سرویس روی سرور از طریق پورت محلی:
# دسترسی به وبسرور داخلی سرور (10.0.0.5:80) از طریق پورت محلی 8080
ssh -L 8080:10.0.0.5:80 user@server
# سپس در مرورگر: http://localhost:8080Remote Forwarding
دسترسی از سرور به سرویس محلی شما:
# در دسترسقرار دادن پورت محلی 3000 روی سرور در پورت 8080
ssh -R 8080:localhost:3000 user@serverDynamic 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 sshdfail2ban بهطور پیشفرض بعد از ۵ تلاش ناموفق ورود، 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 استفاده کنید.
بهعنوان گام بعدی:
- آموزش sudo را برای دادن دسترسی محدود به کاربران ببینید
- آموزش مدیریت کاربران را برای ساخت حساب کاربری بخوانید
- آموزش systemd را برای مدیریت سرویسها مرور کنید
این صفحه در تاریخ ۹ تیر ۱۴۰۵ بهروزرسانی شده است.