만약 당신이 관리하는 윈도우 서버가 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$ 가 활성화 되어 있어야 합니다.
신고

  1. 아무개
    2011.06.04 19:58 신고

    VHD 관련해서 여쭤볼게 있습니다.

    Win7 32비트 boot.wim이 약 150MB가량 되는데, 일반 PE진입용으로 하나를 시스템SSD에 복사해둔 상태입니다.

    얘를들면 1.클린자식->자식 2. 부모->타드라이브 백업 3. 타드라이브->부모 복구
    이런식으로 메뉴를 3개 사용할때에는 각각 boot.wim 150MB가 하나씩 450MB가량 필요할텐데,

    VHD 복사교체 스크립트를 통한 복구/백업 자동실행 메뉴를 부트메뉴에 여러개 추가할때에는
    바꿔치기할 Setup.exe를 넣을 boot.wim가 통째로 패키징 되어있기 때문에 메뉴 하나당 한개씩 개별적으로 필요한건가요?

    각 메뉴에서 사용하는 boot.wim파일의 군더더기를 제거해서 크기를 줄인다던가
    여러 스크립트->EXE를 한개의 boot.wim진입후에 실행메뉴를 통해 선택할수 있게 한다던가 하는 방법은 없을까요?

  2. shin
    2011.06.04 22:24 신고

    안녕하세요. 정말 많은 도움을 받고 있습니다.

    저도 vhd에 질문드려봅니다.
    현재 64기가 ssd에 자식까지 둘 만들어서 아주 잘 쓰고 있습니다.
    문제는 64기가가 너무 좁아서 80기가 ssd를 들여놨는데요.
    힘들게 윈도7 깔고 하기가...
    그래서 기존에 부모, 자식까지 새 하드에 이식해서 이걸로 부팅하고 잘 쓰면 되겠다 싶어서 봤는데...
    영... 새 하드에 이식된 vhd만으로는 부팅이 되지 않더군요.

    xp에서 윈도7 vhd파일 부팅하기 대로 따라했지만 결국 실패했습니다.

    스누피님 적어넣으신 글에는...

    bcdboot H:\windows /l ko-kr # 방금 마운트한 VHD의 윈도우 7을 가지고 시스템 파티션에 부팅파일을 생성해주는 과정

    bootsect /nt60 sys /mbr # MBR 업데이트

    => 저한텐 둘 다 실행이 되지 않습니다.

    스샷에는 bcdboot H:\windows /s c:
    bootsect /nt60 c:
    를 하셨더라구요. 그래서 그것도 해봤는데 얘네들은 실행은 되는데 그 다음에 영락없이
    부팅장치를 못찾는 문제가 발생합니다.

    해결방법이 없을까요?

    • 해오름
      2011.06.05 00:55 신고
      수정 및 삭제

      과정 중에...

      exit 하고 나서

      cd H:\windows\system32 이렇게 명령어를 한번 입력하고 난 뒤

      bcdboot H:\windows /l ko-kr 하면 되더군요. 저 같은 경우에는요.

    • 이형탁
      2011.06.06 01:10 신고
      수정 및 삭제

      활성 파티션이 없는거 같습니다.
      예전에 되던 SSD를 같이 연결한 상태에서 저런 상황이 일어나는건 아니겠죠.
      새로산 SSD만 연결했다면 활성파티션을 만들고
      diskpart
      sel disk 0 (list disk 로 disk번호)
      sel par 1(list par 로 partition번호)
      active (활성파티션-디스크와 파티션을 sel명령어로 선택 후 )
      sel vdisk file ~~~~~~~~~~(VHD 마운트하시고 list vol로 볼륨명 기억)
      exit
      bcdboot X:\windows /l ko-kr
      후 리부팅

      mbr업데이트도 하면 좋고요 (bootsect /nt60 c:)

    • shin
      2011.06.06 10:47 신고
      수정 및 삭제

      오.. 감사합니다.
      활성파티션을... 당연히 안만들었었죠.
      알려주신대로 다시 시도해보겠습니다.

    • shin
      2011.06.10 22:01 신고
      수정 및 삭제

      이형탁님 감사합니다.

      깔끔하게 해결되어 무사히 새로운 하드로 vhd 모두 이식하고 잘 쓰고 있습니다.

      이제 앞으로 1~2년은 윈도우 엎고 새로까는 노가다에서 해방이군요. 덤으로 보안점검 나왔을 때는 미리 만들어둔 자식2.vhd로 간단히 해결...^^;

      그리고 부팅파일 생성은 제 경우에는

      bcdboot X:\windows /s c: /l ko-kr

      일 경우에 한글표시가 제대로 나옵니다.

  3. BlogIcon hongyang
    2011.06.05 00:45 신고

    카카오톡 사용하시네요 ㅎ

  4. 희시
    2011.06.07 08:27 신고

    캬 ~ 저도 파워쉘을 보고있는데 정말좋은 팁이네요~ 스누피님덕에 배치, 파워쉘 잘 배워갈 듯합니다.

    감사합니다.

  5. fulname12
    2011.06.07 15:29 신고

    sql 을 사용중에 있는데요 계속 서버에 과부하가 되고 있는데 저희가 프로시저를 많이 사용하고 있습니다.

    혹시 과부하때 사용됐썻던 프로시저를 확인할 수 있는 방법이 있을까요 ㅠㅠ?

  6. fighting
    2012.03.19 17:25 신고

    2008서버에도 적용되나요? 엑세스가 거부되었다는 메시지가 뜨네요...

  7. falconer
    2012.04.25 11:46 신고

    여러 서버에 bat 명령어를 전달 할수 있는 방법이 있을까요?