웹사이트 검색

CentOS 7에서 그놈 데스크탑용 VNC 원격 액세스를 설치 및 구성하는 방법


소개

VNC 또는 Virtual Network Computing은 사용자가 원격 컴퓨터 시스템에 연결하고 그래픽 사용자 인터페이스(GUI)에서 리소스를 사용할 수 있도록 하는 플랫폼 독립적인 프로토콜입니다.

애플리케이션을 원격 제어하는 것과 같습니다. 클라이언트 컴퓨터의 키 입력이나 마우스 클릭이 네트워크를 통해 원격 컴퓨터로 전송됩니다. VNC는 또한 두 컴퓨터 간에 클립보드 공유를 허용합니다. Microsoft Windows 서버 배경에서 온 경우 VNC는 OS X, Linux 및 기타 운영 체제에서도 사용할 수 있다는 점을 제외하면 원격 데스크톱 서비스와 매우 유사합니다.

네트워킹 세계의 다른 모든 것과 마찬가지로 VNC는 클라이언트 서버 모델을 기반으로 합니다. VNC 서버는 들어오는 클라이언트 요청을 처리하는 원격 컴퓨터인 Droplet에서 실행됩니다.

목표

이 튜토리얼에서는 CentOS 7에 VNC 서버를 설치하고 구성하는 방법을 배웁니다. TigerVNC GitHub 리포지토리에서 무료로 사용할 수 있는 TigerVNC 서버를 설치합니다.

VNC 작동 방식을 시연하기 위해 CentOS 서버에 GNOME 데스크탑도 설치합니다. 두 개의 사용자 계정을 생성하고 VNC 액세스를 구성합니다. 그런 다음 원격 데스크톱에 대한 연결을 테스트하고 마지막으로 SSH 터널을 통해 원격 연결을 보호하는 방법을 배웁니다.

전제 조건

이 자습서에 표시된 명령, 패키지 및 파일은 CentOS 7의 최소 설치에서 테스트되었습니다. 다음을 권장합니다.

  • Distro: CentOS 7, 64비트
  • 리소스 요구 사항: 2GB RAM이 있는 드롭릿
  • 이 자습서를 따르려면 sudo 사용자를 사용해야 합니다. sudo 권한이 작동하는 방식을 이해하려면 이 DigitalOcean 튜토리얼을 참조하세요.

경고: 프로덕션 Linux 서버에서 이 자습서의 명령, 쿼리 또는 구성을 실행하면 안 됩니다. 이로 인해 보안 문제 및 다운타임이 발생할 수 있습니다.

1단계 - 두 개의 사용자 계정 만들기

먼저 두 개의 사용자 계정을 만듭니다. 이 계정은 VNC 클라이언트에서 CentOS 7 서버에 원격으로 연결됩니다.

  • joevnc
  • 제네브엔씨

joevnc에 대한 사용자 계정을 추가하려면 다음 명령을 실행하십시오.

sudo useradd -c "User Joe Configured for VNC Access" joevnc

그런 다음 passwd 명령을 실행하여 joevnc의 암호를 변경합니다.

sudo passwd joevnc

출력에서 새 암호를 묻습니다. 제공되면 계정은 로그인할 준비가 됩니다.

Changing password for user joevnc.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

다음으로 janevnc에 대한 계정을 만듭니다.

sudo useradd -c "User Jane Configured for VNC Access" janevnc

janevnc의 암호를 설정합니다.

sudo passwd janevnc

2단계 — 그놈 데스크탑 설치

이제 그놈 데스크탑을 설치하겠습니다. GNOME은 공동 작업입니다. 매우 인기 있는 데스크톱 환경을 구성하는 무료 오픈 소스 소프트웨어 모음입니다. KDE와 같은 다른 데스크탑 환경도 있지만 GNOME이 더 많이 사용됩니다. VNC 사용자는 GNOME을 사용하여 데스크톱에서 서버와 상호 작용합니다.

