[ansible] 윈도우 접속에서 창으로 떠서 돌아가야 하는 앱에 대한 고찰 Computer Tip

지난번에 윈도우10에 ansible 대상 장치로 붙여 관리하는 것을 살펴보았습니다.

좀 더 작업을 하다보니, 이상한 현상이 발생하더군요.
관리 대상 윈도우 10 에 화면을 띄워서 작업하는 프로그램을 돌리는데 문제가 발생합니다.

예를 들어 "notepad"를 일반 데스크탑에서 실행하고 그 프로세스를 작업관리자인 task manager 에서 확인해보겠습니다.

그러면 위의 그림과 같이 "Apps" 아래에 프로세스가 보이며, 화면에 나타나는데요,

 다음의 ansible 의 태스크로 실행을 해 보겠습니다.

  tasks:
    - name: first ping
      win_ping:
    - name: pkg install
      win_shell: notepad.exe
      args:
        executable: cmd

그러면,

위와 같이 "Apps" 가 아닌, "Background Processes" 에 들어가 있으면서, 화면에는 나타나지 않는 것을 
확인할 수 있습니다.

왜 이렇지? 하면서 결국은 하루를 꼬박 구글을 뒤지고 뭐하고 해서 결국 원인과 해결책을 찾아냈습니다.

  tasks:
    - name: first ping
      win_ping:
    - name: pkg install
      win_shell: C:\Users\toor\Work\vm-dev-ops-pkg\PSTools\PsExec.exe -h -s -i 1 -d -accepteula C:\Windows\notepad.exe
      args:
        executable: cmd

결국 바로 notepad을 실행시키는 대신 PsEXEC.exe 라는 것을 이용하면 됩니다.

PsExec 는 

(다음 링크에서 다운 받을 수 있습니다)
위의 설명처럼 원격에서 돌리기 위에 만들어진 툴인데 로컬에서 돌리면서 필요한 옵션을 준 것입니다.

하나 하나 살펴보겠습니다.

PsExec.exe -h -s -i 1 -d -accepteula C:\Windows\notepad.exe

-s 는 시스템 계정으로 돌릴 필요가 있으면 설정합니다.
-h 는 필요시 어드민 권한으로 상승시킨다는 의미입니다. 위의 -s 와 같이 따라 다닙니다.
-accepteula 는 PsExec.exe 를 실행하면 사용자 라이센스 승인 창이 뜨는데 이를 그냥 알아서 허용한다는 것입니다.
-i 1  이부분이 가장 힘든 부분이었는데, 해당 데스크탑이 잘 돌고 있으면 이 1은 첫번째 데스크탑에서 프로그램을 실행하라는 것입니다.
  즉, 이부분이 있어야 해당 창으로 돌아가게 됩니다. 어것이 아니면 그냥 콘솔 프로그램이라 가정하고 아무리 실행시켜도
  백그라운드 앱으로 돌리게 됩니다.
-d 는 실행하고 바로 빠지라는 것입니다. 즉, blocking 으로 끝날 때 까지 기다리지 않고 바로 나온다는 의미입니다.
  (그런데 테스트 해 보니 -d 옵션을 주니 0이 아닌 값을 return 하여 ansible 에서는 오류로 인식하는 경우가 있군요.
   batch 스크립트로 하나 더 깜싸줘야 할 듯 합니다)

ansible 에서는 위에서처럼 win_shell 로 psexec를 직접 돌려도 되고,

    - name: pkg install
      win_psexec:
        command: C:\Windows\notepad.exe
        system: True
        elevated: True
        session: 1
        executable: C:\Users\toor\Work\vm-dev-ops-pkg\PSTools\PsExec.exe
        wait: True

위에서 처럼 win_psexec 모듈을 이용해도 됩니다.

그런데, session이 2.7 버전부터 지원 된다고 하는데,
잘 적용이 안되어 win_shell 로 돌아갔습니다.

잘 생각해보면, 리눅스도 결국 XWindow 프로토콜로 해당 DISPLAY를 지정하고,
실행하면 그 디스플레이에 창이 뜨는 것과 같은 이치더군요.

도저히 어떻게 해결해야 할 지 막혔을 때,
다행이 이렇게 풀리면 고생한 시간에 비례하여 희열을 느끼게 됩니다.


어느 분께는 도움이 되셨기를 ..

핑백

덧글

댓글 입력 영역

구글애드텍스트