만약 당신이 관리하는 윈도우 서버가 1,000대 있고, 일주일에 한번씩 패스워드를 변경하라는 지시를 받았다면 어떻게 하시겠습니까? 게다가 그 패스워드는 일반적으로 사람이 기억할 수 있는 수준의 패스워드가 아니라 아래 문자열처럼 랜덤하게 생겼다면 말이죠.

=()z@jF;TX
Nt+szrfZ+T
:kK=i#K5p/
(5Yr@XArs(
Y=ySzbau%_

일일이 1,000대 서버에 원격 데스크톱으로 접속한 다음, 저 어려운 패스워드를 키보드로 하나하나 입력해 로그인을 하고, 다시 어려운 패스워드를 일일이 타이핑해서 새로운 패스워드로 변경을 하시겠습니까?

아마 위 작업을 저렇게 수동으로 한다면 일주일 내내 해도 1,000대 처리하기 힘들 것입니다.

원격 데스크톱으로 직접 들어가지 않고, 원격으로 패스워드를 변경하는 방법이 있을까요?

네 있습니다. 바로 파워쉘을 이용하는 방법인데요, 사실 저는 파워쉘을 전혀 모릅니다. 그래서 지금은 코드를 직접 작성할 수 없습니다. 하지만 나중에 파워쉘과 윈도우 API를 공부하게 되면 이런 작업들을 직접 코딩해보고 싶습니다.

그런데 Sysinternals라고 MS 관련 재미있는 툴을 많이 만들어준 Mark Russinovich 아저씨가 있는데요, 이 아저씨가 PsPasswd라는 툴을 오래전에 만들어 두었더군요. 이 툴을 이용하면 원격서버의 패스워드를 손쉽게 변경할 수 있습니다.

http://technet.microsoft.com/en-us/sysinternals/bb897543

사용법은 아래와 같습니다.

pspasswd \\서버IP -u 로그인계정 -p 패스워드 바꿀계정 바꿀패스워드

제가 예제로 VMware에 설치한 윈도우 7의 Administrator 패스워드를 변경해보겠습니다.


위 그림을 보면 일단 VMware 내의 윈도우 7 IP가 192.168.1.128임을 확인시켜 주고, Administrator 계정의 패스워드를 =()z@jF;TX 로 변경했음을 보여준 것입니다.

이상태로 제 컴퓨터에서 pspasswd 툴을 이용하여 기존 패스워드인 =()z@jF;TX 를 새로운 패스워드 Nt+szrfZ+T 로 변경해 보았습니다. 보시다시피 successfully changed 라고 나오죠? Administrator 계정의 패스워드 변경이 잘 된 것입니다.


그렇다면 이 툴을 이용해서 1,000대 서버의 패스워드를 변경하려면 어떻게 하면 좋을까요? 바로 제가 좋아하는 배치파일의 FOR 반복문을 이용하시면 되겠습니다. 일단 서버 IP와 기존 패스워드는 엑셀에 정리되어 있다고 가정하겠습니다. 적당히 IP랑 기존 패스워드 그리고 신규 패스워드 정도만 있으면 되겠네요. 그걸 텍스트파일에 긁어서 저장해두면 가령

예제)
192.168.1.128 bzP%6GZ@hz mK4iNL[L1i
192.168.1.129 TJP:kRTEW- F/gPAG3qdA
192.168.1.130 m}3sm{@/*M 8_/pFEHB?J
192.168.1.131 ?e-C@{VB/U rN9K)4yDX=
192.168.1.132 }SN9r[c2B_ ;+PXxV/d4cx
192.168.1.133 C{{Tk9pD_U 2t*%t9ye]q
192.168.1.134 (XBRggDx[m }(j6__)8B;
192.168.1.135 Nhv(]h#[hE ~YwqctSt})
192.168.1.136 LbQZ;+Asnq H6%AQ?pMf~
192.168.1.137 Aj4mci-pX9 w*JzaasTHB


위 내용을 list.txt 파일에 저장했다고 칩시다. 중간에 있는게 기존 패스워드이고 오른쪽에 있는게 새로 바꿀 패스워드라 치면 FOR 문을 아래와 같이 돌리면 되겠습니다.

@echo off
if exist errorlist.txt del /q errorlist.txt
for /f "tokens=1-3" %%a in (list.txt) do (
        pspasswd \\%%a -u Administrator -p %%b Administrator %%c | findstr /c:"successfully changed"
        if errorlevel 1 echo %%a >> errorlist.txt
)

패스워드 변경에 실패하는 경우는 따로 errorlist.txt 파일에 IP를 저장하도록 했습니다.

그런데 랜덤패스워드는 스크립트로 돌리기에 애매한 부분이 있습니다. 예를 들어 > 기호같은게 들어가면 리디렉션으로 인식하기 때문에 오류가 발생합니다. 윈도우 커맨드라인에서 말썽을 부리는 특수문자 몇개는 빼는게 좋겠죠?

너무 자세한 내용을 주저리 주저리 설명할 필요는 없을 것 같구요, 아무튼 PsPasswd 툴을 이용하면 원격으로 다른 컴퓨터의 패스워드를 변경할 수 있다는 점만 알아두시면 되겠습니다. 활용은 각자 알아서 하는거죠.

※ 참고
PsPasswd 툴은 445 포트를 이용해서 패스워드 변경을 시도합니다. 따라서 원격지 서버의 445 포트가 오픈되어 있어야 합니다. 방화벽에서 파일 및 프린터 공유를 허용하거나, 445 포트만 수동으로 열어주시면 됩니다.

또한 시스템 기본 공유인 IPC$ 가 활성화 되어 있어야 합니다.