sudo yum groupinstall -y "GNOME Desktop"

네트워크 속도에 따라 몇 분 정도 걸릴 수 있습니다.

패키지 그룹이 설치되면 서버를 재부팅합니다.

sudo reboot

문제 해결 — 부팅 단계에서 서버가 멈춤

서버가 설정된 방식에 따라 시스템이 시작될 때 다음과 같은 메시지를 표시하는 부팅 단계에 남아 있을 수 있습니다.

Initial setup of CentOS Linux 7 (core)
1) [!] License information (Licence not accepted)
Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]:

이를 통과하려면 1(라이센스 읽기)을 누른 다음 2(라이센스 수락)를 누른 다음 C(계속하려면)를 누르십시오. C를 두 번 이상 눌러야 할 수도 있습니다. 아래 이미지는 이를 보여줍니다.

이 오류가 표시되지 않고 부팅 프로세스가 순조롭다면 다음 단계로 넘어갈 수 있습니다.

3단계 - TigerVNC 서버 설치

TigerVNC는 원격 데스크톱 연결을 가능하게 해주는 소프트웨어입니다.

Tiger VNC 서버를 설치하십시오:

sudo yum install -y tigervnc-server

다음과 같은 출력이 표시되어야 합니다.

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile

. . .

Running transaction
  Installing : tigervnc-server-1.2.80-0.30.20130314svn5065.el7.x86_64                                                      1/1
  Verifying  : tigervnc-server-1.2.80-0.30.20130314svn5065.el7.x86_64                                                      1/1

Installed:
  tigervnc-server.x86_64 0:1.2.80-0.30.20130314svn5065.el7

Complete!

이제 VNC 서버와 그놈 데스크탑이 설치되었습니다. 또한 VNC를 통해 연결하기 위한 두 개의 사용자 계정을 만들었습니다.

4단계 - 두 클라이언트에 대한 VNC 서비스 구성

VNC 서버는 처음 설치할 때 자동으로 시작되지 않습니다. 이를 확인하려면 다음 명령을 실행하십시오.

sudo systemctl status vncserver@:.service

출력은 다음과 같습니다.

vncserver@:.service - Remote desktop service (VNC)
   Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; disabled)
   Active: inactive (dead)

다음 명령을 실행할 수도 있습니다.

sudo systemctl is-enabled vncserver@.service

다음과 같은 출력이 표시되어야 합니다.

disabled

그렇다면 왜 비활성화되어 있습니까? 각 사용자가 별도의 VNC 서비스 데몬 인스턴스를 시작하기 때문입니다. 즉, VNC는 모든 사용자 요청을 처리하는 단일 프로세스로 실행되지 않습니다. VNC를 통해 연결하는 각 사용자는 데몬의 새 인스턴스를 시작해야 합니다(또는 시스템 관리자가 이를 자동화할 수 있음).

CentOS 7은 systemd 데몬을 사용하여 다른 서비스를 시작합니다. 기본적으로 systemd에서 실행되는 각 서비스에는 yum 설치 프로그램에 의해 /lib/systemd/system 디렉토리 아래에 있는 서비스 단위 파일이 있습니다. 부팅 시 자동으로 시작되는 프로세스에는 /etc/systemd/system/ 디렉토리에 있는 이 서비스 단위 파일에 대한 링크가 있습니다.

우리의 경우 일반 서비스 단위 파일이 /lib/systemd/system/ 디렉토리에 생성되었지만 /etc/systemd/system/ 아래에 링크가 만들어지지 않았습니다. 이를 테스트하려면 다음 명령을 실행하십시오.

sudo ls -l /lib/systemd/system/vnc*

넌 봐야 해:

-rw-r--r--. 1 root root 1744 Jun 10 16:15 /lib/systemd/system/vncserver@.service

그런 다음 /etc/systemd/system/에서 확인하십시오.

