ডিফল্টভাবে, পাওয়ারশেল রিমোটিং সেশনে ট্রাফিক এনক্রিপ্টেড থাকে, চাইতে HTTP (TCP/5985) বা HTTPS (TCP/5986) ট্রান্সপোর্ট প্রোটোকল ব্যবহার করা হোক। সব ট্রাফিক AES-256 কী দিয়ে এনক্রিপ্ট করা হয়। যাইহোক, যদি আপনি আপনার AD ফরেস্টের বাইরে বা ওয়ার্কগ্রুপের কম্পিউটারে কানেক্ট করেন (যেখানে কেরবেরোস ট্রাস্ট রিলেশনশিপ স্থাপন করতে পারে না), তবে ম্যান-ইন-দ-মিডল আক্রমণের ঝুঁকি থাকে। মাইক্রোসফ্ট থার্ড-পার্টি কম্পিউটারে কানেক্ট করার সময় PSRemoting-এর জন্য সবসময় HTTPS ট্রান্সপোর্ট ব্যবহার করার পরামর্শ দেয়।
এই নিবন্ধে, আমরা SSL সার্টিফিকেট ব্যবহার করে পাওয়ারশেল রিমোটিং HTTPS-এ কনফিগার করার পদ্ধতি দেখাব। HTTPS-এ PSRemoting সেশন আপনার AD ডোমেইন/ফরেস্টের বাইরের কম্পিউটারের সাথে কানেক্ট করার সময় উচ্চতর সুরক্ষা প্রদান করে।
নিচের ধাপগুলো রিমোট ডিভাইস (যেখানে আপনি পাওয়ারশেল রিমোটিং দিয়ে কানেক্ট করতে চান) এ কনফিগার করার জন্য:
নিশ্চিত করুন যে উইন্ডোজের নেটওয়ার্ক লোকেশন Private বা Domain-এ সেট করা আছে:
Get-NetConnectionProfile
WinRM এবং PSRemoting সক্ষম করুন:
Enable-PSRemoting -Force
ডোমেইন এনভায়রনমেন্টে, আপনি GPO ব্যবহার করে WinRM কনফিগার করতে পারেন।
WinRM-এর জন্য HTTPS কনফিগার করতে, প্রথমে আপনি যে কম্পিউটারে কানেক্ট করতে চান সেখানে একটি SSL সার্টিফিকেট তৈরি করতে হবে। সার্টিফিকেটটি WinRM ট্রাফিক এনক্রিপ্ট করতে ব্যবহৃত হবে। পাওয়ারশেল দিয়ে সেলফ-সাইনড সার্টিফিকেট তৈরি করা সহজ। ডোমেইন এনভায়রনমেন্টে, আপনি Auto-Enrollment ব্যবহার করে WinRM সার্টিফিকেট স্বয়ংক্রিয়ভাবে ইস্যু করতে পারেন।
সার্টিফিকেটের DNS নাম হিসেবে কম্পিউটার নাম এবং এর IP ঠিকানা নির্দিষ্ট করুন (যদি আপনার নেটওয়ার্কে DNS সার্ভার না থাকে তবে এটি সুবিধাজনক)। সাবজেক্ট অল্টারনেটিভ নামের জন্য উভয় মান বের করে পাওয়ারশেল দিয়ে সেলফ-সাইনড সার্টিফিকেট জেনারেট করুন:
$hostName = $env:COMPUTERNAME
$hostIP=(Get-NetAdapter| Get-NetIPAddress).IPv4Address|Out-String
$srvCert = New-SelfSignedCertificate -DnsName $hostName,$hostIP -CertStoreLocation Cert:\LocalMachine\My
$srvCert
নতুন SSL সার্টিফিকেট কম্পিউটারের পারসনাল সার্টিফিকেট স্টোরে দেখাবে।

