ডিফল্টরূপে, HTTP (TCP/5985) বা HTTPS (TCP/5986) পরিবহন প্রোটোকল ব্যবহার করা হোক না কেন PowerShell রিমোটিং সেশনে ট্র্যাফিক এনক্রিপ্ট করা হয়। যাইহোক, সমস্ত ট্র্যাফিক AES-256 কী ব্যবহার করে এনক্রিপ্ট করা হয়েছে। যাইহোক, আপনি যদি আপনার AD ফরেস্টের বাইরে বা একটি ওয়ার্কগ্রুপে (Kerberos একটি বিশ্বাসের সম্পর্ক স্থাপন করতে পারে না) একটি দূরবর্তী কম্পিউটারের সাথে সংযোগ করেন তবে আপনি ম্যান-ইন-দ্য-মিডল আক্রমণের ঝুঁকিতে রয়েছেন। যখন আপনি তৃতীয় পক্ষের কম্পিউটারের সাথে সংযোগ করেন তখন Microsoft সর্বদা PRemoting এর জন্য HTTPS পরিবহন ব্যবহার করার পরামর্শ দেয়।
এই নিবন্ধে, আমরা দেখাব কিভাবে HTTPS এর মাধ্যমে PowerShell রিমোটিং কনফিগার করতে হয় একটি SSL শংসাপত্র ব্যবহার করে। আপনার AD ডোমেন/ফরেস্টের বাইরে কম্পিউটারের সাথে সংযোগ করার সময় HTTPS-এর উপর PRemoting সেশনগুলি উচ্চতর সেশন সুরক্ষা স্তর প্রদান করে৷
আপনি HTTPS এর মাধ্যমে PowerShell রিমোটিং ব্যবহার করে সংযোগ করতে চান এমন উইন্ডোজ চালিত একটি দূরবর্তী ডিভাইস কীভাবে কনফিগার করবেন তা নীচের ধাপগুলি বর্ণনা করে৷
নিশ্চিত করুন যে Windows-এ আপনার নেটওয়ার্ক অবস্থান ব্যক্তিগত বা ডোমেনে সেট করা আছে:
Get-NetConnectionProfile
কমান্ডটি ব্যবহার করে WinRM এবং PSRemoting সক্ষম করুন:
Enable-PSRemoting -Force
WinRM-এর জন্য HTTPS কনফিগার করতে, আপনাকে প্রথমে একটি কম্পিউটারে একটি SSL শংসাপত্র তৈরি করতে হবে যার সাথে আপনি সংযোগ করতে চান৷ শংসাপত্রটি WinRM ট্র্যাফিক এনক্রিপ্ট করতে ব্যবহার করা হবে৷ PowerShell ব্যবহার করে একটি স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করা সহজ। একটি ডোমেন পরিবেশে, আপনি স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়-এনরোলমেন্ট ব্যবহার করে WinRM শংসাপত্র ইস্যু করতে পারেন৷
৷সার্টিফিকেটের DNS নাম হিসাবে কম্পিউটারের নাম এবং এর IP ঠিকানা নির্দিষ্ট করুন (আপনার নেটওয়ার্কে DNS সার্ভার না থাকলে এটি সুবিধাজনক)। আপনি শংসাপত্রের বিষয় বিকল্প নামের জন্য উভয় মান পেতে পারেন এবং PowerShell এর সাথে একটি স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করতে পারেন:
$hostName = $env:COMPUTERNAME
$hostIP=(Get-NetAdapter| Get-NetIPAddress).IPv4Address|Out-String
$srvCert = New-SelfSignedCertificate -DnsName $hostName,$hostIP -CertStoreLocation Cert:\LocalMachine\My
$srvCert
নতুন SSL শংসাপত্রটি কম্পিউটারে ব্যক্তিগত শংসাপত্রের দোকানে উপস্থিত হবে৷
৷
ডিফল্টরূপে, Windows-এ PowerShell রিমোটিং-এর জন্য বিভিন্ন পোর্টে দুটি শ্রোতা তৈরি করা হয়:
- পোর্ট 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
একটি উইন্ডোজ ফায়ারওয়াল নিয়ম তৈরি করুন যা 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
দূরবর্তী হোস্ট কনফিগার করা হয়. এখন আপনাকে একটি CER ফাইলে SSL সার্টিফিকেট রপ্তানি করতে হবে:
Export-Certificate -Cert $srvCert -FilePath c:\PS\SSL_PS_Remoting.cer
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 ব্যবহার করে একটি দূরবর্তী Windows হোস্টের সাথে সংযোগ করতে, আপনাকে অবশ্যই -UseSSL ব্যবহার করতে হবে Enter-PSSession এবং Invoke-Command cmdlets-এ আর্গুমেন্ট। নিম্নলিখিত উদাহরণে, আমরা PowerShell কনসোল থেকে একটি দূরবর্তী হোস্টের সাথে তার IP ঠিকানার মাধ্যমে সংযোগ করব (মনে রাখবেন যে আমরা এই IP ঠিকানাটি বিশ্বস্ত হোস্টে যোগ করিনি):
$SessionOption = New-PSSessionOption -SkipCNCheck
Enter-PSSession -Computername 192.168.13.4 -UseSSL -Credential maxbak -SessionOption $SessionOption
SkipCNCcheck ছাড়াই একটি IP ঠিকানার মাধ্যমে সংযোগ করার সময়৷ বিকল্পে, নিম্নলিখিত ত্রুটিটি ঘটে:
The SSL certificate contains a common name (CN) that does not match the hostname
.