آموزش اتصال به SSH با PowerShell در ویندوز

  • دسته بندی ها: سرور

SSH یکی از مهمترین پروتکل‌های مدیریت و دسترسی از راه دور به سرورها محسوب می‌شود. بسیاری از مدیران سیستم و کارشناسان زیرساخت روزانه از SSH برای اتصال به سرورهای لینوکس و حتی ویندوز استفاده می‌کنند. در گذشته کاربران ویندوز معمولا از ابزارهایی مانند PuTTY برای برقراری ارتباط SSH استفاده می‌کردند، اما امروزه PowerShell به صورت پیشفرض از SSH پشتیبانی می‌کند و امکان مدیریت سرورها را بدون نیاز به نرم‌افزارهای جانبی فراهم می‌سازد.

با معرفی PowerShell 7 و توسعه قابلیت PowerShell Remoting over SSH، کاربران می‌توانند علاوه بر اجرای دستورات SSH معمولی، نشست‌های مدیریتی PowerShell را هم از طریق SSH برقرار کنند. این قابلیت امکان مدیریت یکپارچه سرورهای ویندوز و لینوکس را فراهم می‌کند و وابستگی به پروتکل WinRM را کاهش می‌دهد.

در این مطلب نحوه اتصال به SSH با PowerShell در ویندوز، اجرای دستورات راه دور و راه‌اندازی PowerShell Remoting روی بستر SSH را بررسی می‌کنیم.

SSH در PowerShell چیست؟

SSH یا Secure Shell یک پروتکل امن برای برقراری ارتباط رمزنگاری‌شده میان کلاینت و سرور است. PowerShell از نسخه‌های جدید ویندوز و همچنین PowerShell 7 به بعد، امکان استفاده مستقیم از SSH را در اختیار کاربران قرار می‌دهد.

این قابلیت باعث می‌شود بتوانید:

  • به سرورهای لینوکس متصل شوید
  • به سرورهای ویندوز دارای OpenSSH متصل شوید
  • دستورات راه دور اجرا کنید
  • فایل‌ها را منتقل کنید
  • نشست‌های PowerShell از راه دور ایجاد کنید

پیش‌نیازهای اتصال SSH در ویندوز

قبل از برقراری اتصال SSH باید چند مورد را بررسی کنید.

نصب OpenSSH Client

در نسخه‌های جدید ویندوز 10 و ویندوز سرور، OpenSSH Client به صورت پیشفرض در دسترس است. مایکروسافت OpenSSH را از ویندوز 10 نسخه 1809 و ویندوز سرور 2019 به بعد ارائه کرده است.

برای اطمینان از نصب بودن SSH دستور زیر را اجرا کنید:

اگر لیست پارامترهای SSH نمایش داده شد، ابزار به درستی نصب شده است.

همچنین می‌توانید مسیر فایل اجرایی را بررسی کنید:

در اغلب سیستم‌ها فایل اجرایی در مسیر زیر قرار دارد:

بررسی نسخه PowerShell

برای مشاهده نسخه PowerShell:

برای استفاده از قابلیت PowerShell Remoting over SSH بهتر است از PowerShell 7 یا نسخه‌های جدیدتر استفاده شود.

اتصال SSH معمولی به سرور لینوکس

ساده‌ترین روش اتصال به یک سرور لینوکس استفاده از دستور ssh است.

ساختار کلی دستور:

مثال:

یا:

پس از اجرای دستور، رمز عبور کاربر درخواست می‌شود و در صورت صحت اطلاعات، وارد محیط Shell سرور خواهید شد.

اتصال SSH روی پورت سفارشی

اگر سرویس SSH روی پورتی غیر از 22 اجرا می‌شود، باید شماره پورت را مشخص کنید.

مثال:

در این مثال، PowerShell اتصال را از طریق پورت 5555 برقرار می‌کند.

اجرای مستقیم دستورات از طریق SSH

یکی از قابلیت‌های کاربردی SSH اجرای یک دستور بدون ورود به محیط Shell است.

به عنوان مثال:

یا:

در این روش تنها خروجی دستور نمایش داده می‌شود و نشست تعاملی ایجاد نمی‌شود.

این قابلیت برای اسکریپت‌های مدیریتی و مانیتورینگ بسیار مفید است.

اتصال SSH با کلید خصوصی