ডিফল্টভাবে, উইন্ডোজে পাওয়ারশেল রিমোটিং-এর জন্য দুটি লিসেনার দুটি পোর্টে তৈরি হয়:
- পোর্ট 5985-এ HTTP
- পোর্ট 5986-এ HTTPS
সক্রিয় WSMan লিসেনারগুলোর তালিকা পান:
Get-ChildItem wsman:\localhost\Listener
ডিফল্ট HTTP এবং HTTPS লিসেনার মুছে দিন:
Get-ChildItem wsman:\localhost\Listener\ | Where-Object -Property Keys -like 'Transport=HTTP*' | Remove-Item -Recurse
নতুন HTTPS লিসেনার তৈরি করুন এবং আপনার সার্টিফিকেটটি বাইন্ড করুন:
New-Item -Path WSMan:\localhost\Listener\ -Transport HTTPS -Address * -CertificateThumbPrint $srvCert.Thumbprint -Force
Windows Firewall-এ WinRM HTTPS ট্রাফিক অনুমতি দেওয়া একটি রুল তৈরি করুন বা নিশ্চিত করুন যে এটি সক্রিয়:
New-NetFirewallRule -Displayname 'WinRM - Powershell remoting HTTPS-In' -Name 'WinRM - Powershell remoting HTTPS-In' -Profile Any -LocalPort 5986 -Protocol TCP
WinRM সার্ভিস রিস্টার্ট করুন:
Restart-Service WinRM
WinRM HTTPS লিসেনার কোন সার্টিফিকেট থাম্বপ্রিন্টের সাথে বাইন্ড করা আছে তা চেক করুন:
WinRM e winrm/config/listener
রিমোট হোস্ট কনফিগার করা হয়েছে। এখন SSL সার্টিফিকেটটি CER ফাইল হিসেবে এক্সপোর্ট করুন:
Export-Certificate -Cert $srvCert -FilePath c:\PS\SSL_PS_Remoting.cer
মনে রাখবেন যে WinRM সার্ভার এবং ক্লায়েন্ট কনফিগারেশন ডিফল্টভাবে আনক্রিপ্টেড কানেকশন অনুমতি দেয় না:
dir WSMan:\localhost\Service | ? Name -eq AllowUnencrypted
dir WSMan:\localhost\Client | ? Name -eq AllowUnencrypted

যদি প্রয়োজন হয়, তবে আনক্রিপ্টেড কানেকশন নিষ্ক্রিয় করুন:
winrm set winrm/config/service '@{AllowUnencrypted="false"}'
winrm set winrm/config/client '@{AllowUnencrypted="false"}'
CER ফাইলটি অ্যাডমিন কম্পিউটারে কপি করুন এবং নিচের কমান্ড দিয়ে ইম্পোর্ট করুন (বা GPO ব্যবহার করে অন্য কম্পিউটারগুলোরে সার্টিফিকেট ডিপ্লয় করুন):
Import-Certificate -FilePath c:\PS\SSL_PS_Remoting.cer -CertStoreLocation Cert:\LocalMachine\root\
তারপর, WinRM HTTPS ব্যবহার করে রিমোট উইন্ডোজ হোস্টে কানেক্ট করতে Enter-PSSession এবং Invoke-Command কমান্ডলেটে -UseSSL আর্গুমেন্ট ব্যবহার করতে হবে। নিচের উদাহরণে, আমরা পাওয়ারশেল কনসোল থেকে এর IP ঠিকানা দিয়ে একটি রিমোট হোস্টে কানেক্ট করব (মনে রাখবেন, আমরা এই IP-কে TrustedHosts-এ অ্যাড করিনি):
$SessionOption = New-PSSessionOption -SkipCNCheck
Enter-PSSession -Computername 192.168.13.4 -UseSSL -Credential maxbak -SessionOption $SessionOption

IP ঠিকানা দিয়ে কানেক্ট করার সময় SkipCNCheck অপশন ছাড়া নিচের ত্রুটি দেখা দেয়: The SSL certificate contains a common name (CN) that does not match the hostname।