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

اتصال به 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

در نسخه‌های جدید ویندوز ۱۰ و ویندوز سرور، OpenSSH Client به صورت پیشفرض در دسترس است. مایکروسافت OpenSSH را از ویندوز ۱۰ نسخه ۱۸۰۹ و ویندوز سرور ۲۰۱۹ به بعد ارائه کرده است.

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

ssh

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

اتصال به SSH با پاورشِل

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

Get-Command ssh.exe

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

C:\Windows\System32\OpenSSH\ssh.exe

بررسی نسخه PowerShell

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

$PSVersionTable

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

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

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

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

ssh username@server-ip

مثال:

ssh root@192.168.1.107

یا:

ssh admin@example.com

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

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

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

مثال:

ssh -p 5555 admin@192.168.1.107

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

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

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

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

ssh root@192.168.1.107 "uptime"

یا:

ssh root@192.168.1.107 "df -h"

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

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

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

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

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

ssh -i C:\Keys\id_rsa root@192.168.1.107

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

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

PowerShell Remoting Over SSH چیست؟

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

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

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

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

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

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

C:\ProgramData\ssh\sshd_config

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

PasswordAuthentication yes

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

Subsystem powershell C:/progra~1/powershell/7/pwsh.exe -sshs

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

Restart-Service sshd

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

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

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

نمونه دستور:

$session = New-PSSession -HostName server01 -UserName admin

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

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

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

Enter-PSSession $session

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

مثال:

Get-Process

یا:

Get-Service

خروج از نشست:

Exit-PSSession

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

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

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

Invoke-Command -Session $session -ScriptBlock {
Get-Service
}

یا:

Invoke-Command -Session $session -ScriptBlock {
Get-Process pwsh
}

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

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

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

نمونه:

Enter-PSSession -HostName ubuntu-server -UserName root

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

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

خطای ssh is not recognized

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

برای بررسی:

Get-Command ssh.exe

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

خطای Connection Refused

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

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

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

Get-Service sshd

خطای Authentication Failed

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

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

جمع‌بندی

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

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

نوشتن نظر

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *