2008/08/26

WinRM - Windows Remote Management 기능 활성화

WinRM(Windows Remote Management) 은 Windows Server 2003 R2 부터 포함이 되기 시작한 윈도우 기반 관리를 위한 새로운 인터페이스 입니다. 이전 까지는 WMI 를 통해서 윈도우 리소스 접근이 되었는데,. 물론 매우 훌륭한 시스템 입니다. 그런데,. 이 WMI 는 DCOM 를 통해서 가능하기에 현재의 네트워크 보안 인프라에서는 제약이 많은게 사실 입니다.

이러한 제한을 뛰어 넘기 위한 것과,.. 그것도 그렇거니와, 하드웨어 및 운영체제 마다 각자의 독자적인 관리 인터페이스 때문에 다양한 인프라로 구축된 환경에서는 관리가 매우 까다로웠습니다. 

이를 테면,. Windows 관리를 위한 System Center 제품도 기존에는 Microsoft 외 Linux 나 Oracle 등 다른 제품은 해당 벤더에서 System Center 용 관리팩을 별도로 제공을 해주었습니다. 그러나 이제는 표준 인터페이스가 마련이 되어 있으므로 Microsoft 에서 타사 제품에 대한 관리팩을 직접 제공을 해줄수가 있게 된것 이죠.

그래서,.  AMD, DELL, Intel, Microsoft, Sun Microsystems 등 여러 하드웨어 및 운영체제 업체등 에서 업계 표준의 공통의 관리 인프라 인터페이스를 Http 기반의 Soap 메시지 형태의 WS-Management protocol 를 만들었습니다. 최근의 거의 대부분의 운영체제에서 지원하고 있으며, Windows 의 경우, XP 부터 별도의 WinRM 패키지를 설치하면 가능해 집니다. 

물론 운영체제에 대한 것은 역시 WinRM 를 통해서 요청이 WMI 로 라우트 됩니다. 실제 정보는 계속해서 WMI 가 담당 합니다.하드웨어 관리도 가능하기는 한데,. 하드웨어 모듈인 BMC 컨트롤러가 있는 장비의 경우에는 하드웨어 관리까지 가능합니다.



<그림. TechNET>

도움말:
Windows Remote Management(WinRM) 서비스는 원격 관리를 위한 WS-Management 프로토콜을 구현합니다. WS-Management는 원격 소프트웨어 및 하드웨어 관리에 사용되는 표준 웹 서비스 프로토콜입니다. WinRM 서비스는 네트워크에서 WS-Management 요청을 수신하여 처리합니다. WinRM 서비스가 네트워크에서 요청을 수신하려면 winrm.cmd 명령줄 도구를 사용하거나 그룹 정책을 통해 수신기를 구성해야 합니다. WinRM 서비스는 WMI 데이터에 대한 액세스를 제공하고 이벤트를 수집할 수 있도록 합니다. 이벤트를 수집하고 이벤트에 가입하려면 이 서비스가 실행되고 있어야 합니다. WinRM 메시지는 HTTP 및 HTTPS를 전송 수단으로 사용합니다. WinRM 서비스는 IIS에 의존하지 않지만 동일한 컴퓨터에서 IIS와 포트를 공유하도록 미리 설정되어 있습니다. WinRM 서비스는 /wsman URL 접두사를 예약합니다. IIS와의 충돌을 방지하려면 관리자가 IIS에서 호스트되는 웹 사이트가 /wsman URL 접두사를 사용하지 않도록 해야 합니다.


전체적인 WinRM 구조는 위 Diagram 을 보면 알수 있을것 같고,. 앞서 얘기한 것처럼 WinRM 은 Http 를 이용한다고 하였습니다. 그렇다면,. 해당 서버에 IIS 를 운영하는 경우에는 어떻게 되는 것이냐? 라는 자연스러운 궁금증이 있을것 같습니다.

이와 같은 궁금중은,. 지난 IIS 6 에서부터 IIS Core 가 변경되어 Http 요청을 커널모드에서 처리를 하는 Http.sys 에서 찾을수 있습니다. Http.sys 는 포트 공유를 통해서 Http를 통해서 들어온 요청을 구분하여 처리를 하게 됩니다. 아래 Diagram 을 보시면 훨씬더 쉽게 이해를 할수 있을것 같습니다.

<그림. http://blogs.technet.com/otto/ >

WinRM 에 대한 요약은 위 도움말을 참조하면 될것 같고, 주의 사항중에 IIS 에서 사이트 구성서 /wsman 만 사용하지 않으면 될것입니다. WS-Management protocol 에 대한 관련 상황 설명을 각설하고,.. 보다 자세한 사항은 다음 링크를 참조하시면 좋겠습니다.

