پیکربندی SSH در Arch Linux
نصب و پیکربندی امن OpenSSH در Arch Linux: کلیدهای SSH، تأمین امنیت، port forwarding و بهترین روشها.
OpenSSH استاندارد طلایی برای دسترسی از راه دور به لینوکس است. در این آموزش، نصب، پیکربندی امن، کلیدهای SSH، و قابلیتهای پیشرفته مانند port forwarding را بهطور کامل مرور میکنیم.
SSH چیست؟
SSH (Secure Shell) پروتکلی رمزنگاریشده برای دسترسی امن به سیستمهای راهدور است. کاربردهای اصلی:
- دسترسی خط فرمان به سرور
- انتقال امن فایل (SCP, SFTP)
- تونلکردن ترافیک (port forwarding)
- اجرای دستورات از راه دور
- پشتیبانگیری خودکار
نصب OpenSSH
# نصب سرور و کلاینت
sudo pacman -S opensshاین بسته هم ssh (کلاینت) و هم sshd (سرور) را نصب میکند.
راهاندازی سرویس
# شروع sshd
sudo systemctl start sshd
# فعالسازی در بوت
sudo systemctl enable sshd
# بررسی وضعیت
systemctl status sshdتست محلی
پس از شروع سرویس، آن را بهصورت محلی تست کنید:
ssh username@localhostاگر با کاربر فعلی و رمز عبور وارد شدید، sshd درست کار میکند.
فایل پیکربندی سرور
فایل پیکربندی sshd در /etc/ssh/sshd_config قرار دارد. نسخهٔ پیکربندیشدهٔ موقت در /etc/ssh/sshd_config است؛ برای پیکربندی سفارشی، فایل /etc/ssh/sshd_config.d/ را ترجیح دهید:
sudo nano /etc/ssh/sshd_config.d/custom.confپیکربندی امن پیشنهادی
# پورت (پیشفرض 22، میتوانید تغییر دهید)
Port 22
# فقط IPv4
AddressFamily inet
# پروتکل 2 (پیشفرض، امنتر)
Protocol 2
# کلیدهای میزبان
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
# ورود با کلید (پیشنهادی)
PubkeyAuthentication yes
# غیرفعالکردن ورود با رمز (پس از تنظیم کلید)
PasswordAuthentication no
# غیرفعالکردن ورود root
PermitRootLogin no
# محدودیت کاربران مجاز
AllowUsers alice bob
# تنظیمات لاگ
LogLevel VERBOSE
# زمان بیکاری
ClientAliveInterval 300
ClientAliveCountMax 2
# غیرفعالکردن X11 forwarding (اگر نیاز ندارید)
X11Forwarding no
# محدودیت تلاشهای احراز هویت
MaxAuthTries 3
LoginGraceTime 30پس از ویرایش، سرویس را reload کنید:
sudo systemctl reload sshdهرگز سرویس را restart نکنید
برای اعمال تغییرات، از reload استفاده کنید، نه restart. restart اتصالات فعلی را قطع میکند، اما reload فقط پیکربندی را بارگذاری مجدد میکند.
تأیید سینتکس
قبل از reload، سینتکس فایل را بررسی کنید:
sudo sshd -tاگر خطایی نباشد، هیچ خروجی نمیدهد. اگر خطا باشد، نمایش داده میشود.
کلیدهای SSH
ساخت کلید
برای احراز هویت بدون رمز، کلید SSH بسازید:
# کلید ed25519 (پیشنهادی - سریع و امن)
ssh-keygen -t ed25519 -C "alice@myarch"
# یا کلید RSA 4096 (اگر ed25519 پشتیبانی نمیشود)
ssh-keygen -t rsa -b 4096 -C "alice@myarch"در طول فرایند:
- مسیر فایل: پیشفرض
~/.ssh/id_ed25519را بپذیرید - passphrase: رمزی برای محافظت از کلید خصوصی (توصیه میشود)
کپی کردن کلید عمومی به سرور
# روش ۱: با ssh-copy-id (سادهترین)
ssh-copy-id username@server
# روش ۲: دستی
cat ~/.ssh/id_ed25519.pub | ssh username@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"پس از کپی، بدون رمز عبور میتوانید وارد شوید:
ssh username@serverمزیت کلید SSH
کلید SSH بسیار امنتر از رمز عبور است. هر کلید ۲۵۶ بیتی (ed25519) معادل رمز عبور ۳۲ کاراکتری است که نمیشود با brute force شکست. علاوه بر این، کلید خصوصی هرگز از کامپیوتر شما خارج نمیشود.
ssh-agent — مدیریت passphrase
اگر برای کلید SSH خود passphrase تعیین کردهاید، تایپ آن در هر اتصال خستهکننده است. ssh-agent آن را در حافظه نگه میدارد:
# شروع ssh-agent
eval $(ssh-agent)
# افزودن کلید
ssh-add ~/.ssh/id_ed25519
# فهرست کلیدها
ssh-add -lبرای خودکارسازی در بوت، فایل ~/.bashrc یا ~/.zshrc:
if [ -z "$SSH_AUTH_SOCK" ]; then
eval $(ssh-agent -s) > /dev/null
fiاتصال به سرور
# اتصال ساده
ssh username@server
# با پورت مشخص
ssh -p 2222 username@server
# اجرای دستور و خروج
ssh username@server "uname -a"
# با کلید مشخص
ssh -i ~/.ssh/custom_key username@server
# با tunnel X11 (نمایش گرافیکی)
ssh -X username@serverفایل ~/.ssh/config
برای اتصال راحتتر، فایل ~/.ssh/config بسازید:
# سرور کاری
Host work
HostName work.example.com
User alice
Port 2222
IdentityFile ~/.ssh/work_key
ForwardAgent yes
# سرور خانگی
Host home
HostName 192.168.1.100
User bob
IdentityFile ~/.ssh/home_key
# تنظیمات کلی
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yesاکنون کافی است بزنید:
ssh workPort Forwarding
Local Forwarding
تونل از پورت محلی به پورت راهدور:
# دسترسی به MySQL راهدور روی پورت محلی 3306
ssh -L 3306:localhost:3306 username@server
# دسترسی به وبسرور داخلی راهدور
ssh -L 8080:internal-server:80 username@gatewayRemote Forwarding
تونل از پورت راهدور به پورت محلی:
# اشتراکگذاری وبسرور محلی روی سرور راهدور
ssh -R 8080:localhost:80 username@serverDynamic Forwarding (SOCKS proxy)
# ساخت پراکسی SOCKS5 روی پورت محلی 1080
ssh -D 1080 username@serverسپس مرورگر خود را روی localhost:1080 با SOCKS5 تنظیم کنید.
SCP و SFTP — انتقال فایل
SCP
# کپی فایل محلی به سرور
scp file.txt username@server:/path/to/destination/
# کپی فایل از سرور به محلی
scp username@server:/path/to/file.txt ./
# کپی دایرکتوری بهصورت بازگشتی
scp -r directory/ username@server:/path/
# با پورت مشخص
scp -P 2222 file.txt username@server:/path/SFTP
# اتصال تعاملی
sftp username@server
# در محیط sftp:
sftp> ls
sftp> cd /var/www
sftp> get file.txt
sftp> put local-file.txt
sftp> exitتأمین امنیت SSH
استفاده از fail2ban
برای محافظت در برابر brute force:
sudo pacman -S fail2ban
sudo systemctl enable --now fail2banپیکربندی /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 3600
findtime = 600محدودیت IP با TCP Wrapper
اگر فقط از IPهای مشخصی میخواهید اتصال برقرار شود، فایل /etc/hosts.allow:
sshd: 192.168.1.0/24 203.0.113.5و فایل /etc/hosts.deny:
sshd: ALLتغییر پورت پیشفرض
تغییر پورت از ۲۲ به پورت دیگر، حملات خودکار را کاهش میدهد:
Port 2222سپس با ssh -p 2222 متصل شوید.
تغییر پورت امنیت ایجاد نمیکند
تغییر پورت فقط noise (اسکنهای خودکار) را کاهش میدهد. مهاجم هدفمند با اسکن پورتها میتواند پورت جدید را پیدا کند. برای امنیت واقعی، از کلید SSH و fail2ban استفاده کنید.
لاگهای SSH
# مشاهدهٔ لاگهای sshd
journalctl -u sshd
# فقط لاگهای امروز
journalctl -u sshd --since today
# تلاشهای ناموفق
journalctl -u sshd | grep "Failed"عیبیابی
اتصال برقرار نمیشود
# بررسی وضعیت سرویس
sudo systemctl status sshd
# بررسی گشوده بودن پورت
sudo ss -tlnp | grep ssh
# بررسی firewall
sudo iptables -Lکلید کار نمیکند
# بررسی پرمیشنها
ls -la ~/.ssh/
# باید:
# .ssh: 700
# authorized_keys: 600
# id_ed25519: 600
# id_ed25519.pub: 644
# اصلاح پرمیشن
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
# تست با verbose
ssh -v username@serverPermission denied (publickey)
# در سرور، بررسی کنید که PubkeyAuthentication فعال است
sudo grep -i pubkey /etc/ssh/sshd_config
# و فایل authorized_keys درست است
cat ~/.ssh/authorized_keysخلاصه
در این آموزش:
- OpenSSH را نصب و پیکربندی کردید
- با کلیدهای SSH کار کردید
- فایل
~/.ssh/configرا ساختید - با port forwarding و SCP آشنا شدید
- امنیت SSH را تقویت کردید
SSH ابزاری است که هر مدیر سیستم و توسعهدهندهای باید به آن مسلط باشد. با پیکربندی درست، هم امن و هم کارآمد است.
در آموزش بعدی، با نصب محیط دسکتاپ GNOME آشنا میشوید.
پرسشهای رایج
آیا باید هر دو ssh و sshd را نصب کنم؟
openssh بستهٔ کامل است و هم کلاینت و هم سرور را نصب میکند. اگر فقط میخواهید به سرورهای دیگر وصل شوید (نه سرور باشید)، نیازی به فعالسازی sshd نیست.
کدام کلید بهتر است: ed25519 یا RSA؟
ed25519 سریعتر، کوچکتر و امنتر است. توصیه میشود. RSA فقط اگر با سیستمهای قدیمی سر و کار دارید (با حداقل ۴۰۹۶ بیت).
چگونه چند کلید SSH داشته باشم؟
در ~/.ssh/config برای هر سرور، IdentityFile مشخص کنید:
Host github.com
IdentityFile ~/.ssh/github_key
Host gitlab.com
IdentityFile ~/.ssh/gitlab_keyاین صفحه در تاریخ ۹ تیر ۱۴۰۵ بهروزرسانی شده است.