جفت کلید بسیار امنتر از رمز عبور است: کلید خصوصی هرگز از رایانهی شما خارج نمیشود و رباتهایی که پورت 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 بهعنوان تور ایمنی.
PowerShellssh -V
🔐 ساخت کلید ed25519
PowerShell را باز کنید (معمولی، نه با دسترسی مدیر) و اجرا کنید:
PowerShellssh-keygen -t ed25519 -C 'USER@my-pc'
مسیر پیشفرض C:\Users\USER\.ssh\id_ed25519 را بپذیرید و یک عبارت عبور وارد کنید. این عبارت کلید خصوصی را روی دیسک رمزگذاری میکند، پس فایل دزدیدهشده بیفایده است. دو فایل ساخته میشود: id_ed25519 (خصوصی، هرگز به اشتراک نگذارید) و id_ed25519.pub (عمومی).
📤 کپی کلید عمومی روی VPS
ویندوز ssh-copy-id ندارد، پس کلید را دستی نصب کنید. ابتدا کلید عمومی را نمایش دهید و کل خط را کپی کنید:
PowerShellGet-Content $env:USERPROFILE\.ssh\id_ed25519.pub
با رمز وارد شوید و آن خط را روی سرور اضافه کنید (متن نمونهی بین نقلقولهای تکی را با کلید واقعی خود جایگزین کنید):
Bashssh 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 با دسترسی مدیر:
PowerShellGet-Service ssh-agent | Set-Service -StartupType Automatic Start-Service ssh-agent Get-Service ssh-agent
سپس در PowerShell معمولی، کلید خود را یک بار بارگذاری کنید و کلیدهای بارگذاریشده را فهرست کنید:
PowerShellssh-add $env:USERPROFILE\.ssh\id_ed25519 ssh-add -l
عامل کلید را پس از راهاندازی مجدد هم نگه میدارد، پس دوباره پرسیده نمیشود.
✅ آزمایش ورود با کلید
دوباره وصل شوید. باید بدون اینکه سرور رمز root را بخواهد، یک شل دریافت کنید:
PowerShellssh root@VPS_IP
برای دیدن دقیق روش استفادهشده، گزینهی -v را اضافه کنید و دنبال Server accepts key و Authenticated to ... using publickey بگردید:
PowerShellssh -v root@VPS_IP
تا زمانی که این کار نکرده جلوتر نروید و این نشست را باز نگه دارید.
🚫 غیرفعال کردن احراز هویت با رمز در سرور
در Ubuntu و Debian ممکن است /etc/ssh/sshd_config.d/ از قبل فایلی (مثل 50-cloud-init.conf) داشته باشد که رمز عبور را فعال میکند. SSH اولین مقداری را که میخواند بهکار میبرد، پس فایلی بسازید که در ترتیب زودتر بیاید. روی VPS با کاربر root اجرا کنید:
Bashgrep -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 چیزی چاپ نمیکند.
از یک پنجرهی جدید بررسی کنید که اکنون رمزها رد میشوند و کلید شما همچنان کار میکند:
PowerShellssh -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. سایر حسابهای ویندوز میتوانند کلید خصوصی شما را بخوانند. دسترسی را به کاربر خودتان محدود کنید:
PowerShellicacls $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 میشود و ورود با رمز خاموش است. یک نسخهی پشتیبان از کلید خصوصی را در جای امنی نگه دارید.