http://www.dmtf.org/standards/wsman
http://en.wikipedia.org/wiki/DMTF

- 그렇고 보면,.. RPC over Http/s 도 이와 흡사한 구조 입니다. 차이점 이라면,. Http 프록시 -특정 모듈(dll)- 웹주소에 직접 요청을 전달하고 받는 다는 것과 IIS 가 필수로 작동 되어야 한다는 점 일것 같습니다. -


이 글을 쓰는 본인도,.. WMI 로만 서버관리를 하고 있는 중이라,.

새로운 인터페이스인 WinRM 에 대해서 알고 있는 지식이 현재 얕은지라.... -_-;; 솔직히 Windows Server 2003 R2에 포함이 되었을 때에도 별로 관심이 없었죠. 왜냐하면 Windows 만 운영을 하고 있으니깐,. 그리고 WMI 로도 충분 했으니깐요.^^;;;;

이제,. WinRM 을 서버(관리되는)측에 설치 및 구성하는 방법 입니다. 물론 이미 알려져 있는 내용이기는 합니다 만,. 스스로 한번더 되새겨볼 기회를 갖고자.....,

Windows 구성요소에는 2가지가 있습니다. 서버측 역할 도구와 클라이언트 역할 도구 입니다. 서버측 역할 도구는 Winrm.vbs 이고, 클라이언트는 Windows Remote Shell(WinRS.exe) 입니다.

C:\>winrm
Windows Remote Management 명령줄 도구

Windows Remote Management(WinRM)는 Microsoft가 구현한
WS-Management 프로토콜로서, 웹 서비스를 사용하여 로컬 및 원격 컴퓨터와
안전하게 통신할 수 있는 방법입니다.

사용:
  winrm OPERATION RESOURCE_URI [-SWITCH:VALUE [-SWITCH:VALUE] ...]
        [@{KEY=VALUE[;KEY=VALUE]...}]

Winrm.vbs 는 서버측에서 요청된 응답을 하기 위해서 관련 환경을 구성하기 위한 도구 입니다. 서버측에서 응답해 줄수 있는 리소스를 구성하고,. 또한 리소스를 얻기 위해서 서버측에 접속할수 있도록 접속 환경을 구성 합니다.




명령행에서의 구성 도구인 Winrm 은 WSMAN COM API 개체(C:\Windows\system32\WSMAUTO.DLL)를 이용한 Vbscript 입니다. 이 말은,. 외부에서 해당 COM 개체를 이용해서 WSMAN 기반의 관리 도구를 따로 만들수 있다는 얘기가 될수 있겠지요.^^

Set Wsman = CreateObject("Wsman.Automation")
Set xmlFile = CreateObject( "MSxml.DOMDocument")
Set Session = Wsman.CreateSession Response = Session.Get("http://schemas.microsoft.com/wbem/wsman/" _ & "1/wmi/root/cimv2/Win32_Service?Name=Spooler")
xmlFile.LoadXml(Response)
xmlFile.Save( "c:\RawOutput.xml")

WsmCL.dll - C 에서 사용할수 있는 라이브러리
WsmSvc.dll - WinRM 리스너 서비스
WsmProv.dll - 공급자 하위시스템
WsmRes.dll - 리소스 파일
WsmWmPI.dll - WMI 플러그인


C:\>winrs -?

사용법
=====
(모두 대문자인 텍스트 = 사용자가 제공해야 하는 값입니다.)

winrs [-/SWITCH[:VALUE]] COMMAND

COMMAND - cmd.exe 셸에서 명령으로 실행할 수 있는 문자열입니다.

WinRS.exe 는 클라이언측 에서 지정 대상(로컬 또는 원격)으로 WS-Management 를 통해서 접속후 지정된 장비의 리소스를 가져오기 위한 도구 이며,. Soap 메시지 특성상 구조적 데이터 형식의 XML로 반환을 받을수 있습니다.  이것은,. C# 이나 VB, C++  등 개발 언어에서 Soap 요청을 통해서 XML 을 반환받고 그 데이터를 다른 형식으로 또는 용도로 사용이 쉽다는 것입니다.

서버운영자에게는,. 강력한 쉘 도구인 PowerShell 을 이용하는 것도 매우 좋은 방법입니다. 특히 PowerShell V2 (현재 CTP)에서는 Remoting 을 지원하는데 이때 원격 호스트 접속 방법으로 WinRM 을 사용합니다.


간단한 예로 WinRS 클라이언트 에서의 요청 입니다.

