کلید SSH: ساخت، نصب و مدیریت احراز هویت بدون رمز
ساخت جفت کلید ed25519، نصب کلید عمومی، agent، passphrase و اشتباههایی که private key را لو میدهد.
Founder & product engineer

ورود با گذرواژه روی پورت ۲۲ِ باز به اینترنت، خوراک اسکنرهای بروتفورس است. کلید 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 عمومی.
چرخش و لغو
- کلید جدید بسازید و به authorized_keys اضافه کنید.
- با کلید جدید از نشست جداگانه وارد شوید.
- خط کلید قدیمی را حذف کنید.
- اگر لو رفته بود: همهٔ سرورهایی که آن 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
Soheil Ebrahimpour is the founder of FutureForge. He works on product design, architecture, and getting custom software into production.
Related notes
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.




