مقدمه
SSH (Secure Shell) پروتکلی است رمزنگاریشده برای برقراری یک کانال ایمن بهمنظور ورود و اجرای فرمان روی یک سیستم از راه دور. این راهنمای بازنویسیشده مفاهیم اصلی SSH، نحوه کار، روشهای احراز هویت (رمز عبور و کلیدهای SSH)، پیکربندیهای سمت سرور و کلاینت، مدیریت چند اتصال، انتقال فایل، تونلزنی (port forwarding)، نکات امنیتی و خطاهای رایج را بهصورت گامبهگام و عملی منتقل میکند. هر بخش شامل دستوراتی است که آمادهٔ اجرا روی ترمینال هستند.
توجه: در تمام دستورات جایگزینهای ضروری (مثل username، your_server_ip، /path/to/key) مشخص شدهاند؛ قبل از اجرا آنها را با مقادیر خود عوض کنید.
فهرست
– مفهوم و ساز و کار کلی SSH
– نصب و ابزارهای SSH در سیستمهای مختلف
– نخستین اتصال (basic SSH connection)
– ایجاد و استفاده از کلیدهای SSH (SSH key pair)
– اضافه کردن کلید عمومی به سرور
– غیر فعالسازی ورود با رمز عبور و استفادهٔ اختصاصی از کلیدها
– مدیریت فایل پیکربندی کلاینت (ssh_config) برای چند اتصال
– انتقال فایلها (scp, sftp, rsync)
– تونلزنی و فوروارد پورت (local, remote, dynamic)
– نگهداری جلسات (screen, tmux, autossh)
– خطاهای رایج و رفع آنها
– بهترین شیوههای امنیتی SSH
– نکات ویژه برای ویندوز، macOS و لینوکس
1- مفهوم و چگونگی کار SSH
– SSH یک پروتکل لایهٔ کاربرد است که با رمزنگاری ترافیک بین کلاینت و سرور، محرمانگی و صحت پیامها را تضمین میکند.
– وقتی متصل میشوید، یک نشست شل از راه دور باز میشود و دستوری که مینویسید روی سرور اجرا میشود.
– احراز هویت میتواند با رمز عبور باشد یا با جفت کلید عمومی/خصوصی؛ روش کلیدها امنتر و مرسومتر است.
2- نصب و ابزارهای SSH
– بستهٔ OpenSSH معمولترین ابزار است و روی اکثر لینوکس و macOS بهصورت پیشفرض نصب است. ویندوز 10/11 هم میتواند OpenSSH داشته باشد یا از PuTTY استفاده شود.
دستورات نصب:
– روی Ubuntu/Debian:
sudo apt update sudo apt install -y openssh-client openssh-server
– روی CentOS/RHEL:
sudo yum install -y openssh-clients openssh-server
– روی Fedora:
sudo dnf install -y openssh-clients openssh-server
– فعالسازی و شروع سرور SSH (systemd):
sudo systemctl enable --now ssh
– بررسی وضعیت سرویس (systemd):
sudo systemctl status ssh
– ویندوز (PowerShell) — فعالسازی OpenSSH client اگر نصب نیست:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
3- اتصال پایه (Basic SSH connection)
– قالب عمومی:
ssh username@your_server_ip
– مثال:
ssh root@203.0.113.10
شرح مراحل:
– برای اولین اتصال از شما خواسته میشود fingerprint میزبان را تأیید کنید — پس yes را بزنید.
– سپس فرایند احراز هویت انجام میشود (رمز عبور یا کلید).
– برای وارد شدن به کاربری غیر-root، از نام کاربری مناسب استفاده کنید:
ssh alice@203.0.113.10
4- ایجاد و مدیریت کلیدهای SSH (SSH key pair)
– تولید یک جفت کلید عمومی/خصوصی با الگوریتم ایمن (ed25519 توصیه میشود):
ssh-keygen -t ed25519 -C "your_email@example.com"
– یا اگر ed25519 پشتیبانی نمیشود از rsa با طول کافی استفاده کنید:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
– هنگام اجرای ssh-keygen، مسیر و نام فایل را انتخاب کنید یا Enter بزنید تا پیشفرض (~/.ssh/id_ed25519) ذخیره شود. میتوانید یک passphrase (گذرواژه برای کلید خصوصی) هم تنظیم کنید.
5- اضافه کردن کلید عمومی به سرور
روش ساده با ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@your_server_ip
اگر ssh-copy-id نصب نیست، دستور دستی:
ssh username@your_server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh" cat ~/.ssh/id_ed25519.pub | ssh username@your_server_ip "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
تأیید اتصال با کلید:
ssh -i ~/.ssh/id_ed25519 username@your_server_ip
6- تنظیمات سمت سرور (sshd_config)
فایل پیکربندی معمولاً در /etc/ssh/sshd_config قرار دارد. نکات رایج:
– تغییر پورت پیشفرض (برای کاهش آلودگی اسکریپتها):
Port 2222
– غیر فعالسازی ورود root (توصیهشده):
PermitRootLogin no
– اجازه یا عدم اجازهٔ ورود با رمز:
PasswordAuthentication no
– اجبار استفاده از کلید:
PubkeyAuthentication yes
نمونه دستورات برای ویرایش و بارگذاری مجدد سرویس:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo nano /etc/ssh/sshd_config sudo systemctl restart ssh
توجه مهم: پیش از غیرفعالکردن PasswordAuthentication مطمئن شوید که اتصال کلید کار میکند؛ وگرنه دسترسی خود را از دست میدهید.
7- مدیریت چند اتصال با ssh_config (کلاینت)
– مسیر فایل: ~/.ssh/config
– میتوانید میزبانهای متعدد را با نامهای کوتاه پیکربندی کنید:
نمونه entry:
Host myprod HostName 203.0.113.10 User alice Port 2222 IdentityFile ~/.ssh/id_ed25519
پس از ذخیره، اتصال کوتاه:
ssh myprod
8-انتقال فایلها و همگامسازی
– scp (copy over SSH):
scp /local/path/file.txt username@your_server_ip:/remote/path/
– از سرور به کلاینت:
scp username@your_server_ip:/remote/path/file.txt /local/path/
– rsync (همگامسازی کارآمد):
rsync -avz -e "ssh -p 2222 -i ~/.ssh/id_ed25519" /local/dir/ username@your_server_ip:/remote/dir/
– sftp (جلسهٔ تعاملی فایل):
sftp -i ~/.ssh/id_ed25519 username@your_server_ip
– انتقال چند فایل با scp:
scp -r /local/dir username@your_server_ip:/remote/dir
9- تونلزنی و فوروارد پورت
– Local port forwarding (فوروارد پورت محلی به هدف از طریق سرور):
ssh -L local_port:destination_host:dest_port username@your_server_ip
مثال: فوروارد پورت محلی 8080 به دیتابیس داخلی 127.0.0.1:5432 از طریق سرور
ssh -L 8080:127.0.0.1:5432 alice@203.0.113.10
– Remote port forwarding (باز کردن پورتی روی سرور برای دسترسی به کلاینت):
ssh -R remote_port:local_host:local_port username@your_server_ip
مثال: دسترسی از سرور به وب محلی شما روی پورت 3000
ssh -R 9000:127.0.0.1:3000 alice@203.0.113.10
– Dynamic port forwarding (استفاده به عنوان پراکسی SOCKS):
ssh -D 1080 username@your_server_ip
سپس مرورگر را روی پراکسی SOCKS5 با localhost:1080 تنظیم کنید.
10- نگهداری جلسات طولانی و اتصالات پایدار
– اگر جلسهٔ شما قطع میشود از ابزارهایی مثل tmux یا screen روی سرور استفاده کنید:
ssh username@your_server_ip tmux new -s mysession
– استفاده از autossh برای بازسازی خودکار تونلها:
autossh -M 0 -f -N -L 8080:127.0.0.1:5432 alice@203.0.113.10
11- خطاهای رایج و راهحلها
– “Connection refused”: سرویس sshd روی سرور اجرا نمیشود یا فایروال پورت را بسته است.
راهحل:
sudo systemctl status ssh sudo ufw allow 22/tcp
– “Permission denied (publickey,password)”: مشکل احراز هویت؛ کلید عمومی در authorized_keys نیست یا دسترسیها اشتباه است.
راهحلها:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
– هشدار “REMOTE HOST IDENTIFICATION HAS CHANGED”: کلید میزبان تغییر کرده — ممکن است مهاجم MITM یا تغییر درست سرور باشد. حذف ورودی قدیمی:
ssh-keygen -R your_server_ip
– زمان زیاد برای اتصال یا تایماوت: بررسی شبکه، فایروال و سرویس sshd.
12- فایروال و محدود کردن دسترسی
– استفاده از فایروال (UFW مثال):
sudo ufw allow 2222/tcp sudo ufw enable sudo ufw status
– محدود کردن کاربران مجاز در sshd_config:
AllowUsers alice bob
13- احراز هویت با عامل SSH (ssh-agent) و اضافه کردن کلید
– راهاندازی ssh-agent و اضافهکردن کلید:
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519
– در macOS میتوانید از keychain استفاده کنید؛ در ویندوز با Pageant (PuTTY) یا OpenSSH agent کار مشابه انجام میشود.
14- احراز هویت دو مرحلهای و کلیدهای محافظتشده توسط passphrase
– همواره برای کلید خصوصی از passphrase استفاده کنید.
– برای سطوح بالاتر امنیت میتوان از دستگاه سختافزاری (YubiKey یا سایر FIDO/WebAuthn) برای ذخیرهٔ کلید خصوصی استفاده کرد.
15- اجرای دستورات از راه دور
– اجرای یک فرمان ساده روی سرور و خروج:
ssh username@your_server_ip 'sudo apt update && sudo apt upgrade -y'
– اجرای فایلی از راه دور:
ssh username@your_server_ip 'bash -s' < local-script.sh
16- کلیدهای چندگانه و گزینه -i
– اگر چند کلید دارید:
ssh -i /path/to/other_key username@your_server_ip
17- افزایش ایمنی: تغییر پورت، غیرفعالسازی root، استفاده از AllowUsers، محدودیت با Fail2Ban
– نصب و پیکربندی Fail2Ban برای جلوگیری از حملات brute-force:
sudo apt install -y fail2ban sudo systemctl enable --now fail2ban
– نمونهی قاعدهای در /etc/fail2ban/jail.local برای سرویس sshd:
[sshd] enabled = true maxretry = 5
18- پیکربندی پیشرفته: Certificate-based SSH (OpenSSH CA)
– برای محیطهای سازمانی میتوانید از CA در OpenSSH استفاده کنید تا کلاینتها و سرورها با امضای مرکزی اعتبارسنجی شوند؛ پیادهسازی شامل تولید CA key، امضای کلیدهای عمومی کاربر و پیکربندی trust on server است.
19- نکاتی برای ویندوز
– استفاده از Windows Terminal یا PowerShell همراه با OpenSSH client:
ssh username@your_server_ip
– برای PuTTY: تبدیل کلید خصوصی با PuTTYgen (از OpenSSH به PPK) و وارد کردن در Pageant برای مدیریت.
– اتصال SFTP با WinSCP یا FileZilla (با پشتیبانی از کلید خصوصی).
20- نکاتی برای macOS و لینوکس
– از ssh-agent/Keychain استفاده کنید تا نیازی به وارد کردن passphrase در هر اتصال نباشد.
– از فایل ~/.ssh/config برای سادهسازی وارسیها و گزینههای سفارشی استفاده کنید.
21- نمونهٔ کارهای عملی رایج (با دستورات)
– ساخت جفت کلید و اضافه به سرور:
ssh-keygen -t ed25519 -C "me@example.com" ssh-copy-id -i ~/.ssh/id_ed25519.pub alice@203.0.113.10
– اتصال سریع با نام کوتاه:
echo -e "Host myserver\n HostName 203.0.113.10\n User alice\n IdentityFile ~/.ssh/id_ed25519\n Port 2222" >> ~/.ssh/config ssh myserver
– همگامسازی دایرکتوری:
rsync -avz -e "ssh -i ~/.ssh/id_ed25519" /local/project/ alice@203.0.113.10:/home/alice/project/
– ساخت تونل محلی برای دسترسی به دیتابیس:
ssh -L 5432:127.0.0.1:5432 alice@203.0.113.10
22- چکلیست امنیتی کوتاه (قابل اجرا)
– تولید کلید ed25519 و استفاده از passphrase:
ssh-keygen -t ed25519 -C "you@example.com"
– غیرفعالسازی ورود root و رمز در sshd_config، سپس راهاندازی مجدد ssh:
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config sudo sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart ssh
– تنظیم Fail2Ban:
sudo apt install -y fail2ban sudo systemctl enable --now fail2ban
– محدود کردن دسترسی با UFW:
sudo ufw allow 2222/tcp sudo ufw enable
23- خطمشیها و نکات عملیاتی
– همیشه کلید خصوصی را امن نگه دارید (chmod 600).
– قبل از اعمال تغییرات امنیتی (مثل غیرفعالسازی رمز) اتصال کلیدی خود را تست کنید تا دسترسی قطع نشود.
– لاگها را بررسی کنید: /var/log/auth.log یا /var/log/secure بسته به توزیع.
– از کلیدهای کوتاه مدت یا بهکارگیری CA برای کاربران موقت استفاده کنید.
24- منابع عملی برای ادامه
– مستندات OpenSSH (man ssh, man sshd_config)
– راهنماهای پیکربندی توزیع خود و ابزارهایی مثل fail2ban، ufw، iptables
خلاصهٔ اجرایی مرحلهبهمرحله (دستورات هر مرحله در خط مجزا، آماده اجرا)
1. نصب OpenSSH (Ubuntu):
sudo apt update sudo apt install -y openssh-client openssh-server
2. تولید جفت کلید امن (ed25519):
ssh-keygen -t ed25519 -C "your_email@example.com"
3. اضافهکردن کلید عمومی به سرور:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@your_server_ip
4. اتصال با کلید:
ssh -i ~/.ssh/id_ed25519 username@your_server_ip
5. پشتیبانگیری از فایل پیکربندی sshd و تغییر تنظیمات امنیتی:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo nano /etc/ssh/sshd_config sudo systemctl restart ssh
6. غیرفعالکردن ورود با رمز (پس از اطمینان از کارکرد کلیدها):
sudo sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart ssh
7. تنظیم فایروال (مثال: اجازه پورت 2222 و فعالسازی UFW):
sudo ufw allow 2222/tcp sudo ufw enable
8. استفاده از ssh-config برای راحتی:
mkdir -p ~/.ssh chmod 700 ~/.ssh cat >> ~/.ssh/config <<'EOF' Host myserver HostName your_server_ip User username Port 2222 IdentityFile ~/.ssh/id_ed25519 EOF chmod 600 ~/.ssh/config
9. تونلزنی محلی برای دسترسی به سرویس داخلی:
ssh -L 8080:127.0.0.1:80 username@your_server_ip
10. راهاندازی autossh برای تونل پایدار:
sudo apt install -y autossh autossh -M 0 -f -N -L 8080:127.0.0.1:80 username@your_server_ip
جمعبندی
با دنبالکردن مراحل بالا میتوانید بهطور ایمن و مؤثر از SSH برای مدیریت سرورهای راه دور استفاده کنید: نصب OpenSSH، تولید و نصب کلیدها، پیکربندی سرور و کلاینت، انتقال فایل، استفاده از تونلزنی و اتخاذ بهترین شیوههای امنیتی. همیشه تغییرات حساس را با احتیاط اعمال کنید و از دسترسی کلیدی بهعنوان روش ترجیحی برای احراز هویت استفاده نمایید.





قوانین ارسال دیدگاه
لطفاً در ارسال دیدگاه از کلمات مناسب استفاده کنید. ارسال اسپم ممنوع است.