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

اتصال به SSH با PowerShell

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

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

در این آموزش نحوه اتصال به SSH با PowerShell در ویندوز را به‌صورت کامل بررسی می‌کنیم و همچنین با روش‌های پیشرفته‌تر مانند اجرای دستورات از راه دور و PowerShell Remoting آشنا خواهیم شد.

SSH چیست و چرا در PowerShell اهمیت دارد؟

SSH یا Secure Shell یک پروتکل امن برای برقراری ارتباط با سیستم‌های راه دور است. این پروتکل ارتباط میان کلاینت و سرور را رمزنگاری کرده و امنیت بالایی در انتقال داده‌ها فراهم می‌آورد.

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

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

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

نصب OpenSSH Client

در ویندوز ۱۰ نسخه ۱۸۰۹ به بعد و همچنین ویندوز سرور ۲۰۱۹ و نسخه‌های جدیدتر، OpenSSH به‌صورت داخلی در سیستم‌عامل وجود دارد.

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

ssh

اگر خروجی شامل راهنمای دستورات SSH بود، سرویس روی سیستم شما فعال است.

Get-Command ssh

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

Get-Command ssh.exe

در حالت عادی فایل در مسیر زیر قرار دارد:

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

در برخی موارد اگر PowerShell نتواند دستور ssh را شناسایی کند، مشکل مربوط به متغیر PATH یا نصب نبودن OpenSSH است. این موضوع توسط کاربران PowerShell هم گزارش شده است.

نحوه اتصال به سرور لینوکس با PowerShell

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

ساختار کلی دستور به شکل زیر است:

ssh username@server-ip

برای مثال:

ssh root@192.168.1.107

یا:

ssh root@example.com

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

نمونه:

ssh root@185.10.10.10

سپس:

root@185.10.10.10's password:

بعد از وارد کردن رمز عبور وارد محیط Shell سرور خواهید شد.

اتصال به SSH با پورت اختصاصی

بسیاری از مدیران سرور برای افزایش امنیت، پورت پیشفرض ۲۲ را تغییر می‌دهند.

در این شرایط باید شماره پورت را مشخص کنید:

ssh -p 4587 root@192.168.1.107

در این مثال اتصال از طریق پورت ۴۵۸۷ برقرار می‌شود.

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

استفاده از SSH Key یکی از بهترین روش‌های افزایش امنیت سرور است.

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

ساختار دستور:

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

نمونه واقعی:

ssh -i C:\Users\Has\.ssh\id_rsa root@server.example.com

در این حالت در صورت تنظیم صحیح کلیدها، ورود بدون رمز عبور انجام خواهد شد.

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

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

گاهی نیاز دارید فقط یک دستور روی سرور اجرا شود.

برای این کار می‌توانید دستور را در انتهای فرمان SSH قرار دهید:

ssh root@192.168.1.107 "uptime"

یا:

ssh root@192.168.1.107 "df -h"

خروجی مستقیم در پنجره PowerShell نمایش داده می‌شود و پس از پایان اجرا اتصال بسته خواهد شد.

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

PowerShell Remoting بر بستر SSH چیست؟

PowerShell Remoting قابلیتی است که امکان اجرای دستورات PowerShell روی سیستم‌های راه دور را فراهم می‌کند.

در نسخه‌های جدید PowerShell می‌توان به‌جای WinRM از SSH برای برقراری ارتباط استفاده کرد. این ویژگی به‌خصوص در محیط‌هایی که شامل سرورهای لینوکس و ویندوزی هستند بسیار مفید است.

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

نصب PowerShell 7 برای SSH Remoting

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

برای بررسی نسخه:

$PSVersionTable

خروجی باید نسخه ۷ یا بالاتر را نمایش دهد.

ایجاد PSSession از طریق SSH

یکی از قابلیت‌های حرفه‌ای PowerShell ایجاد نشست راه دور است.

برای ایجاد Session از دستور زیر استفاده می‌شود:

New-PSSession -HostName server01 -UserName admin

نمونه:

$session = New-PSSession -HostName 192.168.1.107 -UserName root

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

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

پس از ایجاد Session می‌توانید وارد آن شوید:

Enter-PSSession $session

اکنون تمام دستورات PowerShell روی سیستم مقصد اجرا می‌شوند.

برای خروج:

Exit-PSSession

اجرای دستورات از راه دور با Invoke-Command

یکی از کاربردی‌ترین قابلیت‌های PowerShell اجرای مستقیم دستورات روی سیستم مقصد است.

مثال:

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

یا:

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

این روش برای مدیریت همزمان چندین سرور بسیار مفید است.

فعال‌سازی SSH Server در ویندوز

اگر قصد دارید به یک سرور ویندوزی از طریق SSH متصل شوید باید OpenSSH Server نصب و فعال باشد.

برای نصب:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

سپس سرویس را فعال کنید:

Start-Service sshd

فعال‌سازی اجرای خودکار سرویس:

Set-Service -Name sshd -StartupType Automatic

مایکروسافت نصب OpenSSH Server را برای استفاده از SSH Remoting الزامی می‌داند.

اگر به منابع اختصاصی، دسترسی کامل و امکان انتخاب سیستم‌عامل نیاز دارید، خرید سرور مجازی را بررسی کنید.

خطاهای رایج هنگام اتصال SSH در PowerShell

خطای ssh is not recognized

نمونه خطا:

ssh : The term 'ssh' is not recognized

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

  • OpenSSH Client نصب نشده است
  • مسیر OpenSSH در PATH قرار ندارد
  • PowerShell به فایل ssh.exe دسترسی ندارد

این خطا توسط برخی کاربران PowerShell گزارش شده است.

خطای Connection Refused

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

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

خطای Permission Denied

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

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

خطای SSH Transport Process Terminated

این خطا بیشتر هنگام استفاده از PowerShell Remoting دیده می‌شود و معمولا ناشی از پیکربندی نادرست PowerShell Subsystem در فایل sshd_config است.

تفاوت SSH معمولی و PowerShell Remoting بر بستر SSH

بسیاری از کاربران تصور می‌کنند این دو قابلیت یکسان هستند، در حالی که تفاوت مهمی دارند.

در SSH معمولی شما فقط به Shell سیستم مقصد متصل می‌شوید و دستورات را به‌صورت متنی اجرا می‌کنید.

اما در PowerShell Remoting بر بستر SSH، داده‌ها به‌صورت آبجکت‌های PowerShell منتقل شده و امکان مدیریت حرفه‌ای‌تر سیستم‌ها فراهم می‌گردد.

این موضوع اجرای اسکریپت‌های پیچیده و مدیریت چندین سرور را ساده‌تر می‌کند.

جمع‌بندی

PowerShell امروزه یکی از قدرتمندترین ابزارهای مدیریت سرور در ویندوز محسوب می‌شود و پشتیبانی داخلی از SSH باعث شده اتصال به سرورهای لینوکسی و ویندوزی بسیار ساده‌تر از گذشته باشد.

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

ترکیب PowerShell 7 و OpenSSH یک راهکار مدرن، امن و چندسکویی برای مدیریت زیرساخت‌های امروزی فراهم می‌کند که هم در محیط‌های ویندوزی و هم لینوکسی کاربرد گسترده‌ای دارد.

نوشتن نظر

نوشتن دیدگاه

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