Remote windows machine 원격 관리 하기 – winexe
### remote windows machine 원격 관리 하기
작성자 : 서진우
작성일 : 2013년 12월 29일
1. winexe 설치 및 기본 환경 설정
winexe 는 Linux 머신에서 원격의 windows 머신에 windows command 를 원격에서
수행할 수 있게하는 프로그램이다.
우선 원격 windows 머신에 명령을 전달할 Linux 서버에 대해 445/tcp Port 를 허용한다.
가급적 해당 Linux 머신을 관리호스트로 지정할 경우 해당 Linux 서버의 IP에 대해 모든
Port를 허용하는 것을 조심스레 추천한다.
netsh advfirewall firewall add rule name=”RNTIER Console” dir=in action=allow protocal=tcp localport=any remoteip=<linux machine ip>
관리용 Linux 서버에 winexe를 설치한다.
http://www.aldeid.com/wiki/Winexe
$ cd ~/src/
$ wget http://downloads.sourceforge.net/project/winexe/winexe-1.00.tar.gz
$ tar xzvf winexe-1.00.tar.gz
$ cd winexe-1.00/source4/
$ ./autogen.sh
$ ./configure
$ make basics bin/winexe
$ ./bin/winexe -V
기본 사용법 :
Usage: winexe //host command
Authentication options
-U, –user=[DOMAIN/]USERNAME[%PASSWORD]
Set the network username
-N, –no-pass
Don’t ask for a password
–password=STRING
Password
-A, –authentication-file=FILE
Get the credentials from a file
-P, –machine-pass
Use stored machine account password (implies -k)
–simple-bind-dn=STRING
DN to use for a simple bind
-k, –kerberos=STRING
~/src/winexe-1.00/source4$ ./bin/winexe -U pilou%oopsoops //192.168.1.27 “ipconfig”
Common options
–uninstall
Uninstall winexe service after remote execution
–reinstall
Reinstall winexe service before remote execution
–system
Use SYSTEM account
–runas=[DOMAIN\]USERNAME%PASSWORD
Run as user (BEWARE: password is sent in cleartext over net)
–runas-file=FILE
Run as user options defined in a file
–interactive=0|1
Desktop interaction: 0 – disallow, 1 – allow. If you allow use also –system switch (Win requirement). Vista do not support this option.
–ostype=0|1|2
OS type: 0 – 32bit, 1 – 64bit, 2 – winexe will decide. Determines which version (32bit/64bit) of service will be installed.
실제 사용 예제
– 원격 cmd 실행(접속) 예제
$ ./winexe -U unknown //192.168.1.32 “cmd.exe”
– 원격 외부 명령 실행 예제
# ./winexe -U administrator –password=<password> //192.168.201.61 ipconfig
Windows IP 구성
이더넷 어댑터 로컬 영역 연결 2:
연결별 DNS 접미사. . . . :
링크-로컬 IPv6 주소 . . . . : fe80::6dcb:7593:99a:fc84%12
IPv4 주소 . . . . . . . . . : 192.168.201.61
서브넷 마스크 . . . . . . . : 255.255.255.0
기본 게이트웨이 . . . . . . : 192.168.201.254
터널 어댑터 isatap.{A41D5256-E96E-4053-B88C-B796CAFAFAA7}:
미디어 상태 . . . . . . . . : 미디어 연결 끊김
연결별 DNS 접미사. . . . :
터널 어댑터 로컬 영역 연결* 11:
연결별 DNS 접미사. . . . :
IPv6 주소 . . . . . . . . . : 2001:0:5ef5:79fb:281b:f36:3f57:36c2
링크-로컬 IPv6 주소 . . . . : fe80::281b:f36:3f57:36c2%11
기본 게이트웨이 . . . . . . : ::
– cmd shell 상에서 특정 명령 수행하기
# ./winexe -U administrator –password=root/// //192.168.201.61 “cmd /c dir”
4. powershell 상에서 특정 명령 수행하기
# ./winexe -U administrator –password=root/// //192.168.201.61 “powershell ps”
window 머신을 rebooting 한 후, 아래와 같은 에러 발생 된다.
# ./winexe -U administrator –password=root/// //192.168.201.62 hostname
Service cannot start, status=0x00000001
Service cannot start, status=0x00000001
ERROR: Failed to install service winexesvc – NT_STATUS_UNSUCCESSFUL
일단 winexesvc 는 winexe.exe 최초 실행 시 대상 windows 에 자동으로 만들게 된다.
이때 해당 서비스가 수동으로 시작 되도록 구성된다.
그렇기 때문에 반드시 windows 머신을 리부팅 하기 전에 아래 명령으로 winexesvc 서비스를
부팅시 자동으로 시작하도록 만들어 준다.
# ./winexe -U administrator –password=root/// //192.168.201.61 “sc config winexesvc start= auto”
2. pstools 이용하기
winexe 는 linux 머신에서 원격 windows 머신에 명령을 전달하는 방법이다.
특정 windows 머신에서 다른 windows 머신에 원격 명령 전달을 위해서는 pstools를 이용할 수
있다.
우선 remote windows 에 해당하는 머신에서 관리 대상 windows 머신에 대한 IP 방화벽
해제는 winexe 와 동일하다.
wget http://download.sysinternals.com/files/PSTools.zip
압축파일형태로 제공되고, Windows RPC 기능을 이용한 많은 스크립트 명령어를 제공한다.
압축 파일을 c:\windows 밑에 해제하고, 명령창(cmd)에서
psexec -u administrator -p <password> \\<remote windows> <command>
이밖에 pxefile, psgetsid, psinfo, pslist … 유용한 부가 명령이 존재한다.
3. winexe 를 이용한 일괄 명령 처리 프로그램 ensh_win, ensync_win
주요 옵션
-l : 특정 nodelist 선택
-n : 특정 host 선택
-p : 불필요한 결과 메세지 생략
– ensh_win
: Linux 서버에서 여러대의 windows 머신에게 일괄로 명령 전달
# ensh_win -n 192.168.201.61 hostname
### executing in 192.168.201.61
192.168.201.61 WIN7X64-01
# ensh_win -n 192.168.201.61 ipconfig /all
192.168.201.61
192.168.201.61 Windows IP 구성
192.168.201.61
192.168.201.61 호스트 이름 . . . . . . . . : WIN7X64-01
192.168.201.61 주 DNS 접미사 . . . . . . . :
192.168.201.61 노드 유형 . . . . . . . . . : 혼성
192.168.201.61 IP 라우팅 사용. . . . . . . : 아니요
192.168.201.61 WINS 프록시 사용. . . . . . : 아니요
192.168.201.61
192.168.201.61 이더넷 어댑터 로컬 영역 연결 2:
192.168.201.61
192.168.201.61 연결별 DNS 접미사. . . . :
192.168.201.61 설명. . . . . . . . . . . . : Citrix PV Network Adapter #0
192.168.201.61 물리적 주소 . . . . . . . . : 66-91-23-71-AB-2D
192.168.201.61 DHCP 사용 . . . . . . . . . : 아니요
192.168.201.61 자동 구성 사용. . . . . . . : 예
192.168.201.61 링크-로컬 IPv6 주소 . . . . : fe80::6dcb:7593:99a:fc84%12(기본 설정)
192.168.201.61 IPv4 주소 . . . . . . . . . : 192.168.201.61(기본 설정)
192.168.201.61 서브넷 마스크 . . . . . . . : 255.255.255.0
192.168.201.61 기본 게이트웨이 . . . . . . : 192.168.201.254
192.168.201.61 DHCPv6 IAID . . . . . . . . : 240529042
192.168.201.61 DHCPv6 클라이언트 DUID. . . : 00-01-00-01-1A-4D-AE-1A-66-91-23-71-AB-2D
192.168.201.61 DNS 서버. . . . . . . . . . : 192.168.123.86
192.168.201.61 Tcpip를 통한 NetBIOS. . . . : 사용
192.168.201.61
.
# ensh_win -n 192.168.201.61 cmd /c dir c:\\
## executing in 192.168.201.61
192.168.201.61 C 드라이브의 볼륨에는 이름이 없습니다.
192.168.201.61 볼륨 일련 번호: A40F-70AB
192.168.201.61
192.168.201.61 c:\ 디렉터리
192.168.201.61
192.168.201.61 2013-12-26 오후 06:47 <DIR> CAESAMPLE
192.168.201.61 2013-12-26 오후 12:40 <DIR> MSE_X64
192.168.201.61 2013-12-26 오후 05:55 <DIR> NVIDIA
192.168.201.61 2009-07-14 오후 12:20 <DIR> PerfLogs
192.168.201.61 2014-01-04 오후 02:52 <DIR> Program Files
192.168.201.61 2013-12-26 오후 05:37 <DIR> Program Files (x86)
192.168.201.61 2013-12-20 오후 11:11 <DIR> SIMULIA
192.168.201.61 2013-12-20 오후 02:28 <DIR> SPEC
192.168.201.61 2013-12-11 오후 04:43 6,047,664 TeamViewer_Setup_ko.exe
192.168.201.61 2013-12-26 오후 05:56 <DIR> Temp
192.168.201.61 2013-12-26 오후 01:22 <DIR> TightVNC
192.168.201.61 2014-01-07 오후 07:07 <DIR> Users
192.168.201.61 2014-01-08 오후 03:26 <DIR> Windows
192.168.201.61 7개 파일 386,655,168 바이트
192.168.201.61 12개 디렉터리 116,686,106,624 바이트 남음
– 파일 복사 방법
# ensh_win -p -n 192.168.201.61 powershell cp -v -PassThru -r //192.168.201.60/pkg_data/install.log c:/
ensh_win -p -n 192.168.201.61 xcopy \\\\192.168.201.60\\pkg_data\\PKG_DIST\\test c:\\TEST /d /e /c /y /i
– 파일 삭제 방법
# ensh_win -n 192.168.201.61 powershell rm -r c://TEST
powershell 을 이용할 경우 디렉토리 경로를 // 로 표시할 수 있다.
# ensh_win -n 192.168.201.65 cmd /c rd /s /q c:\\test
# ensh_win cmd /c rd /s /q c:\\PKG_DIST
– ensync_win
: Linux 서버에서 여러대의 Windows 머신으로 파일이나 폴더를 일괄 복사하는 프로그램
파일 복사
ensync_win1 hosts c:/windows/system32/drivers/etc
# ensync_win1 -n 192.168.201.65 install.log c:/
ensh_win -p -n 192.168.201.65 xcopy \\\\192.168.201.60\\pkg_data\\install.log c:\\ /y 2>&1
\\192.168.201.60\pkg_data\install.log
1개 파일이 복사되었습니다.
ensync_win hosts c:/windows/system32/drivers/etc
# ensync_win -n 192.168.201.65 install.log c:/
powershell cp -PassThru -r //192.168.201.60/pkg_data/install.log c:/
### executing in 192.168.201.65
ndles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
——- —— —– —– —– —— — ———–
64 14 1340 4452 36 0.06 1700 GC2ADagent
디렉터리: C:\
Mode LastWriteTime Length Name
—- ————- —— —-
-a— 2014-01-07 오후 9:01 72456 install.log
디렉토리 복사
# ensync_win1 PKG_DIST c:/PKG_DIST
## executing in 192.168.201.65
ensh_win -p -n 192.168.201.65 xcopy \\\\192.168.201.60\\pkg_data\\PKG_DIST c:\\PKG_DIST /d /e /c /y /i 2>&1
\\192.168.201.60\pkg_data\PKG_DIST\gc2adagnet_start.bat
1개 파일이 복사되었습니다.
# ensync_win PKG_DIST c:/
4. ensh_win 을 이용한 일괄 윈도우 관리 응용
– 윈도우 서비스 점검 및 관리
GC27 -> SMGR 장애 시 ..
ensh_win -n <remote ip> sc query GCSessionMgr
ensh_win -n <remote ip> sc query MptnWin
ensh_win -n 192.168.201.61 sc start GCSessionMgr
ensh_win -n 192.168.201.61 sc stop MptnWin
ensh_win -n 192.168.201.61 sc start MptnWin
GC27 -> RGS 접속 안될 시 ..
ensh_win -n <node_ip> sc stop rgsender
ensh_win -n <node_ip> sc start rgsender
– 특정 윈도우 화면에 메세지 보내기
# ensh_win -p -n 192.168.201.65 msg console `cat /root/ensh_win/msg/logoff.txt`
– 특정 윈도우 세션 로그오프 시키기
# ensh_win -p -n 192.168.201.65 logoff console
– 특정 계정에 대해 administrators 그룹 포함 시키기
# ensh_win net localgroup administrators “admin” /add
# ensh_win net localgroup administrators \”LGDC4\\Domain Users\” /add
#
– 특정 세션의 접속 상태 확인 하기
# ensh_win -n 192.168.201.61 query session
### executing in 192.168.201.61
192.168.201.61 세션 이름 사용자 이름 ID 상태 종류 장치
192.168.201.61 >services 0 디스크
192.168.201.61 console Administrator 1 활성
192.168.201.61 rdp-tcp 65536 수신 대기
– 특정 세션의 프로세스 모니터링 하기
# ensh_win -p -n 192.168.201.61 powershell ps
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
——- —— —– —– —– —— — ———–
54 7 1108 4704 60 0.02 3716 acrotray
88 10 1232 4224 30 0.05 1624 CATSysDemon
31 5 1388 3436 29 0.00 888 conhost
32 5 1392 3440 29 0.02 1076 conhost
39 6 1528 4060 31 0.02 1188 conhost
40 6 1532 4060 31 0.02 1804 conhost
31 5 1388 3420 29 0.00 3852 conhost
765 16 3228 9184 175 6.60 532 csrss
279 14 22100 22096 226 0.56 2988 csrss
74 7 1784 5640 55 0.08 3372 dwm
683 47 22680 36820 244 1.34 604 explorer
64 14 1340 4452 36 0.06 1700 GC2ADagent
145 17 4252 7524 70 0.11 4056 GCSessionMgr
0 0 0 24 0 0 Idle
959 24 5136 12908 45 24.62 724 lsass
# ensh_win -p -n 192.168.201.61 powershell ps GC2ADAgent
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
——- —— —– —– —– —— — ———–
64 14 1340 4452 36 0.06 1700 GC2ADagent
아래는 RNTier 서비스에 필요한 주요 프로세스를 일괄 모니터링 하는 방법이다.
# ensh_win -p -n 192.168.201.61 powershell ps GC2ADagent, GCSessionMgr, MptnWin, \
rgsender, rgsendersvc, SWDistAgent
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
——- —— —– —– —– —— — ———–
64 14 1340 4452 36 0.06 1700 GC2ADagent
145 17 4252 7524 70 0.11 4056 GCSessionMgr
237 18 6884 12076 85 4,086.87 1612 MptnWin
343 26 7404 16888 115 0.25 3208 rgsender
105 9 1528 5188 34 0.20 1548 rgsendersvc
67 10 1364 4448 52 0.02 1924 SWDistAgent
– 특정 프로세스 죽이기
# ensh_win -p -n 192.168.201.61 taskkill /F /IM viewperf-gui*
성공: 프로세스 “viewperf-gui.exe”(PID 3772)이(가) 종료되었습니다.
– typeperf 명령을 이용한 성능 모니터링 하기
일단 typeperf 에 대한 윈도우 명령 확인
c:> typeperf “\processor(*)\% processor time”
“(PDH-CSV 4.0)”,”\\WIN7X64-01\processor(0)\% processor time”,”\\WIN7X64-01\processor(1)\% processor time”,”\\WIN7X64-01\processor(2)\% processor time”,”\\WIN7X64-01\processor(3)\% processor time”,”\\WIN7X64-01\processor(_Total)\% processor time”
“01/09/2014 14:34:00.935″,”0.259101″,”8.051359″,”0.259101″,”1.817552″,”2.596783”
“01/09/2014 14:34:01.935″,”0.000000″,”4.839390″,”0.000000″,”0.159360″,”0.549360”
“01/09/2014 14:34:02.935″,”0.159360″,”7.959410″,”0.159360″,”0.159360″,”2.109370”
.
.
1초 단위로 core 별 CPU 이용률이 표시됨
일반적으로 사용 하는 옵션 입니다.
-si : 모니터링 간격 조정 옵션 -si 3 : 3초 간격
-o : 결과를 csv 파일로 저장 옵션 -o <cvs file name>
-sc : 모니터링 회수 지정 업손 -sc 10 : 10회만 모니터링
-f : 결과파일 형식 {csv|tsv|bin}
c:> typeperf -si 3 -sc 10 -o c:\procmon.cvs “\processor(*)\% processor time”
CPU 성능 카운트 종류 확인
c:> typeperf -qx \processor (참고 : 전체 성능 카운터 > typeperf -qx
전체 Total CPU 이용률 확인
c:> typeperf “\processor(_total)\% processor time”
ensh_win 을 통해 명령을 수행하는 구문에 대해 알아보자.
특수문자 인식을 위해 \ Key 가
# ensh_win -p -n 192.168.201.61 typeperf -sc 3 -o c:\\proc.cvs \”\\processor\(*\)\\\% processor time\”
# ensh_win -p -n 192.168.201.61 typeperf -sc 3 \”\\processor\(_total\)\\\% processor time\”
# ensh_win -p -n 192.168.201.61 typeperf -sc 3 \”\\memory\\Available MBytes\”
# ensh_win -p -n 192.168.201.61 typeperf -qx \\processor
# ensh_win -p -n 192.168.201.61 typeperf -qx \\memory
– 윈도우 작업(프로세스) 목록 및 세션, 메모리 사용량 확인
# ensh_win -p -n 192.168.201.61 tasklist
이미지 이름 PID 세션 이름 세션# 메모리 사용
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 24 K
System 4 Services 0 368 K
smss.exe 396 Services 0 1,216 K
csrss.exe 532 Services 0 9,204 K
wininit.exe 596 Services 0 5,204 K
services.exe 708 Services 0 9,016 K
lsass.exe 724 Services 0 12,932 K
lsm.exe 732 Services 0 6,964 K
.
taskhost.exe 2520 Console 1 11,320 K
dwm.exe 3372 Console 1 5,640 K
explorer.exe 604 Console 1 57,776 K
tvnserver.exe 3172 Console 1 4,652 K
acrotray.exe 3716 Console 1 4,712 K
rgsender_gui.exe 4424 Console 1 16,044 K
wmpnetwk.exe 4680 Services 0 7,920 K
cmd.exe 4032 Console 1 3,360 K
특정프로세스의 메모리 사용량 확인
# ensh_win -n 192.168.201.61 tasklist | grep power
192.168.201.61 powershell.exe 2284 Services 0 49,992 K
192.168.201.61 powershell.exe 456 Services 0 55,932 K
192.168.201.61 powershell.exe 1892 Services 0 51,104 K
192.168.201.61 powershell.exe 2772 Services 0 50,984 K
RNTier 관련 프로세스 모니터링 방법
# ensh_win -n 192.168.201.61 tasklist | egrep ‘GC2ADagent|GCSessionMgr|MptnWin|rgsend|SWDistAgent’
192.168.201.61 GC2ADagent.exe 1700 Services 0 4,452 K
192.168.201.61 SWDistAgent.exe 1924 Services 0 4,448 K
192.168.201.61 rgsendersvc.exe 1548 Services 0 5,188 K
192.168.201.61 GCSessionMgr.exe 4056 Services 0 7,524 K
192.168.201.61 MptnWin.exe 1612 Services 0 12,036 K
192.168.201.61 rgsender.exe 3208 Console 1 16,888 K
192.168.201.61 rgsender_gui.exe 4424 Console 1 16,044 K
# ensh_win tasklist | egrep ‘executing|GC2ADagent|GCSessionMgr|MptnWin|rgsend|SWDistAgent’
## executing in 192.168.201.61
192.168.201.61 GC2ADagent.exe 1700 Services 0 4,452 K
192.168.201.61 SWDistAgent.exe 1924 Services 0 4,448 K
192.168.201.61 rgsendersvc.exe 1548 Services 0 5,188 K
192.168.201.61 GCSessionMgr.exe 4056 Services 0 7,524 K
192.168.201.61 MptnWin.exe 1612 Services 0 12,068 K
192.168.201.61 rgsender.exe 3208 Console 1 16,888 K
192.168.201.61 rgsender_gui.exe 4424 Console 1 16,044 K
## executing in 192.168.201.62
192.168.201.62 GC2ADagent.exe 1880 Services 0 4,124 K
192.168.201.62 GCSessionMgr.exe 1904 Services 0 7,520 K
192.168.201.62 MptnWin.exe 1940 Services 0 12,788 K
192.168.201.62 SWDistAgent.exe 1452 Services 0 4,448 K
192.168.201.62 rgsendersvc.exe 2084 Services 0 5,044 K
192.168.201.62 rgsender.exe 2280 Console 1 16,844 K
## executing in 192.168.201.63
192.168.201.63 GC2ADagent.exe 1840 Services 0 4,360 K
192.168.201.63 GCSessionMgr.exe 1860 Services 0 7,652 K
192.168.201.63 MptnWin.exe 1916 Services 0 12,192 K
192.168.201.63 SWDistAgent.exe 1156 Services 0 4,452 K
192.168.201.63 rgsendersvc.exe 2088 Services 0 5,136 K
192.168.201.63 rgsender.exe 1452 Console 2 16,804 K
.
.
간혹 xcopy 로 cifs 드라이브로 파일을 copy 한 경우 실제 Linux 상에는 존재하지만 windows explore
에서 안보이는 경우 발생
attrib.exe -h -s -a Z:\[directory] or [file]