کلید SSH: ساخت، نصب و مدیریت احراز هویت بدون رمز
ساخت جفت کلید 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 عمومی.
چرخش و لغو
- کلید جدید بسازید و به 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
نویسنده
سهیل ابراهیمپور بنیانگذار FutureForge است. روی طراحی محصول، معماری و استقرار نرمافزار سفارشی کار میکند.
یادداشتهای مرتبط
اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، میتوانید درباره پروژه صحبت کنیم.
مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ میکنیم.




