FutureForgeFutureForge

خدمات FutureForge

  • طراحی و ساخت محصولاز شناخت نیاز تا انتشار محصول، یک مسیر روشن پیش رو دارید.
  • توسعه فول‌استکوب‌اپلیکیشن، API و داده را هماهنگ و یکپارچه توسعه دهید.
  • ممیزی مهندسیپیش از هزینه‌ی بیشتر، از وضعیت واقعی محصول‌تان باخبر شوید.
  • مشاوره معماریپیش از یک تصمیم فنی پرهزینه، گزینه‌ها را درست بسنجید.
  • زیرساخت و استقرارمحصول را با خیال راحت منتشر کنید و پایدار نگه دارید.
  • هوش مصنوعی در محصولهوش مصنوعی را فقط جایی به کار می‌گیریم که مسئله‌ای را حل کند.
نمونه‌کارهایادداشت‌هاقیمت‌گذاریدرباره ما
شروع گفتگو
  1. خانه
  2. /یادداشت‌ها
  3. /یادداشت‌ها
FutureForge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

خدمات

طراحی سایت با وردپرستوسعه اختصاصیمهندسی محصولزیرساخت و استقرارمشاوره معماریهوش مصنوعی در محصول

راهنمای انتخاب

یادداشت‌هاقیمت‌گذاریتخمین هزینه پروژهمقایسه روش‌هانمونه‌کارهادرباره ماتماس

ارتباط

hello@futureforge.ir

ایده‌ای برای ساخت دارید؟

نیازتان را مطرح کنید تا درباره مسیر توسعه و قدم بعدی صحبت کنیم.

شروع گفتگو

© 2026 FutureForge. همه حقوق محفوظ است.

حریم خصوصیشرایط استفاده
خانهنمونه‌کارشروعتماس
عملیات و استقرار

کلید SSH: ساخت، نصب و مدیریت احراز هویت بدون رمز

سا
سهیل ابراهیم‌پور
·۲۹ شهریور ۱۴۰۵·4 دقیقه مطالعه
کلید SSHssh-keygened25519authorized_keysssh-copy-idssh-agentpassphrase
استیکی Private Key و Public Key کنار لپ‌تاپ

ساخت جفت کلید ed25519، نصب کلید عمومی، agent، passphrase و اشتباه‌هایی که private key را لو می‌دهد.

ورود با گذرواژه روی پورت ۲۲ِ باز به اینترنت، خوراک اسکنرهای بروت‌فورس است. کلید SSH (جفت کلید عمومی/خصوصی) اجازه می‌دهد سرور فقط امضای دارندهٔ کلید خصوصی را بپذیرد — بدون ارسال رمز روی خط. مستندات اوبونتو صریحاً ed25519 را به‌خاطر اندازهٔ کوتاه‌تر و هزینهٔ محاسباتی کمتر پیشنهاد می‌کند؛ RSA 4096 هنوز جایگزین سازگار است.

این مقاله ساخت، نصب، مجوز فایل‌ها، agent و خطاهای رایج را پوشش می‌دهد. خاموش کردن کامل password بعد از اطمینان از کارکرد کلید، موضوع سخت‌سازی است.

کلید خصوصی محلی و کلید عمومی روی سرور

پاسخ کوتاه

روی کلاینت `ssh-keygen -t ed25519` بزنید، passphrase بگذارید، کلید عمومی را به `~/.ssh/authorized_keys` کاربر روی سرور اضافه کنید (ترجیحاً با `ssh-copy-id`)، مجوزها را سفت کنید، با یک نشست جدید تست کنید، و private key را هرگز به مخزن یا ایمیج نفرتید. یک کلید برای هر انسان/دستگاه؛ اشتراک private key یعنی اشتراک هویت.

کلید عمومی قفل است، کلید خصوصی کلید فیزیکی — فقط قفل را روی در سرور می‌کوبید.

جفت کلید چگونه کار می‌کند؟

کلید خصوصی فقط پیش شما می‌ماند و برای اثبات هویت امضا می‌سازد. کلید عمومی روی سرور در authorized_keys نشسته و امضا را تأیید می‌کند. سرور هرگز private key را نمی‌بیند. اگر private لو برود، مهاجم با همان هویت شما وارد می‌شود — مگر passphrase و محافظت‌های دیگر مانع شوند.

ساخت کلید

bash

ssh-keygen -t ed25519 -C 'you@company - laptop' # جایگزین سازگارتر با سیستم‌های خیلی قدیمی: ssh-keygen -t rsa -b 4096 -C 'you@company'

مسیر پیش‌فرض معمولاً ~/.ssh/id_ed25519 و ~/.ssh/id_ed25519.pub است. passphrase لایهٔ دوم روی دیسک کلاینت است؛ خالی گذاشتن راحتی می‌آورد و با دزدی فایل، نفوذ کامل.

bash

ls -l ~/.ssh/id_ed25519* ssh-keygen -lf ~/.ssh/id_ed25519.pub

نصب کلید روی سرور

روش توصیه‌شده

bash

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server.example.com

روش دستی

bash

mkdir -p ~/.ssh chmod 700 ~/.ssh cat >> ~/.ssh/authorized_keys << 'EOF' ssh-ed25519 AAAA... comment EOF chmod 600 ~/.ssh/authorized_keys

اوبونتو تأکید می‌کند فقط کاربر احراز هویت‌شده باید اجازهٔ نوشتن روی authorized_keys داشته باشد؛ `chmod go-w` روی فایل ضروری است. StrictModes در sshd معمولاً مجوزهای شلخته را رد می‌کند.

اولین ورود با کلید

bash

