Future ForgeFuture ForgeFuture ForgeFuture Forge
ServicesWorkPackagesFree toolsNotesAboutContact
Start
  1. Home
  2. /Notes
Future ForgeFuture Forge

Product engineering studio — design, build, and deploy software.

Discuss your project

Contact

hello@futureforge.ir09128464105
Future ForgeFuture Forge

Product engineering studio — design, build, and deploy software.

Services

Product engineeringFull-stack engineeringEngineering auditArchitecture consultingInfrastructure and deploymentAI in the product

Explore

WorkNotesFAQPackages

Free tools

Engineering auditArchitecture advisorProject estimatorPrompt tool

Company

AboutContactPrivacyTerms of use

Discuss your project

Describe the problem and the constraints. If there is a fit, we will schedule a conversation.

Discuss your project

Contact

hello@futureforge.ir09128464105
GitHubLinkedIn

© 2026 FutureForge. All rights reserved.

HomeServicesFree toolsStart
Operations

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

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

SE
Soheil Ebrahimpour

Founder & product engineer

·Sep 20, 2026·4 min read
کلید 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

Author

SE

Soheil Ebrahimpour is the founder of FutureForge. He works on product design, architecture, and getting custom software into production.

Related notes

Related notes

Categories

Related services

From note to project

If this topic is close to your product or system, we can talk about the real scope.

If you are unsure about architecture or the build path, we can talk about the project.

Describe the problem and the constraints. If there is a fit, we will schedule a conversation.

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

Operations

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

Sep 20, 2026

Operations

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

Sep 20, 2026

Operations

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

Sep 20, 2026

Operations

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

Sep 20, 2026

Operations

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

Sep 20, 2026
All notes219
Software architecture13
Glossary37
Operations87
Product engineering74
Web guide8
Product engineering
Full-stack engineering
Engineering audit
Architecture consulting
Infrastructure and deployment
Discuss your project
Free tools
Discuss your project