استفاده از کلید SSH نسبت به رمز عبور امنیت بیشتری دارد و در بسیاری از زیرساخت‌های حرفه‌ای توصیه می‌شود.

برای اتصال با کلید خصوصی:

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

برای میزبانی نرم‌افزارهای سازمانی، ریموت دسکتاپ و سرویس‌های مبتنی بر ویندوز،  خرید سرور مجازی ویندوز را بررسی کنید.

PowerShell Remoting Over SSH چیست؟

به طور پیشفرض PowerShell Remoting از WinRM استفاده می‌کند. اما از PowerShell 6 به بعد امکان استفاده از SSH به عنوان بستر ارتباطی فراهم شده است. این قابلیت امکان مدیریت بین ویندوز و لینوکس را به صورت چندسکویی فراهم می‌کند.

مزایای این روش عبارتند از:

  • عدم وابستگی به WinRM
  • سازگاری با لینوکس و macOS
  • استفاده از مکانیزم امنیتی SSH
  • پشتیبانی از احراز هویت مبتنی بر کلید

نصب و راه‌اندازی OpenSSH Server روی ویندوز

برای پذیرش اتصال SSH روی ویندوز باید OpenSSH Server نصب شود.

پس از نصب سرویس، فایل تنظیمات زیر را ویرایش کنید:

برای فعال بودن ورود با رمز عبور:

سپس باید PowerShell را به عنوان Subsystem معرفی کنید:.

پس از اعمال تغییرات سرویس SSH را راه‌اندازی مجدد کنید:

این تنظیمات به OpenSSH اجازه می‌دهد نشست‌های PowerShell را از طریق SSH اجرا کند.

ایجاد نشست PowerShell از طریق SSH

پس از آماده‌سازی سرور می‌توانید یک نشست PowerShell ایجاد کنید.

نمونه دستور:

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

ورود به نشست PowerShell راه دور

برای ورود به نشست ایجادشده:

اکنون تمامی دستورات در سرور مقصد اجرا خواهند شد.

مثال:

یا:

خروج از نشست:

اجرای دستورات بدون ورود به نشست

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

در این حالت می‌توان از Invoke-Command استفاده کرد:

یا:

این روش برای اتوماسیون و مدیریت تعداد زیادی سرور بسیار کاربردی است.

اتصال PowerShell به سرور لینوکس از طریق SSH

PowerShell 7 می‌تواند به سرورهای لینوکس هم متصل شود.

نمونه:

در صورتی که PowerShell روی سرور لینوکس نصب شده باشد، امکان اجرای مستقیم دستورات PowerShell روی آن سیستم هم وجود خواهد داشت.

رفع خطاهای رایج اتصال SSH در PowerShell

خطای ssh is not recognized

این خطا معمولا به دلیل نصب نبودن OpenSSH Client یا تنظیم نبودن PATH رخ می‌دهد.

برای بررسی:

در صورت شناسایی نشدن فایل اجرایی، باید OpenSSH Client نصب یا مسیر آن به متغیر PATH اضافه شود.

خطای Connection Refused

این خطا معمولا به دلایل زیر ایجاد می‌شود:

  • سرویس sshd فعال نیست
  • فایروال پورت 22 را مسدود کرده است
  • آدرس IP اشتباه است

برای بررسی وضعیت سرویس:

خطای Authentication Failed

این خطا معمولا به دلیل موارد زیر رخ می‌دهد:

  • نام کاربری اشتباه
  • رمز عبور نادرست
  • تنظیم نبودن کلید عمومی SSH
  • غیرفعال بودن احراز هویت در فایل sshd_config

جمع‌بندی

SSH به یکی از مهمترین ابزارهای مدیریت سرور در محیط‌های مدرن تبدیل شده است و PowerShell هم پشتیبانی کاملی از این پروتکل ارائه می‌دهد. با استفاده از OpenSSH می‌توانید بدون نیاز به ابزارهای جانبی به سرورهای لینوکس و ویندوز متصل شده، دستورات مدیریتی اجرا کرده و حتی نشست‌های کامل پاورشِل را روی بستر SSH برقرار نمایید.

برای کاربران حرفه‌ای و مدیران زیرساخت، ترکیب PowerShell 7 و SSH یک راهکار قدرتمند برای مدیریت متمرکز سرورهای چندسکویی محسوب می‌شود و امکان اتوماسیون بسیاری از وظایف روزمره را فراهم می‌کند.