Foundations·29 Sep 2021·15 min read·Güncellendi: 15 Jul 2026

Windows Remote Management (WinRM) Over Linux/Docker/macOS Platforms

WinRM nedir? WinRM konfigürasyonu nasıl yapılır? Linux/Docker/macOS üzerinden Domain Kullanıcısı "Negotiate" Authentication yöntemi ile PowerShell bağlantısı nasıl yapılır?

Windows Remote Management (WinRM) Over Linux/Docker/macOS Platforms

WinRM Nedir?

Windows Remote Management (WinRM), Microsoft tarafından WS-Management protokolü üzerinde geliştirilmiş SOAP tabanlı bir iletişim protokolüdür. Uzak istemcilerin/sunucuların yönetilmesi ve yetkiler dahilinde birçok komutun çalıştırılması için kullanılır. Bu yazıda, Linux bir sunucu üzerinden PowerShell Core ile "Negotiate" yöntemi kullanılarak karşı makineye nasıl bağlanılır ve karşımıza çıkabilecek olası sorunları çözerken nasıl bir yol izlemeliyiz gibi yönlendirici konulara değinmeye çalışacağız.

WinRM Nasıl Konfigüre Edilir?

İşlem yapacağımız istemci/sunucu üzerinde PowerShell komut satırı açarak, WinRM servisinin çalışır durumda olduğunu kontrol ediyoruz. (Windows dili Türkçe ise servis ismi "Windows Uzaktan Yönetim (WS-Management)" olarak görünür.)

Not: Bu konfigürasyonlar için PowerShell, "Administrator" modda çalıştırılmalıdır.

Get-Service WinRM 
Is WinRM Running ?

Eğer WinRM servisi "Running" durumda değilse "WinRM QuickConfig" komutu ile temel WinRM ayarlarını yaparak servisi aktif hale getirebilirsiniz.

WinRM QuickConfig 
WinRM QuickConfig

SelfSigned SSL sertifikası oluşturmak için aşağıdaki komutu kullanıyoruz. Komutta geçen "DnsName" parametresine DNS, IP ya da Hostname bilginizi yazabilirsiniz.

New-SelfSignedCertificate -DnsName "Your DNS/IP/Hostname" -CertStoreLocation Cert:\LocalMachine\My
Create SelfSigned Certificate

WinRM için yapılan birçok konfigürasyon bulunmaktadır. Haliyle bu konfigürasyonların isimlerini, tiplerini ve değerlerini görmeniz gerekebilir. Burada karşımıza sihirli bir komut çıkıyor: "cd wsman:".

"wsman", bir sürücü ve dizin yapısı olarak düşünülebilir. "cd", "cd ..", "dir" gibi dizin komutları ile istediğiniz path'e gidebilir ve konfigürasyon değerlerini görebilirsiniz.

"wsman" içinde bu şekilde gezinebilirsiniz.

cd wsman:
dir
cd .\localhost\
dir
cd client
cd ..
...

Bir konfigürasyonun değerini değiştirmek için "Set-Item" komutunu kullanabilirsiniz. Örnek olarak, "Negotiate" authentication yöntemini açmak/kapatmak istiyorsanız bu şekilde kullanabilirsiniz.

cd WSMan:\localhost\Service\Auth\
Set-Item .\Negotiate true   # enable Negotiate Authentication
Set-Item .\Negotiate false  # disable Negotiate Authentication
wsman as a drive & folder

Dinleyici (Listener) Nasıl Eklenir?

WinRM, listener'lar üzerinden haberleşir. HTTPS üzerinden haberleşmesini istediğimiz için, HTTPS tipinde bir listener eklememiz gerekiyor. Bunun için bu komutu kullanıyoruz.

winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="DNS_HERE"; CertificateThumbprint="CERTIFICATE_THUMBPRINT_HERE"}'

Listener'ın istekleri dinleyebilmesi için, Windows Firewall üzerinde 5986 (TCP) portunun açık olduğunu kontrol etmelisiniz. 5986, WinRM HTTPS için standart porttur; farklı bir port kullanmak istiyorsanız listener içindeki "Port" bilgisini değiştirip "winrm" servisini yeniden başlatabilirsiniz. Listener'ların hangi portları kullandığını görmek için, yukarıda belirtilen "cd wsman:" komutu ile ilgili dizine ulaşabilirsiniz.

cd wsman:
cd localhost
cd listener
dir
cd "your-https-listener-name"
dir
Listener Details

Firewall kuralı eklemek için bu komutu kullanabilirsiniz.

netsh advfirewall firewall add rule name="Windows Remote Management (HTTPS-In)" dir=in action=allow protocol=TCP localport=5986

Linux/macOS Üzerinden WinRM Bağlantısı Nasıl Açılır?

Linux/macOS üzerinden PowerShell bağlantısı için PowerShell Core'un yüklü olması gerekiyor. "pwsh" komutunu yazdığınızda hata alıyorsanız, PowerShell'i yüklemelisiniz. Aşağıdaki komutlar ile bağlantınızı yapabilirsiniz. Credential bilgileri girilirken, domainde olan bir kullanıcı için "domain\username" formatında giriş yapabilirsiniz.

pwsh
$credential = Get-Credential
$options = New-PSSessionOption -SkipCACheck -SkipCNCheck
$session = New-PSSession -SessionOption $options -Credential $credential "IP-HERE" -Authentication Negotiate
Enter-PSSession $session

Sorun Giderme

Firewall, güvenlik uygulamaları gibi engelleyici unsurların çok olduğu kurumsal ortamlarda WinRM, göründüğünden daha karmaşık bir hal alabiliyor. Bunun yanında WinRM, kendi içinde çok fazla konfigürasyon öğesi barındırıyor. Bu sebeplerle bağlantı sorunlarını hızlı ve doğru tespit etmek güçleşebiliyor.

Bu konuda birkaç altın ipucu sunmak istiyoruz:

  • Öncelikle bağlantı yapmak istediğiniz hedef makinenin portuna erişim olduğundan emin olun. (WinRM standart HTTPS portu 5986 idi, "telnet 'HEDEF-IP' 5986" komutu ile erişim kontrolü yapabilirsiniz.)
  • Hedef sistem üzerinde 5986 portunun Windows Firewall üzerinden açık olduğundan emin olun.
  • Erişim olduğu halde bağlantı sorunu devam ediyorsa, hedef sunucunun "Event Viewer" içindeki, bağlantı işlemine karşılık gelen log ve detayı çözüm için ipucu verecektir.
  • SSL sertifikası oluşturulurken kullanılan IP/DNS bilgisinin doğruluğundan ve bu IP/DNS bilgisi ile hedef sisteme erişilebildiğinden emin olun.
  • Eğer "Event Viewer" üzerindeki hatanın detayında "0XC000035b" hata kodunu görüyorsanız, bu adımları uygulayarak çözüme ulaşabilirsiniz.
cd wsman:
cd localhost
cd service/auth
set-item cbthardeninglevel 'None'
restart-service winrm

Kaynaklar

Installation and configuration for Windows Remote Management

How to configure WinRM for HTTPS manually

Tagswinrmws-managementpowershellnegotiatepush

Kimlikleri doğru şekilde
yönetmeye hazır mısınız?

Beş dakikadan kısa sürede tam donanımlı bir deneme ortamı kurun. Kredi kartı yok, satış engeli yok.