winrm 을 이용해서 리눅스 머신에서 윈도우 서버 관리!

WinRM 을 통해서 리눅스머신에서 윈도우서버로 원격 명령을 날리는 방법에 대해 간략하게 기술한다.

윈도우 서버에서 먼저 winrm 에 대한 설정을 진행해준다.

winrm quickconfig 커멘드를 사용하면 (run as administrator)
해당 서비스를 사용할 수 있도록 설정이 가능하다. (사용여부 y로 물어봄)

winrm 서비스가 사용가능하게 되면 다음과 같이 winrm 의 config를 확인할 수 있다.

winrm g winrm/config

이중 config 하위에 service 항목중 Auth와 AllowUnencryypted 는 기본설정이 false 로 되어있는데,
이부분을 true (사용) 으로 변경해주는 설정을 한다. (Basic 인증방식 사용)

winrm s winrm/config/service/auth @{Basic=”true”}

winrm s winrm/config/service @{AllowUnencrypted=”true”}

이후에 리눅스머신에서 winrm을 통해 plaintext를 통한 계정정보 입력을 통하여, 서버에 커멘드를 실행할 수 있다.
참고로 powershell에서도 아래와 같은 커멘드로 활성화 할 수 있다.

Set-item WSMan:\localhost\service\auth\basic “true” -force

Set-Item WSMan:\localhost\Service\AllowUnencrypted “true” -force

윈도우 서버에서 위와 같은 설정이 완료 되면 quickconfig를 통해서 허용 되었겠지만,
http 프로토콜로 5985 포트를 이용해서 접근하게 된다. 스위치에 Access List 를 관리한다면, 허용해줄것~

linux 관리머신에서 winrm 을 이용하기 위해 WinRM for Ruby 라이브러리를 설치한다.
(1.9 버전 이상의 ruby를 설치하여야 하고, gem install winrm (git 저장소 https://github.com/zenchild/WinRM) 으로 설치하고, WinRM 라이브러리를 이용해 서버 제어 스크립트를 생성한다.

예시 ) test.rb

 require ‘winrm’

endpoint = ‘http://10.0.0.1:5985/wsman’

winrm = WinRM::WinRMWebService.new(endpoint, :plaintext, :user =>

‘계정’, :pass => ‘암호’, :basic_auth_only => true )

winrm.cmd(‘ipconfig /all & dir c:\\‘) do |stdout, stderr|

    STDOUT.print stdout

    STDERR.print stderr

end

위와 같이 간단한 루비스크립트를 생성하고,
/usr/bin/ruby test.rb 를 실행하게 되면, 10.0.0.1 IP를 갖는 원격지 윈도우 서버에서
ipconfig /all 커멘드와 dir c:\ 라는 커멘드를 실행하여, 결과값 (Standard Output) 을 알려준다.

해당 방법은 원격지에서 WinRM을 통한 command를 실행시키는 방식으로
관리서버에서는 동시 다수 서버에 명령어를 전달하고, 다수의 서버에서는 개별적으로 해당 명령을 실행하기 때문에 서버 관리에 매우 유용하다.

글쓴이