ssh -i ~/.ssh/id_ed25519 user@server.example.com ssh -v user@server.example.com

-v مراحل احراز هویت را نشان می‌دهد؛ اگر سرور کلید را نمی‌پذیرد، اغلب مجوز، مسیر فایل، یا کاربر اشتباه است. لاگ سمت سرور:

bash

sudo journalctl -fu ssh.service

چند کلید و ~/.ssh/config

text

Host bastion HostName bastion.example.com User deploy IdentityFile ~/.ssh/id_ed25519_work IdentitiesOnly yes

bash

ssh bastion

IdentitiesOnly yes از امتحان کردن همهٔ کلیدهای agent و قفل شدن با MaxAuthTries جلوگیری می‌کند.

ssh-agent و passphrase

bash

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 ssh-add -l

agent کلید قفل‌گشایی‌شده را در حافظه نگه می‌دارد تا هر ssh دوباره passphrase نپرسد. روی میزکار، یکپارچگی با login session رایج است؛ روی CI از کلیدهای کوتاه‌عمر یا CA/گواهی سازمانی استفاده کنید نه کپی دائم private روی runner عمومی.

چرخش و لغو

  1. کلید جدید بسازید و به authorized_keys اضافه کنید.
  2. با کلید جدید از نشست جداگانه وارد شوید.
  3. خط کلید قدیمی را حذف کنید.
  4. اگر لو رفته بود: همهٔ سرورهایی که آن pub را داشتند پاک کنید و حادثه را ثبت کنید.

برای مقیاس بزرگ‌تر، OpenSSH از CA و گواهی کاربر پشتیبانی می‌کند؛ فراتر از این مقالهٔ مقدماتی است ولی مسیر رشد تیم است.

اشتباه‌های خطرناک

  • commit کردن id_ed25519 در git.
  • ارسال private در چت یا تیکت.
  • یک private مشترک بین کل تیم.
  • مجوز 777 روی .ssh.
  • گذاشتن کلید روی سرور پرش (jump) به‌صورت محافظت‌نشده.

جدول تصمیم الگوریتم

الگوریتموضعیت عملینکته
ed25519پیشنهاد پیش‌فرض مدرنکوتاه، سریع؛ اوبونتو توصیه می‌کند
RSA 4096سازگاری گستردهطولانی‌تر؛ هنوز رایج
ECDSAبسته به منحنیکمتر از ed25519 توصیهٔ عمومی
DSAمنسوخاستفاده نکنید

خلاصه

کلید SSH هویت شما روی سیم است: ed25519 بسازید، عمومی را درست نصب کنید، مجوز را سفت کنید، passphrase و agent را بفهمید، و private را مثل رمز اصلی محافظت کنید. پس از ورود پایدار با کلید، نوبت بستن password و بقیهٔ سخت‌سازی sshd است.

سوالات متداول

می‌توان چند خط در authorized_keys داشت؟

بله؛ هر خط یک کلید عمومی. برای هر لپ‌تاپ/انسان یک خط جدا نگه دارید تا لغو انتخابی ممکن شود.

چرا Permission denied (publickey)؟

کلید اشتباه، کاربر اشتباه، مجوز بد، یا PubkeyAuthentication غیرفعال. با -vv و journal سمت سرور شروع کنید.

منابع و مراجع

  • Ubuntu — OpenSSH server (SSH keys): https://documentation.ubuntu.com/server/how-to/security/openssh-server/
  • ssh-keygen(1): https://man.openbsd.org/ssh-keygen.1
  • ssh-agent(1): https://man.openbsd.org/ssh-agent.1
  • sshd(8) AUTHORIZED_KEYS: https://man.openbsd.org/sshd.8

نویسنده

سا

سهیل ابراهیم‌پور بنیان‌گذار FutureForge است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

یادداشت‌های مرتبط

یادداشت‌های مرتبط

دسته‌بندی‌ها

خدمات مرتبط

از یادداشت تا پروژه

اگر با مسئله‌ای شبیه این روبه‌رو هستید، درباره‌ی شرایط پروژه‌تان با هم صحبت کنیم.

برای انتخاب مسیر فنی پروژه‌تان کمک می‌خواهید؟

از مسئله و محدودیت‌هایتان بگویید؛ اگر بتوانیم همراهی‌تان کنیم، برای گفت‌وگو هماهنگ می‌کنیم.

سهیل ابراهیم‌پور
یادداشت‌ها
امنیت n8n: اعتبارنامه، وب‌هوک و SSRF
نصب n8n روی سرور با Docker Compose
n8n چیست و چگونه کار می‌کند؟
امنیت فروشگاه اینترنتی: سایت، درگاه و فرایند عملیاتی
بازیابی سرور لینوکس بعد از خرابی دیسک یا استقرار اشتباه

عملیات و استقرار

امنیت n8n: اعتبارنامه، وب‌هوک و SSRF

۹ آبان ۱۴۰۵

عملیات و استقرار

نصب n8n روی سرور با Docker Compose

۸ آبان ۱۴۰۵

عملیات و استقرار

n8n چیست و چگونه کار می‌کند؟

۸ آبان ۱۴۰۵

عملیات و استقرار

امنیت فروشگاه اینترنتی: سایت، درگاه و فرایند عملیاتی

۶ آبان ۱۴۰۵

عملیات و استقرار

بازیابی سرور لینوکس بعد از خرابی دیسک یا استقرار اشتباه

۲ آبان ۱۴۰۵
همه یادداشت‌ها315
معماری نرم‌افزار31
واژه‌نامه37
عملیات و استقرار94
مهندسی محصول122
راهنمای وب31
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
شروع گفتگو
ابزارهای رایگان
شروع گفتگو