본문 바로가기

Linux

xrdp를 이용한 Linux(Red Hat 7) 원격 접속

반응형

여러 개의 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

다른 윈도우 Machine에서 접속이 잘되는 지 Test 해보았다. 윈도우 명령어 입력에 mstsc를 치고 Linux machine의 주소를 입력한다.


위의 화면을 확인 후 다음으로 넘어가면 아래 인증 화면이 나오고 계정 정보를 입력하면 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
...