آموزش اتصال به سرور مجازی لینوکس با SSH
اولین کاری که بعد از تحویل سرور لینوکس انجام میدهید اتصال به آن است. این آموزش اتصال از ویندوز، مک و لینوکس، ساخت کلید SSH و بستن ورود با رمز را قدمبهقدم توضیح میدهد.
بعد از تحویل سرور، مشخصات اتصال — آدرس IP و رمز عبور کاربر root — در حساب کاربری شما نمایش داده میشود. با همین دو تا از ویندوز، مک، لینوکس یا حتی گوشی به سرور مجازی لینوکس وصل میشوید. اگر هنوز با خود مفهوم سرور مجازی آشنا نیستید، اول سرور مجازی چیست را ببینید.
اتصال اول
روی مک و لینوکس، دستور ssh از قبل نصب است. روی ویندوز 10 (نسخه 1809 به بعد) و ویندوز 11، کلاینت OpenSSH جزو قابلیتهای داخلی ویندوز است و معمولاً فعال است؛ اگر PowerShell پیام داد که ssh شناخته نشد، طبق راهنمای مایکروسافت از Settings بخش Optional features گزینه OpenSSH Client را اضافه کنید. بعد در PowerShell یا ترمینال بنویسید:
ssh root@203.0.113.10
به جای 203.0.113.10 آدرس سرور خودتان را بگذارید. (این آدرس نمونه از بازهای است که برای مستندات کنار گذاشته شده و به هیچ سروری تعلق ندارد.) اگر پورت SSH سرور 22 نیست، آن را با -p بدهید:
ssh -p 2222 root@203.0.113.10
اولین بار این پیام را میبینید:
The authenticity of host '203.0.113.10' can't be established.
ED25519 key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
این یعنی کامپیوتر شما این سرور را نمیشناسد. yes بنویسید و اینتر بزنید؛ اثر انگشت سرور ذخیره میشود و دفعات بعد پرسیده نمیشود. اگر بعداً همین پیام دوباره ظاهر شد و شما سرور را عوض نکرده بودید، وصل نشوید و اول بررسی کنید چه اتفاقی افتاده.
بعد رمز عبور پرسیده میشود. هنگام تایپ، چیزی روی صفحه نمایش داده نمیشود — نه ستاره، نه نشانگر. این رفتار عادی است. برای جلوگیری از اشتباه تایپی، رمز را کپی کنید و در ترمینال جایگذاری کنید (در PowerShell با کلیک راست).
اتصال با گوشی و PuTTY
- اندروید: برنامه Termux یک ترمینال لینوکسی کامل است؛ بعد از نصب، با
pkg install opensshهمان دستورsshبالا را دارید. - iOS: چند کلاینت SSH در App Store هست. هرکدام را انتخاب کنید، همان سه چیز را میخواهد: آدرس، نام کاربری و رمز یا کلید.
- PuTTY: روی ویندوزهای قدیمی هنوز پرکاربرد است و کار میکند، اما کلیدهایش را با قالب خودش (
.ppk) نگه میدارد. روی ویندوز امروزی، همانsshداخلی سادهتر است و دستورهای این آموزش بدون تغییر رویش اجرا میشوند.
گوشی برای کارهای کوتاه و اضطراری مناسب است؛ ویرایش فایل پیکربندی روی صفحه کوچک، جای اشتباه زیادی دارد.
اولین کار: عوض کردن رمز عبور
رمزی که همراه سرور تحویل داده شده در جایی تولید و منتقل شده است. اولین کار بعد از ورود، عوض کردنش است:
passwd
رمز جدید را دو بار میپرسد و باز هم چیزی نمایش نمیدهد. توجه کنید که بعد از این کار، رمزی که در حساب کاربری نمایش داده میشود دیگر رمز فعلی سرور نیست؛ رمز جدید را جای امنی نگه دارید.
ورود با کلید، به جای رمز
رمز عبور را میشود حدس زد و سرورهایی که روی اینترنتاند، مداوم آزمایش میشوند. کلید SSH این مشکل را ندارد: یک جفت کلید است که نیمه خصوصیاش هیچوقت از کامپیوتر شما خارج نمیشود.
1. کلید بسازید — روی کامپیوتر خودتان، نه روی سرور
ssh-keygen -t ed25519 -C "you@example.com"
مستندات اوبونتو الگوریتم ed25519 را بهخاطر کلید کوتاهتر و محاسبه سبکتر پیشنهاد میکند. محل ذخیره را میپرسد؛ اینتر بزنید تا مقدار پیشفرض استفاده شود. بعد عبارت عبور میخواهد — یک عبارت بگذارید. این عبارت از کلید شما محافظت میکند اگر کامپیوترتان به دست کس دیگری بیفتد.
نتیجه دو فایل است (روی ویندوز در پوشه C:\Users\نامکاربری\.ssh):
~/.ssh/id_ed25519— کلید خصوصی. این را هرگز و به هیچکس ندهید.~/.ssh/id_ed25519.pub— کلید عمومی. این همانی است که روی سرور میرود.
2. کلید عمومی را روی سرور بگذارید
روی مک و لینوکس:
ssh-copy-id root@203.0.113.10
روی ویندوز ssh-copy-id وجود ندارد. در PowerShell همین کار را با یک خط انجام دهید:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
این دستور کلید عمومی را میخواند، یک بار با رمز وصل میشود و کلید را به انتهای فایل authorized_keys روی سرور اضافه میکند. سرور به دسترسی این فایل حساس است: اگر کسی جز صاحبش اجازه نوشتن در آن را داشته باشد، کلید پذیرفته نمیشود.
3. آزمایش کنید
یک پنجره ترمینال جدید باز کنید — پنجره فعلی را نبندید — و دوباره وصل شوید:
ssh root@203.0.113.10
اگر به جای رمز سرور، عبارت عبور کلید پرسیده شد، کلید کار میکند.
4. ورود با رمز را ببندید
این کار را فقط بعد از اینکه مطمئن شدید ورود با کلید کار میکند انجام دهید. اگر کلید درست تنظیم نشده باشد و ورود با رمز را ببندید، دیگر نمیتوانید وارد سرور شوید.
روی سرور فایل /etc/ssh/sshd_config را باز کنید و این خط را پیدا یا اضافه کنید:
PasswordAuthentication no
یک دام رایج: روی اوبونتو، خط Include /etc/ssh/sshd_config.d/*.conf در ابتدای همین فایل است و طبق مستندات OpenSSH برای هر تنظیم، اولین مقداری که خوانده شود اعمال میشود. پس اگر فایلی در پوشه sshd_config.d — مثلاً فایلی که ابزار راهاندازی تصویر ابری ساخته — مقدار PasswordAuthentication yes داشته باشد، تغییر شما بیاثر میماند. پیدایش کنید:
grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
و مقدار را در همان فایل هم no کنید. بعد پیکربندی را قبل از اعمال آزمایش کنید؛ اگر خطایی باشد، همینجا گزارش میشود:
sudo sshd -t
سرویس را دوباره راهاندازی کنید و مقدار نهایی را ببینید:
sudo systemctl restart ssh
sudo sshd -T | grep -i passwordauthentication
خروجی دستور دوم باید passwordauthentication no باشد. روی توزیعهای خانواده RHEL مثل AlmaLinux و Rocky نام سرویس sshd است، نه ssh. اگر پیام Unit ssh.service not found گرفتید، همان دستور را با sshd اجرا کنید.
پنجره ترمینال فعلی را هنوز نبندید. یک پنجره جدید باز کنید و اتصال را آزمایش کنید. اگر کار کرد، کار تمام است؛ اگر نکرد، از همان پنجره باز تنظیم را برگردانید.
کوتاه کردن دستور اتصال
به جای اینکه هر بار آدرس و نام کاربری را تایپ کنید، در فایل ~/.ssh/config روی کامپیوتر خودتان یک نام کوتاه تعریف کنید:
Host myvps
HostName 203.0.113.10
User root
IdentityFile ~/.ssh/id_ed25519
از این به بعد ssh myvps کافی است و scp هم همین نام را میشناسد.
اگر پرسیده شدن عبارت عبور در هر اتصال خستهتان میکند، کلید را به ssh-agent بسپارید تا فقط یک بار پرسیده شود. روی ویندوز این سرویس بهطور پیشفرض غیرفعال است و طبق راهنمای مایکروسافت در PowerShell با دسترسی مدیر روشن میشود:
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519
انتقال فایل
با scp:
scp file.txt root@203.0.113.10:/root/
و در جهت مخالف:
scp root@203.0.113.10:/root/file.txt .
برای پوشهها گزینه -r را اضافه کنید. برای پوشههای بزرگ یا انتقالی که ممکن است قطع شود، rsync بهتر است چون فقط تفاوتها را منتقل میکند و اجرای دوبارهاش از جایی که مانده ادامه میدهد.
اگر وصل نشد
اول دستور را با -v اجرا کنید تا مراحل اتصال را ببینید؛ معمولاً همین خروجی نشان میدهد کار کجا گیر کرده:
ssh -v root@203.0.113.10
| پیام | معنای محتمل |
|---|---|
Connection refused | سرویس SSH روی سرور بالا نیست یا پورت اشتباه است |
Connection timed out | بستهها به سرور نمیرسند؛ آدرس، روشن بودن سرور در پنل یا دیواره آتش را بررسی کنید |
Permission denied (publickey,password) | نام کاربری یا رمز اشتباه است؛ اگر رمز را عوض کردهاید، رمز پنل دیگر معتبر نیست |
Permission denied (publickey) | ورود با رمز بسته است و کلید شما پذیرفته نشده |
Too many authentication failures | کلاینت چند کلید را پشت سر هم امتحان کرده؛ کلید درست را با -i و گزینه -o IdentitiesOnly=yes مشخص کنید |
REMOTE HOST IDENTIFICATION HAS CHANGED | اثر انگشت سرور عوض شده؛ اگر سرور را نصب مجدد نکردهاید، وصل نشوید و بررسی کنید |
اگر سرور را نصب مجدد کردهاید، پیام آخر طبیعی است و با حذف ورودی قدیمی برطرف میشود:
ssh-keygen -R 203.0.113.10
یادتان باشد نصب مجدد سیستمعامل از پنل، تمام اطلاعات روی سرور — از جمله کلیدهایی که اضافه کردهاید — را پاک میکند و بعد از آن باید کلید عمومی را دوباره روی سرور بگذارید.
قدم بعدی
حالا که وصل شدهاید، بعد از خرید سرور مجازی چه کارهایی انجام دهیم بقیه کارهای اولیه — بهروزرسانی، ساخت کاربر غیر root و دیواره آتش — را توضیح میدهد.
اگر هنوز سرور نگرفتهاید و بین لینوکس و ویندوز مردد هستید، مقایسه این دو را ببینید. همه پلنها با مشخصات کامل در صفحه خرید سرور مجازی هستند و پلنهای قابل سفارش با لینوکس هم در سرور مجازی لینوکس فهرست شدهاند.