Future ForgeFuture ForgeFuture ForgeFuture Forge
خدماتنمونه‌کارهاپکیج‌هاابزارهای رایگانیادداشت‌هادرباره ماتماس
شروع پروژه
  1. خانه
  2. /یادداشت‌ها
Future ForgeFuture Forge

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

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
Future ForgeFuture Forge

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

خدمات

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

کاوش

نمونه‌کارهایادداشت‌هاپرسش‌هاپکیج‌ها

ابزارهای رایگان

ممیزی مهندسیمشاور معماریتخمین پروژهابزار پرامپت

شرکت

درباره ماتماسحریم خصوصیشرایط استفاده

پروژه‌تان را مطرح کنید

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

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
GitHubLinkedIn

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

خانهخدماتابزارهای رایگانشروع پروژه
عملیات و استقرار

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

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

سا
سهیل ابراهیم‌پور

بنیان‌گذار و مهندس محصول

·۲۹ شهریور ۱۴۰۵·4 دقیقه مطالعه
کلید SSHssh-keygened25519authorized_keysssh-copy-idssh-agentpassphrase
استیکی Private Key و Public 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 است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

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

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

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

خدمات مرتبط

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

اگر موضوع این مقاله به سیستم یا محصول شما نزدیک است، می‌توانیم درباره دامنه واقعی صحبت کنیم.

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

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

سهیل ابراهیم‌پور
یادداشت‌ها
Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه
تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload
Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار
چرا همیشه به Kubernetes نیاز ندارید؟
Kubernetes چیست؟ اجرای مقاوم workloadهای کانتینری

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

Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه

۲۹ شهریور ۱۴۰۵

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

تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload

۲۹ شهریور ۱۴۰۵

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

Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار

۲۹ شهریور ۱۴۰۵

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

چرا همیشه به Kubernetes نیاز ندارید؟

۲۹ شهریور ۱۴۰۵

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

Kubernetes چیست؟ اجرای مقاوم workloadهای کانتینری

۲۹ شهریور ۱۴۰۵
همه یادداشت‌ها219
معماری نرم‌افزار13
واژه‌نامه37
عملیات و استقرار87
مهندسی محصول74
راهنمای وب8
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
پروژه‌تان را مطرح کنید
ابزارهای رایگان
پروژه‌تان را مطرح کنید