sudo ls -l /etc/systemd/system/*.wants/vnc*

이것은 존재하지 않습니다:

ls: cannot access /etc/systemd/system/*.wants/vnc*: No such file or directory

따라서 첫 번째 단계는 두 명의 사용자를 위해 두 개의 새로운 VNC 서버 인스턴스를 시작하는 것입니다. 이렇게 하려면 /etc/system/system 아래에 일반 VNC 서비스 단위 파일의 복사본 두 개를 만들어야 합니다. 아래 코드 스니펫에서는 두 개의 서로 다른 이름으로 두 개의 사본을 만들고 있습니다.

sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:4.service

sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:5.service

그렇다면 복사된 파일 이름에 두 개의 숫자(콜론과 함께)를 추가한 이유는 무엇입니까?

다시 말하지만 개별 VNC 서비스의 개념으로 돌아갑니다. VNC 자체는 포트 5900에서 실행됩니다. 각 사용자는 자신의 VNC 서버를 실행하므로 각 사용자는 별도의 포트를 통해 연결해야 합니다. 파일 이름에 숫자를 추가하면 해당 서비스를 5900하위 포트로 실행하도록 VNC에 알립니다. 따라서 우리의 경우 joevnc의 VNC 서비스는 포트 5904(5900 + 4)에서 실행되고 janevnc의 VNC 서비스는 5905(5900 + 5)에서 실행됩니다.

다음으로 각 클라이언트에 대한 서비스 단위 파일을 편집합니다. vi 편집기로 /etc/systemd/system/vncserver@:4.service 파일을 엽니다.

sudo vi /etc/systemd/system/vncserver@:4.service

"Quick HowTo\ 섹션을 보면 우리가 이미 첫 번째 단계를 완료했음을 알 수 있습니다. 이제 나머지 단계를 진행해야 합니다. 주석도 VNC가 신뢰할 수 없는 연결임을 알려줍니다. 이에 대해서는 나중에 설명하겠습니다. .

지금은 파일의 [Service] 섹션을 편집하여 의 인스턴스를 joevnc로 바꿉니다. 또한 ExecStart 매개변수 끝에 -geometry 1280x1024 절을 추가합니다. VNC에 시작해야 하는 화면 크기를 알려줍니다. 총 두 줄을 수정합니다. 다음은 편집된 파일의 모습입니다(전체 파일이 표시되지 않음).

# The vncserver service unit file
#
# Quick HowTo:
# 1. Copy this file to /etc/systemd/system/vncserver@:<display>.service
# 2. Edit <USER> and vncserver parameters appropriately
#   ("runuser -l <USER> -c /usr/bin/vncserver %i -arg1 -arg2")
# 3. Run `systemctl daemon-reload`
# 4. Run `systemctl enable vncserver@:<display>.service`
#

. . .

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l joevnc -c "/usr/bin/vncserver %i -geometry 1280x1024" 
PIDFile=/home/joevnc/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target

파일을 저장하고 vi를 종료합니다.

마찬가지로 vi에서 /etc/systemd/system/vncserver@:5.service 파일을 열고 사용자 janevnc에 대해 변경합니다.

sudo vi /etc/systemd/system/vncserver@:5.service

다음은 변경 사항이 표시된 [Service] 섹션입니다.

[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l janevnc -c "/usr/bin/vncserver %i -geometry 1280x1024"
PIDFile=/home/janevnc/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

다음으로 다음 명령을 실행하여 systemd 데몬을 다시 로드하고 부팅 시 두 명의 사용자에 대해 VNC가 시작되는지 확인합니다.

sudo systemctl daemon-reload

첫 번째 서버 인스턴스를 활성화합니다.

sudo systemctl enable vncserver@:4.service

산출:

ln -s '/etc/systemd/system/vncserver@:4.service' '/etc/systemd/system/multi-user.target.wants/vncserver@:4.service'

두 번째 서버 인스턴스를 활성화합니다.

sudo systemctl enable vncserver@:5.service

산출:

ln -s '/etc/systemd/system/vncserver@:5.service' '/etc/systemd/system/multi-user.target.wants/vncserver@:5.service'

이제 두 개의 VNC 서버 인스턴스를 구성했습니다.

5단계 - 방화벽 구성

다음으로 포트 5904 및 5905를 통해서만 VNC 트래픽을 허용하도록 방화벽을 구성해야 합니다. CentOS 7은 firewalld 데몬을 통해 동적 방화벽을 사용합니다. 변경 사항을 적용하기 위해 서비스를 다시 시작할 필요가 없습니다.

firewalld 서비스는 시스템 부팅 시 자동으로 시작되지만 항상 다음을 확인하는 것이 좋습니다.

sudo firewall-cmd --state

다음이 표시되어야 합니다.

running

어떤 이유로든 상태가 "실행 중이 아님\인 경우 다음 명령을 실행하여 실행 중인지 확인하십시오.

sudo systemctl start firewalld

이제 포트 5904 및 5905에 대한 규칙을 추가합니다.

sudo firewall-cmd --permanent --zone=public --add-port=5904-5905/tcp

산출:

success

방화벽을 다시 로드합니다.

sudo firewall-cmd --reload

산출:

success

6단계 - VNC 암호 설정

우리는 VNC가 작동하는 것을 보는 데 한 걸음 떨어져 있습니다. 이 단계에서 사용자는 VNC 암호를 설정해야 합니다. 이는 사용자의 Linux 비밀번호가 아닌 VNC 세션에 로그인하기 위한 비밀번호입니다.

CentOS 7 서버에 대한 다른 터미널 연결을 열고 이번에는 joevnc로 로그인합니다.

ssh joevnc@your_server_ip

다음 명령을 실행합니다.

vncserver

아래 출력에서 볼 수 있듯이 서버는 joevnc에 VNC 암호를 설정하도록 요청합니다. 암호를 입력한 후 프로그램은 사용자의 홈 디렉토리에 생성 중인 여러 파일도 표시합니다.

You will require a password to access your desktops.

Password:
Verify:
xauth:  file /home/joevnc/.Xauthority does not exist

New 'localhost.localdomain:1 (joevnc)' desktop is localhost.localdomain:1

Creating default startup script /home/joevnc/.vnc/xstartup
Starting applications specified in /home/joevnc/.vnc/xstartup
Log file is /home/joevnc/.vnc/localhost.localdomain:1.log

New localhost.localdomain:1 (joevnc) desktop is localhost.localdomain:1 줄을 살펴보겠습니다. localhost.localdomain은 이 예에서 서버 이름이었습니다. 귀하의 경우에는 다를 수 있습니다. 서버 이름 뒤의 숫자를 확인하십시오(1, 콜론으로 구분). joevnc의 서비스 단위 파일에 있는 번호(4였음)가 아닙니다. 이것은 서비스 자체의 포트 번호(5904)가 아니라 joevnc의 세션이 이 서버에서 실행될 디스플레이 번호이기 때문입니다.

다음으로 새 터미널 세션을 열고 janevnc로 로그인합니다. 여기서도 VNC 서버를 시작하고 janevnc에 대한 비밀번호를 설정합니다.

vncserver

janevnc의 세션이 디스플레이 2에서 실행됨을 보여주는 유사한 출력이 표시되어야 합니다.

마지막으로 기본 터미널 세션에서 서비스를 다시 로드합니다.

sudo systemctl daemon-reload
sudo systemctl restart vncserver@:4.service
sudo systemctl restart vncserver@:5.service

7단계 - VNC 클라이언트로 원격 데스크톱에 연결

이 자습서에서는 joevnc 및 janevnc 사용자가 Windows 컴퓨터에서 CentOS 7 서버에 연결하려고 한다고 가정합니다.

원격 데스크톱에 로그인하려면 각각 Windows용 VNC 클라이언트가 필요합니다. 이 클라이언트는 그래픽 출력을 표시한다는 점을 제외하면 PuTTY와 같은 터미널 클라이언트와 같습니다. 다양한 VNC 클라이언트를 사용할 수 있지만 여기서 사용할 클라이언트는 여기에서 사용할 수 있는 RealVNC입니다. Mac OS X용 VNC 뷰어는 같은 페이지에서 다운로드할 수 있으며 Mac 버전은 Windows 버전과 상당히 유사합니다.

VNC 뷰어가 시작되면 다음과 같은 대화 상자가 표시됩니다.

VNC 서버 필드에 CentOS 7 서버의 IP 주소를 추가합니다. 콜론(:)으로 구분하여 서버의 IP 뒤에 포트 번호 5904를 지정합니다. joevnc의 VNC 서비스 포트인 5904를 사용했습니다.

또한 VNC 뷰어에서 암호화 방법을 선택하도록 결정했습니다. 이 옵션은 네트워크를 통해 전송된 암호만 암호화합니다. 서버와의 모든 후속 통신은 암호화되지 않습니다. (마지막 단계에서 보안 SSH 터널을 설정합니다.)

실제로 경고 메시지는 다음을 보여줍니다.

지금은 경고를 수락하십시오. 암호 프롬프트가 표시됩니다.

앞에서 설정한 joevnc의 VNC 비밀번호를 입력합니다.

원격 CentOS 서버의 GNOME 데스크탑을 보여주는 새 창이 열립니다.

기본 환영 메시지를 수락합니다.

이제 joevnc는 GNOME 계산기와 같은 그래픽 도구를 시작할 수 있습니다.

이 데스크톱 연결을 열린 상태로 둘 수 있습니다.

이제 janevnc는 CentOS 서버와 다른 VNC 세션을 시작할 수도 있습니다. IP 주소는 동일하고 포트는 5905입니다.

janevnc가 VNC 뷰어를 통해 로그인하면 joevnc에 대해 표시된 것처럼 환영 메시지가 있는 빈 데스크톱이 표시됩니다. 즉, 두 사용자가 데스크톱 인스턴스를 공유하지 않습니다. joevnc의 데스크탑에는 여전히 계산기가 표시되어야 합니다.

원격 데스크톱 세션을 닫으려면 창을 닫으면 됩니다. 그러나 이것은 서버의 백그라운드에서 사용자의 VNC 서비스를 중지하지 않습니다. 서비스가 중지되거나 다시 시작되지 않고 컴퓨터가 재부팅되지 않은 경우 다음 로그온 시 동일한 데스크톱 세션이 표시됩니다.

joevnc 및 janevnc에 대한 VNC 뷰어 창을 닫습니다. 터미널 세션도 닫습니다. 기본 터미널 창에서 VNC 서비스가 계속 실행 중인지 확인합니다.

sudo systemctl status vncserver@:4.service

출력은 원격 데스크톱이 여전히 실행 중임을 보여줍니다.

vncserver@:4.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:4.service; enabled)
   Active: active (running) since Sat 2014-11-01 12:06:49 EST; 58min ago
  Process: 2014 ExecStart=/sbin/runuser -l joevnc -c /usr/bin/vncserver %i -geometry 1280x1024 (code=exited, status=0/SUCCESS)
  
. . .

두 번째 서비스를 확인합니다.

sudo systemctl status vncserver@:5.service

이것도 실행 중입니다.

vncserver@:5.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:5.service; enabled)
   Active: active (running) since Sat 2014-11-01 12:42:56 EST; 22min ago
  Process: 3748 ExecStart=/sbin/runuser -l janevnc -c /usr/bin/vncserver %i -geometry 1280x1024 (code=exited, status=0/SUCCESS)
  
. . .

이 시점에서 joevnc의 데스크톱에 다시 로그인하려는 경우 동일한 계산기 앱이 열리는 것을 볼 수 있습니다.

이는 시스템 관리자에게 몇 가지 흥미로운 과제를 제시합니다. VNC를 통해 서버에 연결하는 사용자가 많은 경우 더 이상 필요하지 않을 때 VNC 서비스를 중지할 수 있는 방법을 고안할 수 있습니다. 이렇게 하면 귀중한 시스템 리소스를 절약할 수 있습니다.

문제 해결 — VNC 서비스 충돌

VNC를 테스트하고 사용하다 보면 때때로 서비스가 충돌하여 복구할 수 없는 경우가 있습니다. 상태를 확인하려고 할 때:

sudo systemctl status vncserver@:4.service

다음과 같은 긴 오류 메시지가 나타날 수 있습니다.

vncserver@:4.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:4.service; enabled)
   Active: failed (Result: exit-code) since Fri 2014-11-07 00:02:38 EST; 2min 20s ago
  Process: 2221 ExecStart=/sbin/runuser -l joevnc -c /usr/bin/vncserver %i -geometry 1280x1024 (code=exited, status=2)
  Process: 1257 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

서비스 시작 시도가 작동하지 않음:

sudo systemctl start vncserver@:4.service

실패한 시작:

Job for vncserver@:4.service failed. See 'systemctl status vncserver@:4.service' and 'journalctl -xn' for details.

일반적으로 그 이유는 간단합니다. /var/log/messages 확인:

sudo tail  /var/log/messages

관련 오류는 다음과 같습니다.

Nov  7 00:08:36 localhost runuser: Warning: localhost.localdomain:4 is taken because of /tmp/.X11-unix/X4
Nov  7 00:08:36 localhost runuser: Remove this file if there is no X server localhost.localdomain:4
Nov  7 00:08:36 localhost runuser: A VNC server is already running as :4
Nov  7 00:08:36 localhost systemd: vncserver@:4.service: control process exited, code=exited status=2
Nov  7 00:08:36 localhost systemd: Failed to start Remote desktop service (VNC).
Nov  7 00:08:36 localhost systemd: Unit vncserver@:4.service entered failed state.
Nov  7 00:08:36 localhost systemd: Failed to mark scope session-c3.scope as abandoned : Stale file handle

해결 방법은 /tmp 폴더 아래의 파일을 삭제하는 것입니다.

sudo rm -i /tmp/.X11-unix/X4

산출:

rm: remove socket ‘/tmp/.X11-unix/X4’? y

그런 다음 VNC 서비스를 시작합니다.

sudo systemctl start vncserver@:4.service

일반적인 문제 해결

비교적 드물기는 하지만 VNC로 작업할 때 다른 오류가 발생할 수 있습니다. 예를 들어, 원격 데스크톱 화면이 공백이 되거나 중단될 수 있고, 암호 오류 메시지와 함께 세션이 중단될 수 있으며, VNC 뷰어가 제대로 연결되지 않거나 GUI에 명령을 전송하여 응용 프로그램을 시작할 수 있습니다.

더 잘 이해하려면 /var/log/messages 파일을 확인하는 것이 좋습니다. 때때로 서버를 재부팅하거나 극단적인 경우 VNC 서비스를 다시 생성해야 할 수 있습니다.

시스템 리소스도 원인이 될 수 있습니다. Droplet 등에 추가 RAM을 추가해야 할 수도 있습니다.

8단계 - SSH 터널링을 통한 VNC 세션 보안

지금까지 joevnc와 janevnc 모두 암호화되지 않은 채널을 통해 원격 데스크톱에 액세스했습니다. 이전에 본 것처럼 VNC 뷰어는 연결 시 이에 대해 경고합니다. 세션이 시작될 때 암호만 암호화됩니다. 모든 후속 네트워크 트래픽 및 데이터 전송은 누구나 중간에 가로챌 수 있도록 열려 있습니다.

SSH 터널링 정보

여기서 SSH(Secure Shell) 세션이 도움이 될 수 있습니다. SSH를 사용하면 VNC가 SSH 암호화 세션의 컨텍스트 내에서 실행될 수 있습니다. 이것을 터널링이라고 합니다. 실제로 VNC 트래픽은 SSH 프로토콜에 피기백되어 서버와의 모든 통신이 암호화됩니다. SSH가 VNC에 대한 랩어라운드 보호를 제공하고 VNC가 마치 SSH 내의 터널에서 실행되는 것처럼 실행되기 때문에 터널링이라고 합니다. SSH 터널링은 POP, X 또는 IMAP과 같은 다른 프로토콜에도 사용할 수 있습니다.

SSH 터널링은 기본적으로 하나의 특정 포트에서 다른 시스템의 다른 포트로 액세스를 변환하는 수단인 포트 전달과 함께 작동합니다. 포트 포워딩을 사용하면 클라이언트 애플리케이션이 머신 A에서 실행 중인 포트 A에 연결할 때 머신 B에서 실행 중인 포트 B로 투명하게 전달됩니다. 클라이언트 애플리케이션은 이 변환을 인식하지 못하고 원래 포트에 연결되어 있다고 생각합니다. 포트 포워딩은 SSH 프로토콜의 기능 중 하나입니다.

SSH 터널링에 대한 자세한 내용은 이 자습서를 읽으십시오.

이 자습서에서는 포트 5904(joevnc의 경우) 및 5905(janevnc의 경우)에서 실행되도록 VNC를 구성했습니다.

포트 포워딩을 사용하면 로컬 클라이언트 컴퓨터의 포트 5900에 연결하도록 로컬 VNC 클라이언트를 설정할 수 있으며 이는 원격 서버의 포트 5905에 매핑될 수 있습니다. 이것은 janevnc의 연결에 대한 예이지만 다른 클라이언트에 대해서도 동일한 단계를 쉽게 따를 수 있습니다.

VNC 클라이언트 응용 프로그램이 시작되면 localhost의 포트 5900을 가리킬 수 있으며 포트 포워딩은 이를 원격 서버의 포트 5905로 투명하게 전송합니다.

참고: 연결을 안전하게 하려면 매번 SSH 섹션을 시작해야 합니다.

OS X

Mac에서 터미널을 엽니다.

다음 연결 정보를 입력하고 your_server_ip를 원격 서버의 IP 주소로 바꾸십시오.

ssh -L 5900:your_server_ip:5905 janevnc@your_server_ip -N

janevnc의 UNIX 비밀번호를 입력합니다. 연결이 중단된 것처럼 보입니다. 원격 데스크톱을 사용하는 동안 계속 실행할 수 있습니다.

이제 VNC 뷰어 지침으로 건너뜁니다.

윈도우

janevnc의 VNC 세션을 보호하기 위해 로컬 Windows 컴퓨터에 PuTTY가 설치되어 있다고 가정합니다. PuTTY는 무료이며 여기에서 다운로드할 수 있습니다.

janevnc의 VNC 및 터미널 세션이 아직 닫히지 않았다면 지금 닫으십시오.

PuTTY를 시작합니다. 세션 화면에서 서버 IP 주소를 지정하고 연결을 설명하는 이름을 지정한 다음 저장 버튼을 클릭하여 연결 세부 정보를 저장합니다. Hostname 필드에 username@your_server_ip를 어떻게 지정했는지 확인하십시오.

그런 다음 왼쪽 탐색 창에서 SSH 메뉴 항목을 확장하고 X11 항목을 선택합니다. 이것은 세션에 대한 X11 전달 속성을 보여줍니다. X11 전달 활성화 확인란이 선택되어 있는지 확인합니다. 이렇게 하면 SSH가 서버와 클라이언트 간에 흐르는 X Windows 트래픽을 암호화합니다.

마지막으로 SSH > 터널을 선택합니다. 소스 포트 필드에 5900을 입력합니다. 대상 필드에서 서버의 이름 또는 IP 주소를 지정하고 그 뒤에 콜론과 의도한 사용자의 VNC 포트 번호를 지정합니다. 우리의 경우 your_server_ip:5905를 지정했습니다.

또는 포트 5902를 사용할 수 있습니다. 이 경우 2는 janevnc의 표시 번호입니다(janevnc가 vncserver 명령을 실행할 때 표시되는 메시지를 기억하십시오).

추가 버튼을 클릭하면 전달된 포트 아래에 매핑이 추가됩니다. 여기에서 SSH 세션에 대한 포트 포워딩을 추가합니다. 사용자가 포트 5900에서 localhost에 연결하면 연결이 자동으로 SSH를 통해 원격 서버의 포트 5905로 터널링됩니다.

세션 항목으로 돌아가서 janevnc에 대한 세션을 저장합니다. 열기 버튼을 클릭하면 janevnc에 대한 새 터미널 세션이 열립니다. 적절한 UNIX 암호를 사용하여 janevnc로 로그인합니다.

VNC 뷰어

다음으로 VNC 뷰어를 다시 시작합니다. 이번에는 VNC 서버 주소에 <^>를 입력하고 VNC 서버가 암호화 방법을 선택하도록 합니다.

연결 버튼을 클릭합니다.

암호화되지 않은 세션에 대해 경고하는 대화 상자가 계속 표시되지만 이번에는 무시해도 됩니다. VNC 뷰어는 전달되는 포트(방금 시작한 SSH 세션에서 설정됨)에 대해 알지 못하며 로컬 시스템에 연결을 시도한다고 가정합니다.

이 경고를 수락하면 친숙한 암호 프롬프트가 표시됩니다. janevnc의 VNC 암호를 입력하여 원격 데스크톱에 액세스합니다.

그렇다면 세션이 암호화되었는지 어떻게 알 수 있습니까? 생각해 보면 SSH 세션에서 포트 포워딩을 설정했습니다. SSH 세션이 설정되지 않았다면 포트 포워딩이 작동하지 않았을 것입니다. 실제로 터미널 창을 닫고 PuTTY 세션에서 로그아웃한 다음 VNC 뷰어만으로 연결을 시도하면 localhost:5900에 대한 연결 시도에서 다음 오류 메시지가 표시됩니다.

따라서 localhost:5900 연결이 작동하면 연결이 암호화되었음을 확신할 수 있습니다.

연결이 항상 암호화되도록 VNC를 사용할 때마다 먼저 SSH 연결을 설정해야 한다는 점을 기억하십시오.

결론

GUI 프런트 엔드에서 CentOS Linux 시스템에 액세스하면 시스템 관리가 훨씬 간단해집니다. 모든 클라이언트 운영 체제에서 연결할 수 있으며 웹 기반 호스팅 제어판에 의존할 필요가 없습니다. VNC는 대부분의 제어판에 비해 설치 공간이 훨씬 작습니다.

두 명의 일반 사용자가 VNC 클라이언트에 연결할 수 있는 방법을 보여 주었지만 심각한 생산 환경에서는 거의 실용적이지 않습니다. 실제로 사용자는 서버에 액세스하기 위한 맞춤형 애플리케이션 또는 브라우저를 갖게 됩니다. 각 사용자에 대해 여러 VNC 서비스를 실행하면 시스템 리소스에 불필요한 부담이 가중되며 이와 관련된 내재적 위험은 말할 것도 없습니다.

프로덕션 Linux 서버에 VNC를 설치하고 실행하기로 결정한 경우 관리 목적으로만 사용하는 것이 좋습니다.