win10配置winrm以及错误处理

时间:2024-11-13 14:01:45

paramiko是连接Linux服务器的,如果想要远程连接Windows,则需要用到winrm
winRM服务是windows server下PowerShell的远程管理服务。
Python脚本通过连接winRM模块操作windows命令行。
查看winrm服务状态,默认没有启动

 winrm enumerate winrm/config/listener

winrm服务启动

 winrm quickconfig

报错:

PS C:\Windows\system32> winrm quickconfig
在此计算机上,WinRM 未设置为接收请求。
必须进行以下更改:

启动 WinRM 服务。
将 WinRM 服务类型设置为延迟的自动启动。

执行这些更改吗[y/n]? y

WinRM 已更新为接收请求。

成功更改 WinRM 服务类型。
已启动 WinRM 服务。
WSManFault
    Message
        ProviderFault
            WSManFault
                Message = 由于此计算机上的网络连接类型之一设置为公用,因此 WinRM 防火墙例外将不运行。 将网络连接类型更改为域或专用,然后再次尝试。

错误编号: -2144108183 0x80338169
由于此计算机上的网络连接类型之一设置为公用,因此 WinRM 防火墙例外将不运行。 将网络连接类型更改为域或专用,然后再次尝试。

打开网络和Internet设置:
在这里插入图片描述

更改连接属性为专用:
在这里插入图片描述

运行再次报错:

PS C:\Windows\system32> winrm quickconfig
已在此计算机上运行 WinRM 服务。
WinRM 没有设置成为了管理此计算机而允许对其进行远程访问。
必须进行以下更改:

启用 WinRM 防火墙异常。
配置 LocalAccountTokenFilterPolicy 以远程向本地用户授予管理权限。

开启防火墙:

 netsh advfirewall firewall set rule group="Windows 远程管理" new enable=yes

运行成功:

已更新 3 规则。
确定。

再次启动:

C:\Windows\system32> winrm quickconfig
已在此计算机上运行 WinRM 服务。
在此计算机上设置了 WinRM 以进行远程管理。

查看:

PS C:\Windows\system32> winrm enumerate winrm/config/listener
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 127.0.0.1, 192.168.64.84, ::1

为winrm service 配置auth

winrm set winrm/config/service/auth    '@{Basic="true"}'
Auth
    Basic = true
    Kerberos = true
    Negotiate = true
    Certificate = false
    CredSSP = false
    CbtHardeningLevel = Relaxed```

为winrm service 配置加密方式为允许非加密

winrm set winrm/config/service  @{AllowUnencrypted="true"}
PS C:\Windows\system32> winrm set winrm/config/service '@{AllowUnencrypted="true"}'
Service
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
    MaxConcurrentOperations = 4294967295
    MaxConcurrentOperationsPerUser = 1500
    EnumerationTimeoutms = 240000
    MaxConnections = 300
    MaxPacketRetrievalTimeSeconds = 120
    AllowUnencrypted = true
    Auth
        Basic = true
        Kerberos = true
        Negotiate = true
        Certificate = false
        CredSSP = false
        CbtHardeningLevel = Relaxed
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    IPv4Filter = *
    IPv6Filter = *
    EnableCompatibilityHttpListener = false
    EnableCompatibilityHttpsListener = false
    CertificateThumbprint
    AllowRemoteAccess = true

注意:
1.需要在控制端和被控制端都进行配置才可以使用winrm远程连接
2.只用于局域网,两台电脑必须可以ping通
3.必须使用管理员打开命令行,否则会出现权限不够导致出错

下面这些命令我没有使用,有需要的可以取:
1.能够以每组多达50个实例的速度获取实例

winrm set winrm/config @{MaxBatchItems="50"}

2.通过增大分配的最大封包大小和超时设置,也可以提高性能

winrm set winrm/config @{MaxEnvelopeSizekb="150"}
winrm set winrm/config @{MaxTimeoutms ="60000"}

3.要获取当前的WinRM配置设置,请执行以下命令

winrm g winrm/config

4.默认情况下,客户端计算机要求对网络流量加密。要允许客户端计算机请求未加密流量,请执行以下命令

winrm s winrm/config/Client @{AllowUnencrypted="true"}
 
TrustedHosts 是一个数组,用于指定可信的远程计算机的列表。同一工作组中的其他计算机或不同域中的计算机均应添加到此列表中。TrustedHosts 列表中的计算机未经过身份验证。

5.执行以下命令可将所有计算机都纳入TrustedHosts

winrm s winrm/config/Client @{TrustedHosts="*"}

6.基本身份验证是以明文形式将用户名和密码发送给服务器或代理的方案。这是最不安全的身份验证方法。默认值为True。
执行以下命令可将客户端计算机设置为使用基本身份验证

winrm s winrm/config/Client/Auth @{Basic="true"}