C:\>winrs -r:http://localhost "dir c:"
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: A036-5CE5

C:\Users\Administrator 디렉터리

2008-06-26  오후 05:31    <DIR>          .
2008-06-26  오후 05:31    <DIR>          ..
2008-06-26  오후 05:10    <DIR>          Contacts
2008-08-19  오후 02:34    <DIR>          Desktop ................
               0개 파일                   0 바이트
              13개 디렉터리   8,552,103,936 바이트 남음

위 예제는,. 로컬 호스트에 대한 쿼리 결과 입니다. 물론 원격지는 localhost 대신에 원격지 주소와 권한이 있는 인증 정보를 제공하면 동일한 결과를 받아 볼수 있습니다.

앞서 언급한 것처럼, Windows Server 2003 R2 에는 추가 구성요소로 내장되어 있고 -제어판의 프로그램 추가/삭제 에서 구성요소 설치 필요-, Windows Server 2008 은 추가 설치 없이 사용이 가능합니다. 그리고 그외 버젼의 경우에는 WinRM 패키지를 다운로드 받아서 설치가 가능합니다.

- Windows Server 2003 R2에 설치된 패키지 보다는 다운로드 해서 최신 버젼을 설치하는 것이 좋습니다. -
 
다운로드: WS-Management v1.1


Windows Server 2008 은,. 기본값으로 WinRM 이 비활성화 되어 있습니다.

외부에서 접속이 가능하도록 리스너 설정을 해줘야 합니다. winrm quickconfig (또는 winrm qc ) 을 통해서 기본적인 작동이 가능할 정도는 쉽게  활성화가 가능 합니다.

(*참고로, Windows Server 2003 R2 에서는 quickconfig 스위치가 작동하지 않으며 각 설정을 개별적으로 해야 합니다.)

C:\Users\Administrator>winrm quickconfig
WinRM이 이 컴퓨터에 관리를 위해 원격으로 액세스할 수 있도록 설정되지 않았습니다.
다음 사항을 변경해야 합니다.

이 컴퓨터에서 모든 IP 주소로 WS-Man 요청을 수락하려면  HTTP://*에서 WinRM 수신기를 만드십시오.
WinRM 방화벽 예외를 사용합니다.

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

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

이 컴퓨터에서 모든 IP 주소로 WS-Man 요청을 수락하려면 HTTP://*에서 WinRM 수신기를 만드십시오.
WinRM 방화벽 예외를 사용합니다.

C:\Users\Administrator>winrm enumerate winrm/config/listener
Listener
    Address = *
    Transport = HTTP
    Port = 80
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 10.0.0.17, 127.0.0.1, ::1, 2001:0:cf2e:308c:2c0e:d42:f5ff:ffee, fe80::5efe:10.0.0.
17%11, fe80::2c0e:d42:f5ff:ffee%12, fe80::34d9:7fb6:afa3:b046%10


물론,. 지정된 IP 주소나 Http나 Https 같은 프로토콜, 인증서 등 해당 호스트에 맞는 설정을 해줘야 합니다. 기본으로 구성되는 것만 보면,. IP 제한이 없고,. Http(80)이며 인증서 설정이 되어 있지 않습니다.

각 설정방법은 도움말을 참고하시면 쉽게 설정이 가능합니다.
각 설정에 대한 자세한 정보는 도움말(WinRM 스위치 -?)을 참조하면 됩니다.

인증서 설정이 필요한 이유는, Http 프로토콜 특성상 ClearText 형태 이므로 실제 원격지에서의 리소스 요청시 리소스 접근이 가능한 계정 정보를 넘겨줘야 하는 경우와 받아온 리소스가 XML 이므로 쉽게 노출이 됩니다. 물론 인증이 기본 인증 이상인 경우 인증 정보는 암호화가 되지만....

인증 방법은, 다음과 같은 종류의 방식이 가능 합니다. 물론,. Clinet 측에서는 활성화되어 이용할 인증 방법이 Server 측에서 비활성화 되어 있으면 인증이 되지 않겠지요.^^

Basic Authentication
Digest Authentication
Negotiate Authentication
Kerberos Authentication
Client Certificate-based Authentication

시간이 된다면,. 다음번에는 WinRM 을 Windows Server 2003 R2에서 활성화 하는 방법과 WinRM 을 이용한 몇가지 활용법을 정리해볼 생각입니다. ^^;;


25-Windows-Remote-Management-Architecture.png
25-WS-Man-Architecture.jpg
25-Windows-Service-Windows-Remote-Management-WinRM.png

댓글 없음:

댓글 쓰기

가장 많이 본 글