여러 개의 Machine에서 개발하다 보면 원격으로 접속해서 제어할 경우가 많다. Linux의 경우에는 대부분 Terminal로 접속해서 작업을 해서 상관이 없기는 하지만 때로는 GUI 환경을 이용해서 작업하는 경우가 있어 이번 post에서 해당 내용을 정리하려고 한다. 단순히 구글링만 하면 자료가 쏟아지는 내용이기는 하지만, 여기저기 찾기 귀찮을 때를 대비해 내 Blog에 내용을 정리한다.
Step 1. tigerVNC 설치
VNC(Virtual Network Computing)는 GUI환경으로 원격 접속을 관리하는 Service이고, RedHat 계열에서는 tigerVNC를 많이 사용한다.
... [brown@ha-test-1 /]# sudo yum -y install tigervnc-server ... ======================================================================================================= Package Arch Version Repository Size ======================================================================================================= Installing: tigervnc-server x86_64 1.8.0-13.el7 ol7_latest 214 k Transaction Summary ======================================================================================================= Install 1 Package Total download size: 214 k Installed size: 509 k Downloading packages: tigervnc-server-1.8.0-13.el7.x86_64.rpm | 214 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : tigervnc-server-1.8.0-13.el7.x86_64 1/1 Verifying : tigervnc-server-1.8.0-13.el7.x86_64 1/1 Installed: tigervnc-server.x86_64 0:1.8.0-13.el7 Complete! ...
Step 2. xrdp 설치 및 설정
... [brown@ha-test-1 /]$ sudo yum -y install xrdp ... ======================================================================================================= Package Arch Version Repository Size ======================================================================================================= Installing: xrdp x86_64 1:0.9.8-2.el7 epel 417 k Installing for dependencies: ... Transaction Summary ======================================================================================================= Install 1 Package (+ 2 Dependent packages) ... Installed: xrdp.x86_64 1:0.9.8-2.el7 Dependency Installed: ... Dependency Updated: ... Complete!
xrdp 설정 파일은 /etc/xrdp/xrdp.ini 이고, 이 파일을 수정한 후에 xrdp를 restart 시키면 수정된 설정이 반영된다. 이 Posting에서는 Default 값을 사용하기 때문에 별다른 변경은 안한다.
Step 3. xrdp Service 시작
아직 xrdp service가 가동하기 전이기 때문에 가동만 시키면 위의 설정이 자동으로 반영되게 된다. 만약 이미 가동한 후라면 'systemctl restart'를 이용해서 재가동 하면 설정 변경 사항이 반영되게 된다.
... // xrdp 시작 전 상태 [brown@ha-test-1 ~]$ sudo systemctl status xrdp ● xrdp.service - xrdp daemon Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; vendor preset: disabled) Active: inactive (dead) Docs: man:xrdp(8) man:xrdp.ini(5) ... // xrdp service 시작 [brown@ha-test-1 ~]$ sudo systemctl start xrdp ... // xrdp service 시작 후 상태 ; Port 3389 Listening 중 [brown@ha-test-1 ~]$ sudo systemctl status xrdp ● xrdp.service - xrdp daemon Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; vendor preset: disabled) Active: active (running) since 수 2018-12-26 21:23:56 KST; 2s ago Docs: man:xrdp(8) man:xrdp.ini(5) Main PID: 24349 (xrdp) CGroup: /system.slice/xrdp.service └─24349 /usr/sbin/xrdp --nodaemon 12월 26 21:23:56 ha-test-1 systemd[1]: Started xrdp daemon. 12월 26 21:23:56 ha-test-1 systemd[1]: Starting xrdp daemon... 12월 26 21:23:56 ha-test-1 xrdp[24349]: (24349)(139897272498624)[INFO ] starting xrdp with pid 24349 12월 26 21:23:56 ha-test-1 xrdp[24349]: (24349)(139897272498624)[INFO ] listening to port 3389 ....0.0 Hint: Some lines were ellipsized, use -l to show in full. ...
Step 4. 방화벽 설정
아직 원격 접속을 위한 3389 Port가 Firewall에 의해 박혀 있기 때문에 외부에서 접근은 불가한 상태이다. 3389 Port 에 대해 방화벽 해제 조치가 필요하다.
... // 현재 방화벽 상태 확인 [brown@ha-test-1 ~]$ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eno1 sources: services: ssh dhcpv6-client ports: 80/tcp 443/tcp 5432/tcp 21/tcp 5433/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: ... // 3389 포트에 대해 방화벽 해제 및 시스템 반영 [brown@ha-test-1 ~]$ sudo firewall-cmd --permanent --zone=public --add-port=3389/tcp [brown@ha-test-1 ~]$ sudo firewall-cmd --reload success ... // 3389 포트가 추가된 방화벽 상태 확인 [brown@ha-test-1 ~]$ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eno1 sources: services: ssh dhcpv6-client ports: 80/tcp 443/tcp 5432/tcp 21/tcp 5433/tcp 3389/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: ...
Test
위의 화면을 확인 후 다음으로 넘어가면 아래 인증 화면이 나오고 계정 정보를 입력하면 Linux GUI 화면이 나오면서 원격 접속이 시작된다.
Debug 공유
원래는 간단하게 완료되는 내용인데... 2 대의 기기 중에 하나는 잘 접속이 되는데 하나는 계속 원격 접속이 안되었다. 에러 내용은 '함수에 제공된 토큰이 올바르지 않다'는 내용이었는데 이 내용을 바탕으로는 나에게 맞는 해결 방법이 찾아지지 않았다. 그래서 xrdp Log를 확인하니 아래 내용이 눈에 띄었다.
... [brown@ha-test-1 /]# sudo tail -f /var/log/xrdp.log ... [20181226-22:37:59] [INFO ] Socket 12: AF_INET connection received from 16.8.35.36 port 49318 [20181226-22:37:59] [DEBUG] Closed socket 12 (AF_INET 16.8.35.227:3389) [20181226-22:37:59] [DEBUG] Closed socket 11 (AF_INET 0.0.0.0:3389) [20181226-22:37:59] [INFO ] Using default X.509 certificate: /etc/xrdp/cert.pem [20181226-22:37:59] [INFO ] Using default X.509 key file: /etc/xrdp/key.pem [20181226-22:37:59] [WARN ] TLSv1.3 enabled by config, but not supported by system OpenSSL [20181226-22:37:59] [DEBUG] TLSv1.2 enabled [20181226-22:37:59] [DEBUG] Security layer: requested 3, selected 1 [20181226-22:37:59] [DEBUG] Closed socket 12 (AF_INET 16.8.35.227:3389) ... [20181226-23:01:36] [INFO ] Socket 12: AF_INET connection received from 16.8.35.35 port 6540 [20181226-23:01:36] [DEBUG] Closed socket 12 (AF_INET 16.8.35.227:3389) [20181226-23:01:36] [DEBUG] Closed socket 11 (AF_INET 0.0.0.0:3389) [20181226-23:01:36] [INFO ] Using default X.509 certificate: /etc/xrdp/cert.pem [20181226-23:01:36] [INFO ] Using default X.509 key file: /etc/xrdp/key.pem [20181226-23:01:36] [WARN ] TLSv1.3 enabled by config, but not supported by system OpenSSL [20181226-23:01:36] [DEBUG] TLSv1.2 enabled [20181226-23:01:36] [DEBUG] Security layer: requested 11, selected 1 [20181226-23:01:36] [DEBUG] Closed socket 12 (AF_INET 16.8.35.227:3389) ...
22:37에 접속한 Log는 원격 접속이 잘 안될 때의 Log이고 23:01에 접속한 Log는 원격 접속이 잘될 때의 Log이다. 다른 부분은 모두 동일 한데 Security Layer에서 requested 3이냐 11이냐만 다르게 확인되었다. 이 내용을 바탕으로 검색해본 결과 OpenSSL Bug이고 일단 /etc/xrdp/ 에 위치한 pem 파일들을 지우면 해결된다고 해서 그렇게 했더니 정상적으로 접속이 되었다.
... [brown@ha-test-1 /]# rm /etc/xrdp/*.pem ...