원격 데스크톱으로 서버에 연결할 때 저는 보통 귀찮아서 위 그림처럼 자격 증명을 저장해 둡니다. 매번 패스워드를 입력하는 것은 매우 번거로운 일이니까요. 그런데 만약 이렇게 원격으로 접속해야 할 서버 대수가 엄청 많고, 패스워드가 자주 바뀐다면 어떻게 하시겠습니까? 패스워드가 바뀔 때 마다 일일이 또 패스워드를 입력하시겠습니까?

윈도우 비스타 이상에서는 cmdkey라는 명령어를 통해 원격 데스크톱 자격 증명을 저장하거나 삭제할 수 있습니다. 이 명령어와 FOR문을 적절히 조합하면 수백대의 서버 패스워드가 변경되더라도 한꺼번에 자격 증명을 생성할 수 있습니다.

일단 사용법은 아래와 같은 형식입니다.

cmdkey /add:대상 이름 /user:사용자 이름 /pass:암호

예제)
cmdkey /add:192.168.0.3 /user:snoopy /pass:password



그런데 원격 데스크톱으로 저장한 자격 증명을 보니 이렇게 되어 있더군요.

예제)
cmdkey /add:TERMSRV/192.168.0.3 /user:snoopy /pass:password



다른 자격 증명과 구분하기 위해 TERMSRV/ 부분이 붙는 것 같은데 별로 중요하지는 않아 보입니다. 첫번째 방법처럼 바로 IP를 입력해도 되고, 두번째 방법처럼 TERMSRV/ 를 붙여줘도 상관은 없습니다.


그렇다면 이제 FOR문과 조합을 해보겠습니다. 엑셀에 서버 IP, 계정, 패스워드가 있다고 치고 이걸 텍스트 파일로 저장하면 가령 이렇게 되겠죠.


예제) serverlist.txt

192.168.0.10 administrator ucszgr#7~9
192.168.0.11 administrator jpgfym#0-3
192.168.0.12 administrator zsfwvy#8-6
192.168.0.13 snoopy jspwfg+0+4
192.168.0.14 snoopy hhembi%3*7
192.168.0.15 snoopy inrvzb*0#7
192.168.0.16 testuser hystpp-7@2
192.168.0.17 testuser zvcczr@3%5
192.168.0.18 testuser xpegwb@3-9


이 파일을 한줄씩 읽어들이며 자격 증명을 저장하면 되겠습니다.

예제)
for /f "tokens=1-3" %a in (serverlist.txt) do cmdkey /add:%a /user:%b /pass:%c



위 커맨드에서 %a, %b, %c는 각각 서버 IP, 계정, 패스워드를 받아줍니다. 그런데 배치파일 (*.cmd) 안에서는 FOR문을 돌릴 때 %a 대신 %%a를 사용합니다. 위 예제를 가지고 자격 증명 자장과 동시에 원격 데스크톱 연결을 시도해볼까요?

예제) rdpsave.cmd

@echo off
for /f "tokens=1-3" %%a in (serverlist.txt) do (
        cmdkey /add:%%a /user:%%b /pass:%%c
        mstsc /v:%%a
)
exit



여기서 한걸음 더 나아가면... 사실 저는 엑셀 매크로를 생각해봤습니다. 엑셀 자료에 매크로를 적당히 걸어두고 IP만 클릭하면 자동으로 원격 데스크톱이 연결되는 그런 시나리오... 가능할 것 같기는 한데 엑셀 매크로에 대해 전혀 몰라서 아직 시도해보지는 않았습니다. 나중에 여유 되면 연구해 보겠습니다.