PowerShell远程
PowerShell远程管理使用三种协议 1.http 2.https 3.ssh Windows server 默认启用的是http,在域环境下使用的是Kerberos身份验证。因为域内的主机互相信任,所以可以确认访问的远程主机不是仿冒的。可以放心的提交凭证,但是在工作组环境或者云上的主机就不那么确定了。如果访问的是仿冒的主机的,那么凭证就可以泄露。如果是生产环境,冒这样的风险显然没有必要。
可以DNS解析
如果是可以DNS解析的主机,购买一张或者申请一张免费的SSL证书,然后注册一个https端口,也是件很容易的事情。
无法DNS解析
如果没有公网IP、DNS服务器、域名。又想要https保护流量和确认主机,那么使用自签名证书也算不错的选择。 下面的步骤可以作为参考:
- 创建自签名证书
$cert = New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName $env:COMPUTERNAME,<IP>
- 注册https端口
New-Item -Path WSMan:\Localhost\Listener -Transport HTTPS -Address * -CertificateThumbprint $cert.Thumbprint
- 导出证书
Export-Certificate -Cert $cert -Type CERT -FilePath c:\kite.cer
- 导入证书,创建证书机器、管理机器上都需要
Import-Certificate -FilePath C:\kitt.cer -CertStoreLocation Cert:\LocalMachine\Root\
- 防火墙放行流量
New-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)" -Name "Windows Remote Management (HTTPS-In)" -Profile Any -LocalPort 5986 -Protocol TCP
总结
远程成功连接需要满足以下条件: 我们设远程机器为S,管理主机为C。
- S,C都需要启用Winrm
- S创建自签名证书,DNS名为主机名和IP地址。
- S注册一个https端口
- S开启防火墙例外,放行入站5986端口流量。
- 在S,C上导入公钥到'受信任的根证书颁发机构'
- 在C连接S的命令中添加-UseSSL.