예전에 윈도우 패스워드를 원격으로 변경하는 툴 PsPasswd를 소개해드린 적이 있는데

2011/06/04 - [윈도우 일반] - 원격 서버 패스워드 한꺼번에 변경하기

오늘은 원격으로 명령어를 날릴 수 있는 PsExec를 소개해 드리겠습니다. 이름이 비슷한데 Sysinternals의 PsTools에 포함된 툴입니다.

PsTools
http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx

일단 PsExec는 따로 올려두겠습니다.



PsExec를 사용하여 원격으로 커맨드를 실행하기 위한 전제 조건은 다음과 같습니다.

1. 원격 컴퓨터에 시스템 기본 공유인 IPC$, ADMIN$ 둘다 있어야 한다.
2. 내장 Administrator 계정이 아닌 Administrators 그룹의 계정을 사용하려면 원격 컴퓨터에 UAC가 꺼져 있어야 한다.
3. TCP 445 포트를 사용하므로 원격 컴퓨터에 윈도우 방화벽 TCP 445 포트가 오픈되어 있어야 한다.


1번의 경우 특별한 케이스가 아니라면 대부분 만족할 것입니다. 보안상 일부러 없애는 경우가 아니라면 말이죠.



2번의 경우 UAC는 윈도우 비스타, 서버 2008 이상에서 등장하는 개념인데, 사용자 계정 컨트롤을 UAC로 줄여서 부릅니다. Administrator 계정으로 하신다면 신경쓰지 않아도 됩니다만, Administrators 그룹의 계정으로 하신다면 UAC가 반드시 꺼져 있어야 합니다.

※ UAC 확실히 끄는 방법
아래 명령어를 관리자 권한으로 실행 후 리부팅
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v EnableLUA /t REG_DWORD /d 0 /f


3번의 경우 TCP 445 포트를 예외 처리하기 위해서는 2가지 방법이 있는데, 파일 및 프린터 공유를 예외 체크해 주시거나, 직접 TCP 445 포트를 수동으로 오픈해 주시면 됩니다.

※ TCP 445 포트 방화벽 오픈 명령어
윈도우 비스타, 2008 이상 - 아래 명령어를 관리자 권한으로 실행 (빨간색 규칙 이름은 자유)
netsh advfirewall firewall add rule name="TCP-445" dir=in action=allow protocol=tcp localport=445
윈도우 XP, 2003 (윈도우 2003은 기본적으로 방화벽이 꺼져 있음, 빨간색 규칙 이름은 자유)
netsh firewall add portopening TCP 445 "TCP-445" enable all


이제 실전에 들어가 보겠습니다. 제 PC에서 VM으로 아래와 같이 날려봤습니다.

psexec \\서버주소 -u 계정 -p 패스워드 명령어

psexec \\192.168.0.4 -u snoopy -p 1234 cmd


위 화면은 원격 VM의 CMD 창이 뜬 것입니다. 마치 리눅스에서 텔넷이나 SSH로 접속한 것과 비슷한 상황이 된 것이죠. 여기서 hostname 명령어를 입력해 보면 제 PC가 아닌 VM임을 알 수 있습니다.


이 상태로 원하는 작업을 하셔도 되겠지만, 이렇게 직접 CMD 창을 가져오지 않고 특정 커맨드만 날리는 예제를 보여드리겠습니다.

psexec \\192.168.0.4 -u snoopy -p 1234 cmd /c dir c:\

psexec \\192.168.0.4 -u snoopy -p 1234 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

psexec \\192.168.0.4 -u snoopy -p 1234 netsh advfirewall firewall add rule name="TCP-3389" dir=in action=allow protocol=tcp localport=3389


파란색 부분이 실제 명령어 부분입니다. 즉 평소에 로컬에서 날리시던 명령어를 그대로 저렇게 날려주시면 됩니다. 단 dir, echo 처럼 별도의 프로그램이 아닌 CMD 쉘에서 사용되는 내장 명령어의 경우 저렇게 cmd /c 뒤에 붙여주시면 됩니다.

이상입니다.