فارسی (Farsi)
€EUR

کلیدهای SSH در ویندوز: ed25519 با OpenSSH داخلی

3 min
سرور مجازی (VPS/VDS)

جفت کلید بسیار امن‌تر از رمز عبور است: کلید خصوصی هرگز از رایانه‌ی شما خارج نمی‌شود و ربات‌هایی که پورت 22 را اسکن می‌کنند نمی‌توانند آن را حدس بزنند. ویندوز 10 و 11 از قبل OpenSSH دارند؛ بنابراین یک کلید می‌سازید، روی VPS Linux Infrawire خود نصب می‌کنید، آن را در سرویس ssh-agent ویندوز بارگذاری‌شده نگه می‌دارید و در پایان ورود با رمز را خاموش می‌کنید.

📋 پیش‌نیازها

  • ویندوز 10 یا 11 با کلاینت OpenSSH (با ssh -V در PowerShell بررسی کنید).
  • یک VPS لینوکس (Ubuntu 24.04، Debian 12، AlmaLinux 9 یا Rocky 9) که هنوز با رمز می‌توانید وارد آن شوید: از بخش کاربری خود می‌توانید IP و رمز root مربوط به VPS را پیدا کنید.
  • حدود ده دقیقه و یک نشست SSH دوم یا کنسول VPS به‌عنوان تور ایمنی.
PowerShell
ssh -V

🔐 ساخت کلید ed25519

PowerShell را باز کنید (معمولی، نه با دسترسی مدیر) و اجرا کنید:

PowerShell
ssh-keygen -t ed25519 -C 'USER@my-pc'

مسیر پیش‌فرض C:\Users\USER\.ssh\id_ed25519 را بپذیرید و یک عبارت عبور وارد کنید. این عبارت کلید خصوصی را روی دیسک رمزگذاری می‌کند، پس فایل دزدیده‌شده بی‌فایده است. دو فایل ساخته می‌شود: id_ed25519 (خصوصی، هرگز به اشتراک نگذارید) و id_ed25519.pub (عمومی).

📤 کپی کلید عمومی روی VPS

ویندوز ssh-copy-id ندارد، پس کلید را دستی نصب کنید. ابتدا کلید عمومی را نمایش دهید و کل خط را کپی کنید:

PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub

با رمز وارد شوید و آن خط را روی سرور اضافه کنید (متن نمونه‌ی بین نقل‌قول‌های تکی را با کلید واقعی خود جایگزین کنید):

Bash
ssh root@VPS_IP mkdir -p ~/.ssh && chmod 700 ~/.ssh echo 'ssh-ed25519 AAAA...your-key... USER@my-pc' >> ~/.ssh/authorized_keys sed -i 's/\r$//' ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

خط sed پایان‌خط‌های ویندوز را که کلید را ناخوانا می‌کنند حذف می‌کند. برای این کار از پایپ PowerShell به ssh استفاده نکنید: Windows PowerShell 5.1 ممکن است به داده‌ها کاراکتر بازگشت به ابتدای خط اضافه کند.

🧰 فعال‌سازی ssh-agent در ویندوز

بدون عامل، باید در هر ورود عبارت عبور را تایپ کنید. سرویس ssh-agent نصب است اما به‌طور پیش‌فرض غیرفعال یا دستی است. در PowerShell با دسترسی مدیر:

PowerShell
Get-Service ssh-agent | Set-Service -StartupType Automatic Start-Service ssh-agent Get-Service ssh-agent

سپس در PowerShell معمولی، کلید خود را یک بار بارگذاری کنید و کلیدهای بارگذاری‌شده را فهرست کنید:

PowerShell
ssh-add $env:USERPROFILE\.ssh\id_ed25519 ssh-add -l

عامل کلید را پس از راه‌اندازی مجدد هم نگه می‌دارد، پس دوباره پرسیده نمی‌شود.

✅ آزمایش ورود با کلید

دوباره وصل شوید. باید بدون اینکه سرور رمز root را بخواهد، یک شل دریافت کنید:

PowerShell
ssh root@VPS_IP

برای دیدن دقیق روش استفاده‌شده، گزینه‌ی -v را اضافه کنید و دنبال Server accepts key و Authenticated to ... using publickey بگردید:

PowerShell
ssh -v root@VPS_IP

تا زمانی که این کار نکرده جلوتر نروید و این نشست را باز نگه دارید.

🚫 غیرفعال کردن احراز هویت با رمز در سرور

در Ubuntu و Debian ممکن است /etc/ssh/sshd_config.d/ از قبل فایلی (مثل 50-cloud-init.conf) داشته باشد که رمز عبور را فعال می‌کند. SSH اولین مقداری را که می‌خواند به‌کار می‌برد، پس فایلی بسازید که در ترتیب زودتر بیاید. روی VPS با کاربر root اجرا کنید:

Bash
grep -ri 'PasswordAuthentication' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ cat > /etc/ssh/sshd_config.d/10-keys-only.conf <<'EOF' PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-password EOF sshd -t && systemctl reload ssh

در AlmaLinux/Rocky نام سرویس sshd است: از systemctl reload sshd استفاده کنید. مطمئن شوید فایل اصلی sshd_config نزدیک ابتدا خط Include /etc/ssh/sshd_config.d/*.conf را دارد (به‌طور پیش‌فرض دارد). وقتی نحو درست باشد sshd -t چیزی چاپ نمی‌کند.

از یک پنجره‌ی جدید بررسی کنید که اکنون رمزها رد می‌شوند و کلید شما همچنان کار می‌کند:

PowerShell
ssh -o PubkeyAuthentication=no root@VPS_IP

پاسخ مورد انتظار Permission denied (publickey) است.

🛠️ عیب‌یابی

Permission denied (publickey). کلید در authorized_keys حساب درست نیست، در چند خط چسبانده شده یا مجوزها اشتباه است. روی سرور chmod 700 ~/.ssh و chmod 600 ~/.ssh/authorized_keys را اجرا کنید و بررسی کنید خط با ssh-ed25519 شروع شود.

WARNING: UNPROTECTED PRIVATE KEY FILE. سایر حساب‌های ویندوز می‌توانند کلید خصوصی شما را بخوانند. دسترسی را به کاربر خودتان محدود کنید:

PowerShell
icacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r /grant:r "${env:USERNAME}:F"

Error connecting to agent: No such file or directory. سرویس ssh-agent در حال اجرا نیست؛ آن را مطابق بالا راه‌اندازی کنید.

پس از تغییر دسترسی قفل شد. از کنسول VPS در بخش کاربری خود استفاده کنید، فایل /etc/ssh/sshd_config.d/10-keys-only.conf را حذف کنید، sshd -t را اجرا کنید و سرویس SSH را دوباره بارگذاری کنید.


🚀 اکنون رایانه‌ی ویندوزی شما با کلید ed25519 وارد VPS می‌شود و ورود با رمز خاموش است. یک نسخه‌ی پشتیبان از کلید خصوصی را در جای امنی نگه دارید.

با آخرین پیشنهادها، تخفیف‌ها و تبلیغات ویژه به‌روز بمانید.

مشاهده تخفیف‌ها

ما از کوکی استفاده می‌کنیم

ما از کوکی‌های تحلیلی برای بهبود تجربه شما در سایت خود استفاده می‌کنیم. هیچ داده‌ای به اشخاص ثالث فروخته نمی‌شود. اطلاعات بیشتر در سیاست حفظ حریم خصوصی ما.