pywinrm 사용을 위한 winrm 설정과 테스트 코드.

winrm 설정과 pywinrm을 이용한 테스트 코드 실행.

* 작업 환경.

winrm은 windows10에 설정.
pywinrm은 ubuntu 18.04, python 3.6.9에서 실행.

1. 윈도우 네트워크 프로필 설정.

네트워크프로필을 개인네트워크로 설정한다. 공용네트워크로 설정되어 있으면 quick config가 진행되지 않는다.

시작 -> 네트워크 상태 -> 이더넷 -> 네트워크(연결됨) -> 네트워크 프로필 -> 개인

네트워크 상태

이더넷 선택

네트워크(연결됨) 선택

네트워크 프로필

개인

2. winrm 설정
설정은 파워쉘이나, 명령프롬프트에서 모두 가능하다. 아래는 명령프롬프트에서 실행했다. 파워쉘의 경우는 오류가 발생할 수 있다.

명령프롬프트 (관리자권한) 실행 후 아래 명령 실행.

C:\WINDOWS\system32>winrm qc
이 컴퓨터에서 요청을 수신하도록 WinRM이 설정되지 않았습니다.
다음 사항을 변경해야 합니다.

WinRM 서비스를 시작하십시오.
자동 시작을 지연하려면 WinRM 서비스 유형을 설정하십시오.

변경하시겠습니까[y/n]? y

요청을 수신하도록 WinRM이 업데이트되었습니다.

WinRM 서비스 종류가 변경되었습니다.
WinRM 서비스를 시작했습니다.
WinRM이 이 컴퓨터에 관리를 위해 원격으로 액세스할 수 있도록 설정되지 않았습니다.
다음 사항을 변경해야 합니다.

WinRM 방화벽 예외를 사용합니다.
로컬 사용자에게 원격으로 관리자 권한을 부여하도록 LocalAccountTokenFilterPolicy를 구성합니다.

변경하시겠습니까[y/n]? y

원격 관리를 위한 WinRM이 업데이트되었습니다.

WinRM 방화벽 예외를 사용합니다.
로컬 사용자에게 원격으로 관리자 권한을 부여하도록 LocalAccountTokenFilterPolicy를 구성했습니다.

3. winrm 설정 보기

C:\WINDOWS\system32>winrm get winrm/config
Config
    MaxEnvelopeSizekb = 500
    MaxTimeoutms = 60000
    MaxBatchItems = 32000
    MaxProviderRequests = 4294967295
    Client
        NetworkDelayms = 5000
        URLPrefix = wsman
        AllowUnencrypted = false
        Auth
            Basic = true
            Digest = true
            Kerberos = true
            Negotiate = true
            Certificate = true
            CredSSP = false
        DefaultPorts
            HTTP = 5985
            HTTPS = 5986
        TrustedHosts
    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 = false
        Auth
            Basic = false
            Kerberos = true
            Negotiate = true
            Certificate = false
            CredSSP = false
            CbtHardeningLevel = Relaxed
        DefaultPorts
            HTTP = 5985
            HTTPS = 5986
        IPv4Filter = *
        IPv6Filter = *
        EnableCompatibilityHttpListener = false
        EnableCompatibilityHttpsListener = false
        CertificateThumbprint
        AllowRemoteAccess = true
    Winrs
        AllowRemoteShellAccess = true
        IdleTimeout = 7200000
        MaxConcurrentUsers = 2147483647
        MaxShellRunTime = 2147483647
        MaxProcessesPerShell = 2147483647
        MaxMemoryPerShellMB = 2147483647
        MaxShellsPerUser = 2147483647

4. 몇 가지 설정을 변경한다.

* 인증방식 설정

C:\WINDOWS\system32>winrm set winrm/config/service/Auth @{Basic="true"}
Auth
    Basic = true
    Kerberos = true
    Negotiate = true
    Certificate = false
    CredSSP = false
    CbtHardeningLevel = Relaxed

* 암호화되지 않은 비밀번호 허용

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

* 쉘당 최대 메모리 설정.

C:\WINDOWS\system32>winrm set winrm/config/winrs @{MaxMemoryPerShellMB="1024"}
Winrs
    AllowRemoteShellAccess = true
    IdleTimeout = 7200000
    MaxConcurrentUsers = 2147483647
    MaxShellRunTime = 2147483647
    MaxProcessesPerShell = 2147483647
    MaxMemoryPerShellMB = 1024
    MaxShellsPerUser = 2147483647

* winrm (windows remote management) 서비스 확인

* 윈도우 방화벽에서 winrm 허용 확인.

5. pywinrm 스크립트를 작성하여 윈도우 PC의 IP 주소 확인하는 명령 실행. (pywinrm 페이지에서 가장 기본적인 예제 스크립트)

리눅스에서 파이썬 스크립트로 winrm 연결 확인.

(PythonTest) snowfox@fox:~/code$ cat remote.py
import winrm


s = winrm.Session('http://172.30.192.200:5985', auth=('snowfox', 'xyzxyz'))
r = s.run_cmd('ipconfig', ['/all'])
print(r.std_err)
print(r.std_out)

실행결과는 아래와 같다.

STATUS: 0
b'\r\nWindows IP Configuration\r\n\r\n   Host Name . . . . . . . . . . . . : DESKTOP-7AJ21VP\r\n   Primary Dns Suffix  . . . . . . . : \r\n   Node Type . . . . . . . . . . . . : Hybrid\r\n   IP Routing Enabled. . . . . . . . : No\r\n   WINS Proxy Enabled. . . . . . . . : No\r\n\r\nEthernet adapter \xc0\xcc\xb4\xf5\xb3\xdd:\r\n\r\n   Connection-specific DNS Suffix  . : \r\n   Description . . . . . . . . . . . : Intel(R) 82579V Gigabit Network Connection\r\n   Physical Address. . . . . . . . . : E8-03-9A-6E-03-F2\r\n   DHCP Enabled. . . . . . . . . . . : No\r\n   Autoconfiguration Enabled . . . . : Yes\r\n   IPv4 Address. . . . . . . . . . . : 172.30.192.200(Preferred) \r\n   Subnet Mask . . . . . . . . . . . : 255.255.255.0\r\n   Default Gateway . . . . . . . . . : 172.30.192.1\r\n   DNS Servers . . . . . . . . . . . : 172.30.96.21\r\n                                       168.126.63.1\r\n   NetBIOS over Tcpip. . . . . . . . : Enabled\r\n'

* 참고문서
https://pypi.org/project/pywinrm2/
https://learn.microsoft.com/en-us/windows/win32/winrm/portal
https://kochuns.blogspot.com/2018/01/powershell-remote.html

답글 남기기

Your email address will not be published.