Kısacası PSRemoting. Uzun konu. Ama pratik olarak etki alanında (domain) olmayan makinelerin birbirlerine nasıl uzaktan bağlanacaklarına hızlıca bakalım.
İki makine de workgroup modunda. Bağlantıyı başlatarak karşı tarafta bağlanacak makineye "kaynak", kendisine bağlanılmasını bekleyecek makineye de "hedef" diyelim.
Bu ikisinin de güvenlik duvarları açık olabilir. Kaynak makinenin dışarı çıkışının engellenmediğini varsayarak bu tarafta yapılacak birşey yok. Ama hedef makine dinleme modunda olduğundan bu makinede uygun portlar açacak ayarların yapılması gerekecek. Ayrıca hedef makinede bu bağlantıyı bekleyecek (dinleyecek) bir yapı da olmalı. Bu da WinRM hizmeti. Varsayılan olarak yeni sistemlerde bu kapalı geliyor. Bunun da açılması gerekecek. Birkaç küçük ayrıntı daha var. Şükür ki bunları otomatik yapan bir cmdlet var. Hedef makinede sadece şunu yazmak yeterli:
PS> Enable-PSRemoting
Eğer bunu yazınca ağ profilimiz ile ilgili şikayet ediyorsa Public profildeyiz demektir. İki seçeneğimiz var; ya -SkipNetworkProfileCheck parametresini kullanarak tekrar deneyebiliriz ya da ağ profilimizi değiştirmeliyiz. Bence ikincisi daya iyi bir seçenek. Değiştirmek için
PS> Set-NetConnectionProfile -NetworkCategory Private
Hedef makine ile işimiz bitti. Şimdi sıra kaynak makinede. Powershell ile bağlanırken kullanıcı adı ve şifre bilgileri karşı makineye gönderileceğinden karşıdaki makinenin gerçekten güvenilir olup olmadığından emin olmamız istenir. Bu sebeple rastgele makinelere bağlanmayı denerken kullanıcı adı ve şifre bilgilerini göndermememiz için güvenilir bilgisayarlar listesi oluşturulmuş. Sadece bu listedeki bilgisayarlara bağlanabiliriz. Bu liste de WSMan sürücüsünde localhost\Client\TrustedHosts gibi bir adrestedir. Mevcut içeriğini görüntülemek için
PS> Get-Item WSMan:\localhost\Client\TrustedHosts
kullanabiliriz. Hedef makinemizin adının da "hedef" olduğunu varsayarsak bu dosyaya bu bilgisayarın ismini girmemiz gerek. Şöyle bir komut kullanabiliriz:
PS> Set-Item WSMan:\localhost\Client\TrustedHosts -Value "hedef"
Bu komut TrustedHosts'un içeriğini değiştirir. Birden fazla ekleme yapmak için -Concatenate parametresi kullanılabilir. Bir de "sunucu" adında bir makine daha ekleyelim:
PS> Set-Item WSMan:\localhost\Client\TrustedHosts -Value "hedef" -Concatenate
Bu aşamada artık bağlanabiliriz:
PS> Enter-PSSession -Computername hedef -Credential (Get-Credential "hedef\kullanici")
Burada sorun varsa belki hedef makinedeki güvenlik duvarını tekrar kontrol etmek isteyebiliriz.
PS> Get-NetFirewallRule "WINRM-HTTP-In-TCP*"
Bu komut sonucunda 2 kural dönecektir. İkisi de 5985/TCP portunu etkinleştiren kuraldır ama özelliklerini aşağıaki gibi kıyaslayayım:
Kural ismi | Ağ profili | Kapsam | Port/Protokol | Private Profilde |
WINRM-HTTP-In-TCP | Public | Yerel alt ağ | 5985/TCP | Devre dışı |
WINRM-HTTP-In-TCP-NoScope | Domain ve Private | -yok- | 5985/TCP | Etkin |
Bu tabloda vurgulamak istediğim, isminde NoScope geçen Domain ve Private profilleri için oluşturulmuş bir kural. Bizim profilimiz de Private olduğu için burada etkinleştirilmiş duruma olmalı. Diğer kuralda ise kapsam (scope) belirtilmiştir, sadece yerel alt ağ. Eğer olur da public profili etkinleştirirsek bizim kontrol etmemiz gereken kural bu olacak.
Buna alternatif olarak hedef makine SSH sunucusu varsa ssh ile de bağlanmak mümkün. O yazımda yazmadığım şekilde Windows makineye ssh yüklemek için (bugün için beta) artık winget de kullanabiliriz:
PS> winget install "OpenSSH Beta"
2024-05-02: Bir makinenin uzaktan bağlantı alıp alamayacağını kontrol etmek için
Test-WSMan
kolay yapılandırma için (WinRM servisini başlatıp, başlangıç tipini otomatik seçip herhangi bir IP adresinden gelecek HTTP bağlantılarını dinlemeye başlaması ve Windows Firewall üzerinden WinRM portunu açması için)
winrm quickconfig
ve hatta https üzerinden yapılandırma için
winrm quickconfig -transport:https
kullanılabilir. WinRM yapılandırmasını kontrol etmek için
winrm get winrm/config/service
ve WinRM hizmetinin durumunu görmek için
winrm enumerate winrm/config/listener
kullanılabilir. Ya ad TrustedHosts'u değiştirmek için
winrm set winrm/config/config '@{TrustedHosts="192.168.1.5"}'
---