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 نمایش داده شد، ابزار به درستی نصب شده است.

همچنین میتوانید مسیر فایل اجرایی را بررسی کنید:
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 یک راهکار قدرتمند برای مدیریت متمرکز سرورهای چندسکویی محسوب میشود و امکان اتوماسیون بسیاری از وظایف روزمره را فراهم میکند.