Thứ ba, 25/11/2014 | 00:00 GMT+7

Cách cài đặt và cấu hình truy cập từ xa VNC cho GNOME Desktop trên CentOS 7

VNC hay Máy tính mạng ảo là một giao thức độc lập với nền tảng cho phép user kết nối với hệ thống máy tính từ xa và sử dụng tài nguyên của nó từ Giao diện user đồ họa (GUI).

Nó giống như điều khiển từ xa một ứng dụng: các tổ hợp phím hoặc nhấp chuột của client được truyền qua mạng tới máy tính từ xa. VNC cũng cho phép chia sẻ clipboard giữa cả hai máy tính. Nếu bạn đến từ nền server Microsoft Windows, VNC giống như Dịch vụ Máy tính Từ xa, ngoại trừ nó cũng có sẵn cho OS X, Linux và các hệ điều hành khác.

Giống như mọi thứ khác trong thế giới mạng, VNC dựa trên mô hình server khách: server VNC chạy trên một máy tính từ xa - Server - phục vụ các yêu cầu của client đến.

Bàn thắng

Trong hướng dẫn này, ta sẽ học cách cài đặt và cấu hình server VNC trên CentOS 7. Ta sẽ cài đặt server TigerVNC được cung cấp miễn phí từ kho lưu trữ TigerVNC GitHub .

Để chứng minh cách hoạt động của VNC, ta cũng sẽ cài đặt máy tính để bàn GNOME trên server CentOS của bạn. Ta sẽ tạo hai account user và cấu hình quyền truy cập VNC cho chúng. Sau đó, ta sẽ kiểm tra kết nối của chúng với máy tính từ xa và cuối cùng, tìm hiểu cách bảo mật kết nối từ xa thông qua tunnel SSH.

Yêu cầu

Các lệnh, gói và file được hiển thị trong hướng dẫn này đã được thử nghiệm trên bản cài đặt tối thiểu của CentOS 7. Ta khuyên bạn nên làm như sau:

  • Distro : CentOS 7, 64-bit
  • Yêu cầu tài nguyên : Một server có RAM 2 GB
  • Để làm theo hướng dẫn này, bạn nên sử dụng user sudo. Để hiểu cách hoạt động của các quyền sudo, bạn có thể tham khảo hướng dẫn DigitalOcean này

Cảnh báo: Bạn không nên chạy bất kỳ lệnh, truy vấn hoặc cấu hình nào từ hướng dẫn này trên server Linux production . Điều này có thể dẫn đến các vấn đề bảo mật và thời gian chết.

Bước 1 - Tạo hai account user

Đầu tiên, ta sẽ tạo hai account user . Các account này sẽ kết nối từ xa với server CentOS 7 của ta từ các client VNC.

  • joevnc
  • janevnc

Chạy lệnh sau để thêm account user cho joevnc :

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

Sau đó chạy lệnh passwd để thay đổi password của joevnc :

sudo passwd joevnc 

Đầu ra sẽ yêu cầu ta nhập password mới. Sau khi được cung cấp, account sẽ sẵn sàng để đăng nhập:

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

Tiếp theo, tạo một account cho janevnc :

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

Đặt password cho janevnc :

sudo passwd janevnc 

Bước 2 - Cài đặt GNOME Desktop

Bây giờ ta sẽ cài đặt GNOME desktop. GNOME là một nỗ lực hợp tác: đó là một tập hợp các phần mềm open-souce và miễn phí tạo nên một môi trường máy tính để bàn rất phổ biến. Có những môi trường máy tính để bàn khác như KDE, nhưng GNOME phổ biến hơn. User VNC của ta sẽ sử dụng GNOME để tương tác với server từ máy tính để bàn của nó:

sudo yum groupinstall -y "GNOME Desktop" 

Tùy thuộc vào tốc độ mạng của bạn, quá trình này có thể mất vài phút.

Khi group gói được cài đặt, hãy khởi động lại server :

sudo reboot 

Khắc phục sự cố - Server bị kẹt ở giai đoạn khởi động

Tùy thuộc vào cách server của bạn đã được cài đặt , khi máy khởi động, nó có thể vẫn ở trong giai đoạn khởi động hiển thị thông báo như sau:

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]: 

Để vượt qua điều này, hãy nhấn 1 (đọc giấy phép), sau đó nhấn 2 (chấp nhận giấy phép), rồi nhấn C (để tiếp tục). Bạn có thể phải nhấn C hai lần hoặc nhiều hơn. Hình ảnh dưới đây cho thấy điều này:

Thông báo giai đoạn khởi động trong CentOS 7 sau khi cài đặt GNOME Desktop

Nếu bạn không gặp lỗi này và quá trình khởi động diễn ra suôn sẻ thì càng tốt - bạn có thể chuyển sang bước tiếp theo.

Bước 3 - Cài đặt Server TigerVNC

TigerVNC là phần mềm cho phép ta kết nối máy tính để bàn từ xa.

Cài đặt server Tiger VNC:

sudo yum install -y tigervnc-server 

Điều này sẽ hiển thị kết quả như sau:

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! 

Bây giờ ta đã cài đặt server VNC và máy tính để bàn GNOME. Ta cũng đã tạo hai account user để kết nối thông qua VNC.

Bước 4 - Cấu hình dịch vụ VNC cho hai khách hàng

Server VNC không tự động khởi động khi nó được cài đặt lần đầu. Để kiểm tra điều này, hãy chạy lệnh sau:

sudo systemctl status vncserver@:.service 

Đầu ra sẽ như thế này:

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

Bạn cũng có thể chạy lệnh này:

sudo systemctl is-enabled vncserver@.service 

Điều này sẽ hiển thị kết quả như thế này:

disabled 

Vậy tại sao nó lại bị vô hiệu hóa? Đó là bởi vì mỗi user sẽ bắt đầu một version riêng của trình dịch vụ VNC. Nói cách khác, VNC không chạy như một quy trình duy nhất phục vụ mọi yêu cầu của user . Mỗi user kết nối qua VNC sẽ phải khởi động một version daemon mới (hoặc administrator hệ thống có thể tự động hóa việc này).

CentOS 7 sử dụng daemon systemd để khởi tạo các dịch vụ khác. Mỗi dịch vụ nguyên bản chạy trong systemd có một tệp đơn vị dịch vụ được trình cài đặt yum đặt trong folder /lib/systemd/system . Các quy trình được bắt đầu tự động tại thời điểm khởi động có một liên kết đến file đơn vị dịch vụ này được đặt trong folder /etc/systemd/system/ .

Trong trường hợp của ta , một file đơn vị dịch vụ chung đã được tạo trong folder /lib/systemd/system/ , nhưng không có liên kết nào được tạo trong /etc/systemd/system/ . Để kiểm tra điều này, hãy chạy các lệnh sau:

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

Bạn nên thấy:

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

Sau đó kiểm tra trong /etc/systemd/system/ :

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

Cái này không tồn tại:

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

Vì vậy, bước đầu tiên là bắt đầu hai version mới của server VNC cho hai user của ta . Để thực hiện việc này, ta cần tạo hai bản sao của file đơn vị dịch vụ VNC chung theo /etc/system/system . Trong đoạn mã bên dưới, bạn đang tạo hai bản sao với hai tên khác nhau:

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 

Vậy tại sao ta lại thêm hai số (cùng với dấu hai chấm) trong tên file đã sao chép?

, điều đó trở lại khái niệm về các dịch vụ VNC riêng lẻ. VNC tự nó chạy trên cổng 5900 . Vì mỗi user sẽ chạy server VNC của riêng họ, mỗi user sẽ phải kết nối qua một cổng riêng biệt. Việc bổ sung một số trong tên file cho VNC biết để chạy dịch vụ đó dưới dạng cổng phụ 5900 . Vì vậy, trong trường hợp của ta , dịch vụ VNC của joevnc sẽ chạy trên cổng 5904 (5900 + 4) và janevnc sẽ chạy trên 5905 (5900 + 5).

Tiếp theo, chỉnh sửa file đơn vị dịch vụ cho từng khách hàng. Mở file /etc/systemd/system/vncserver@:4.service bằng editor vi :

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

Nhìn vào phần “Hướng dẫn nhanh” cho ta biết rằng ta đã hoàn thành bước đầu tiên. Bây giờ ta cần thực hiện các bước còn lại. Các ý kiến cũng cho ta biết rằng VNC là một kết nối không tin cậy . Ta sẽ nói về điều này sau.

Hiện tại, hãy chỉnh sửa phần [Service] của file , thay thế các bản sao của <USER> bằng joevnc . Ngoài ra, hãy thêm mệnh đề -geometry 1280x1024 vào cuối tham số ExecStart . Điều này chỉ cho VNC biết kích thước màn hình mà nó sẽ bắt đầu. Bạn sẽ sửa đổi tổng cộng hai dòng. Đây là giao diện của file đã chỉnh sửa ( lưu ý toàn bộ file không được hiển thị):

# 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 

Lưu file và thoát khỏi vi.

Tương tự, hãy mở file /etc/systemd/system/vncserver@:5.service trong vi và áp dụng các thay đổi cho janevnc user :

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

Đây chỉ là phần [Service] với các thay đổi được đánh dấu:

[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 || :' 

Tiếp theo, chạy các lệnh sau để reload daemon systemd và cũng đảm bảo VNC khởi động cho hai user tại thời điểm khởi động.

sudo systemctl daemon-reload 

Bật version server đầu tiên:

sudo systemctl enable vncserver@:4.service 

Đầu ra:

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

Bật version server thứ hai:

sudo systemctl enable vncserver@:5.service 

Đầu ra:

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

Đến đây bạn đã cấu hình hai version server VNC.

Bước 5 - Cấu hình firewall của bạn

Tiếp theo, ta cần cấu hình firewall để chỉ cho phép lưu lượng truy cập VNC qua các cổng 59045905 . CentOS 7 sử dụng Tường lửa động thông qua daemon firewalld ; dịch vụ không cần phải khởi động lại để các thay đổi có hiệu lực.

Dịch vụ firewalld sẽ tự động bắt đầu tại thời điểm khởi động hệ thống, nhưng bạn nên kiểm tra:

sudo firewall-cmd --state 

Điều này sẽ hiển thị:

running 

Nếu trạng thái “không chạy” vì bất kỳ lý do gì, hãy thực hiện lệnh sau đảm bảo rằng nó đang chạy:

sudo systemctl start firewalld 

Bây giờ hãy thêm các luật cho các cổng 5904 và 5905:

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

Đầu ra:

success 

Cập nhật firewall :

sudo firewall-cmd --reload 

Đầu ra:

success 

Bước 6 - Đặt password VNC

Ta chỉ còn một bước nữa là thấy VNC hoạt động. Trong bước này, user cần đặt mật khẩu VNC của họ. Đây không phải là password Linux của user , mà là password để đăng nhập vào các phiên VNC.

Mở một kết nối terminal khác với server CentOS 7 và lần này đăng nhập với quyền joevnc .

ssh joevnc@your_server_ip 

Thực hiện lệnh sau:

vncserver 

Như trong kết quả bên dưới, server sẽ yêu cầu joevnc cài đặt password VNC. Sau khi nhập password , chương trình cũng hiển thị một số file đang được tạo trong folder chính của user :

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  

Hãy xem dòng New 'localhost.localdomain:1 (joevnc)' desktop is localhost.localdomain:1 . localhost.localdomain là tên server trong ví dụ của ta ; trong trường hợp của bạn nó có thể khác. Lưu ý số sau tên server : ( 1 , phân tách bằng dấu hai chấm). Đó không phải là số trong file đơn vị dịch vụ của joevnc (là 4 ). Đó là bởi vì đây là số hiển thị phiên của joevnc sẽ chạy trên server này, không phải là số cổng của chính dịch vụ ( 5904 ).

Tiếp theo, mở một phiên terminal mới và đăng nhập bằng janevnc . Ở đây, khởi động server VNC và đặt password cho janevnc :

vncserver 

Bạn sẽ thấy kết quả tương tự cho thấy rằng phiên của janevnc sẽ chạy trên màn hình 2 .

Cuối cùng, reload các dịch vụ từ phiên terminal chính :

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

Bước 7 - Kết nối với Máy tính Từ xa bằng Máy khách VNC

Đối với hướng dẫn này, ta sẽ giả sử user joevncjanevnc đang cố gắng kết nối với server CentOS 7 từ máy tính Windows của họ.

Mỗi người cần một client VNC cho Windows để đăng nhập vào máy tính từ xa. Ứng dụng khách này giống như một ứng dụng client terminal như PuTTY, ngoại trừ nó hiển thị kết quả đồ họa. Có nhiều ứng dụng client VNC khác nhau, nhưng ứng dụng ta sẽ sử dụng là RealVNC, có sẵn tại đây . VNC Viewer dành cho Mac OS X có sẵn để download trên cùng một trang và version dành cho Mac khá giống với version Windows.

Khi VNC Viewer được khởi động, nó sẽ hiển thị một hộp thoại như sau:

Giao diện trình xem RealVNC

Trong trường Server VNC , thêm địa chỉ IP của server CentOS 7 của bạn. Ghi rõ số cổng 5904 sau khi chỉ IP của server , tách bằng dấu hai chấm (:). Ta đã sử dụng 5904 vì đó là cổng dịch vụ VNC cho joevnc .

Ta cũng đã quyết định để VNC Viewer chọn phương pháp mã hóa. Tùy chọn này sẽ chỉ mã hóa password được gửi qua mạng. Mọi giao tiếp tiếp theo với server sẽ không được mã hóa. ( Ta sẽ cài đặt một tunnel SSH an toàn trong bước cuối cùng.)

ConnectiNg với  server  CentOS 7 với trình xem RealVNC dưới dạng joevnc

Trên thực tế, một thông báo cảnh báo chỉ cho thấy rằng:

Cảnh báo mã hóa VNC

Chấp nhận cảnh báo ngay bây giờ. Một dấu nhắc password được hiển thị:

Mật khẩu VNC nhắc nhở

Nhập password VNC của joevnc mà bạn đã đặt trước đó.

Một cửa sổ mới mở ra hiển thị màn hình nền GNOME cho server CentOS từ xa của ta :

Máy tính để bàn từ xa CentOS7

Chấp nhận tin nhắn chào mừng mặc định.

Bây giờ joevnc có thể khởi động một công cụ đồ họa như máy tính GNOME:

Khởi động máy tính GNOME từ máy tính từ xa

Máy tính GNOME

Bạn có thể để mở kết nối máy tính để bàn này.

Bây giờ janevnc cũng có thể bắt đầu một phiên VNC khác với server CentOS. Địa chỉ IP giống nhau và cổng là 5905 :

ConnectiNg với  server  CentOS 7 với trình xem RealVNC dưới dạng janevnc

Khi janevnc đăng nhập qua VNC Viewer, một màn hình trống với thông báo chào mừng sẽ hiển thị, giống như hiển thị cho joevnc . Nói cách khác, hai user không chia sẻ các version máy tính để bàn. màn hình của joevnc sẽ vẫn hiển thị máy tính.

Để đóng phiên máy tính từ xa, chỉ cần đóng cửa sổ là xong. Tuy nhiên, điều này không dừng dịch vụ VNC của user ở chế độ nền trên server . Nếu dịch vụ không bị dừng hoặc không được khởi động lại và máy không khởi động lại, phiên máy tính tương tự sẽ được trình bày ở lần đăng nhập tiếp theo.

Đóng cửa sổ VNC Viewer cho joevncjanevnc . Đóng các phiên giao dịch cuối cùng của họ. Từ cửa sổ terminal chính, hãy kiểm tra xem các dịch vụ VNC có còn chạy hay không:

sudo systemctl status vncserver@:4.service 

Kết quả cho thấy máy tính từ xa vẫn đang chạy:

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)  . . . 

Kiểm tra dịch vụ thứ hai:

sudo systemctl status vncserver@:5.service 

Cái này cũng đang chạy:

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)  . . . 

Nếu bạn muốn đăng nhập lại vào màn hình của joevnc tại thời điểm này, bạn sẽ thấy ứng dụng máy tính tương tự đang mở.

Điều này đưa ra một số thách thức thú vị cho người quản trị hệ thống. Nếu bạn có một số user kết nối với server qua VNC, bạn có thể cần nghĩ ra một số cách để dừng các dịch vụ VNC của họ khi không còn cần thiết. Điều này có thể tiết kiệm một số tài nguyên hệ thống có giá trị.

Khắc phục sự cố - Lỗi dịch vụ VNC

Khi bạn kiểm tra và thử với VNC, đôi khi bạn có thể thấy dịch vụ đã bị lỗi và không thể khôi phục được. Khi bạn cố gắng kiểm tra trạng thái:

sudo systemctl status vncserver@:4.service 

Thông báo lỗi dài này có thể xuất hiện:

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) 

Cố gắng khởi động dịch vụ không hoạt động:

sudo systemctl start vncserver@:4.service 

Khởi động không thành công:

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

Thông thường lý do là đủ đơn giản. Kiểm tra /var/log/messages :

sudo tail  /var/log/messages 

Lỗi liên quan sẽ giống như sau:

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 

Cách khắc phục là xóa file trong folder / tmp :

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

Đầu ra:

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

Sau đó khởi động dịch vụ VNC:

sudo systemctl start vncserver@:4.service 

Khắc phục sự cố chung

Mặc dù tương đối hiếm, bạn có thể gặp các lỗi khác khi làm việc với VNC. Ví dụ: màn hình máy tính từ xa của bạn có thể trống hoặc bị treo, phiên có thể bị lỗi với thông báo lỗi khó hiểu, VNC Viewer có thể không kết nối đúng cách hoặc truyền các lệnh tới GUI để chạy ứng dụng, v.v.

Ta khuyên bạn nên kiểm tra file /var/log/messages để hiểu rõ hơn. Đôi khi, bạn có thể cần phải khởi động lại server của bạn , hoặc trong trường hợp cực đoan, hãy tạo lại dịch vụ VNC.

Tài nguyên hệ thống cũng có thể là một thủ phạm; bạn có thể phải thêm RAM bổ sung vào Server của bạn , v.v.

Bước 8 - Bảo mật phiên VNC thông qua SSH Tunneling

Lúc này, cả joevncjanevnc đều đang truy cập máy tính để bàn từ xa của họ thông qua các kênh không được mã hóa. Như ta đã thấy trước đây, VNC Viewer cảnh báo ta về điều này tại thời điểm kết nối; chỉ password được mã hóa khi các phiên bắt đầu. Mọi lưu lượng mạng và truyền dữ liệu tiếp theo đều được mở cho bất kỳ ai chặn ở giữa.

Giới thiệu về SSH Tunneling

Đây là nơi mà các phiên Secure Shell (SSH) có thể giúp ích. Với SSH, VNC có thể chạy trong ngữ cảnh của một phiên được mã hóa SSH. Điều này được gọi là đường hầm . Trên thực tế, lưu lượng truy cập VNC dựa trên giao thức SSH, dẫn đến toàn bộ giao tiếp của nó với server được mã hóa. Nó được gọi là đường hầm vì SSH đang cung cấp bảo vệ bao quanh VNC và VNC đang chạy như thể trong một tunnel bên trong SSH. SSH tunnel cũng được dùng cho các giao thức khác như POP, X hoặc IMAP.

SSH tunneling hoạt động với tính năng chuyển tiếp cổng về cơ bản là một phương tiện chuyển quyền truy cập từ một cổng cụ thể sang một cổng khác trên máy khác. Với tính năng chuyển tiếp cổng, khi một ứng dụng client kết nối với Cổng A đang chạy trên máy A, nó sẽ được chuyển tiếp một cách rõ ràng đến cổng B đang chạy trên máy B. Ứng dụng khách không biết về bản dịch này và nghĩ rằng nó đang kết nối với cổng root . Chuyển tiếp cổng là một trong những tính năng của giao thức SSH.

Để biết thêm thông tin chi tiết về tunnel SSH, hãy đọc hướng dẫn này .

Trong hướng dẫn này, ta đã cấu hình VNC để chạy trên các cổng 5904 (cho joevnc ) và 5905 (cho janevnc ).

Với tính năng chuyển tiếp cổng, ta có thể đặt client VNC local của bạn kết nối với cổng 5900 trên client local và điều này có thể được ánh xạ tới cổng 5905 trên server từ xa. Đây là ví dụ cho kết nối của janevnc , nhưng bạn có thể dễ dàng làm theo các bước tương tự cho bất kỳ ứng dụng client nào khác.

Khi ứng dụng client VNC khởi động, nó có thể được trỏ đến cổng 5900 trên localhost và chuyển tiếp cổng của ta sẽ vận chuyển nó đến cổng 5905 trên server từ xa một cách rõ ràng.

Lưu ý: Bạn sẽ phải bắt đầu một phần SSH mỗi lần đảm bảo kết nối an toàn.

OS X

Trên máy Mac, hãy mở Terminal .

Nhập thông tin kết nối sau, đảm bảo thay thế your_server_ip bằng địa chỉ IP của server từ xa của bạn:

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

Nhập password UNIX của janevnc . Kết nối sẽ bị treo; bạn có thể giữ cho nó hoạt động miễn là bạn sử dụng máy tính để bàn từ xa.

Bây giờ hãy chuyển sang phần hướng dẫn VNC Viewer.

các cửa sổ

Để đảm bảo phiên VNC của janevnc , ta sẽ giả sử máy tính Windows local đã được cài đặt PuTTY. PuTTY miễn phí và có thể download từ đây .

Nếu VNC và phiên terminal của janevnc chưa đóng, hãy đóng chúng ngay bây giờ.

Khởi động PuTTY. Trong màn hình phiên, đảm bảo bạn chỉ định địa chỉ IP server và đặt tên mô tả cho kết nối, sau đó nhấp vào nút Lưu để lưu chi tiết kết nối. Lưu ý cách ta đã chỉ định username @ your_server_ip trong trường Tên server :

Chi tiết phiên trong cấu hình PuTTY

Tiếp theo, mở rộng mục menu SSH trong ngăn chuyển bên trái và chọn mục X11 . Điều này cho thấy các thuộc tính chuyển tiếp X11 cho phiên. Đảm bảo đã chọn hộp kiểm Bật chuyển tiếp X11 . Điều này đảm bảo SSH mã hóa lưu lượng X Windows lưu thông giữa server và client :

Chuyển tiếp X11 trong cấu hình PuTTY

Cuối cùng, chọn SSH> Tunnels . 5900 vào trường Cổng nguồn . Trong trường Đích , chỉ định tên server hoặc địa chỉ IP của bạn, theo sau là dấu hai chấm và số cổng VNC cho user dự định. Trong trường hợp của ta , ta đã chỉ định your_server_ip :5905 .

Ngoài ra, bạn có thể sử dụng cổng 5902 . Số 2 trong trường hợp này sẽ là số hiển thị cho janevnc (hãy nhớ thông báo hiển thị khi janevnc chạy lệnh vncserver ).

Nhấp vào nút Thêm và ánh xạ sẽ được thêm trong Cổng chuyển tiếp . Đây là nơi ta đang thêm chuyển tiếp cổng cho phiên SSH; khi user kết nối với localhost tại cổng 5900 , kết nối sẽ được tự động chuyển qua SSH đến cổng 5905 của server từ xa.

SSH Tunneling trong cấu hình PuTTY

Quay lại các mục Phiên và lưu phiên cho janevnc . Nhấp vào nút Mở và một phiên terminal mới sẽ mở cho janevnc . Đăng nhập bằng janevnc với password UNIX thích hợp:

Phiên  terminal  SSH cho janevnc

VNC Viewer

Tiếp theo, khởi động lại VNC Viewer. Lần này, trong địa chỉ Server VNC , nhập <^> và để server VNC chọn phương pháp mã hóa:

Kết nối VNC Viewer với Localhost bằng Port Forwarding

Nhấp vào nút Kết nối .

Bạn vẫn sẽ nhận được hộp thoại cảnh báo về một phiên không được mã hóa, nhưng lần này bạn có thể bỏ qua nó một cách an toàn. VNC Viewer không biết về cổng mà nó đang được chuyển tiếp đến (điều này đã được đặt trong phiên SSH mới bắt đầu) và giả sử bạn đang cố gắng kết nối với máy local .

Chấp nhận cảnh báo này sẽ hiển thị dấu nhắc password quen thuộc. Nhập password VNC của janevnc để truy cập màn hình từ xa.

Vậy làm thế nào để bạn biết phiên đã được mã hóa? Nếu bạn nghĩ về nó, ta đã cài đặt chuyển tiếp cổng trong phiên SSH. Nếu một phiên SSH không được cài đặt , chuyển tiếp cổng sẽ không hoạt động. Trên thực tế, nếu bạn đóng cửa sổ terminal và đăng xuất khỏi phiên PuTTY sau đó cố gắng kết nối với VNC Viewer một mình, nỗ lực kết nối với localhost:5900 sẽ hiển thị thông báo lỗi sau:

Thông báo lỗi của VNC Viewer

Vì vậy, nếu kết nối localhost:5900 hoạt động, bạn có thể tin tưởng rằng kết nối đã được mã hóa.

Lưu ý bạn cần cài đặt kết nối SSH trước mỗi khi sử dụng VNC, đảm bảo kết nối của bạn luôn được mã hóa.

Kết luận

Việc truy cập hệ thống CentOS Linux của bạn từ giao diện user GUI có thể làm cho việc quản trị hệ thống trở nên đơn giản hơn nhiều. Bạn có thể kết nối từ bất kỳ hệ điều hành client nào và không phải phụ thuộc vào console lưu trữ dựa trên web. VNC có diện tích nhỏ hơn nhiều so với hầu hết các console .

Mặc dù ta đã chỉ ra cách hai user bình thường có thể kết nối với khách hàng VNC của họ, nhưng điều đó khó thực tế trong môi trường production nghiêm túc. Trên thực tế, user sẽ có các ứng dụng hoặc trình duyệt được tùy chỉnh để truy cập vào server . Việc chạy một số dịch vụ VNC cho từng user cũng tạo ra gánh nặng không cần thiết cho tài nguyên hệ thống, chưa kể đến những rủi ro cố hữu đi kèm với nó.

Nếu bạn quyết định cài đặt và chạy VNC trên server Linux production của bạn , ta thực sự khuyên bạn chỉ nên sử dụng nó cho mục đích quản trị.


Tags:

Các tin liên quan

Cách ghi lại mạng của bạn bằng Netdot trên CentOS 7
2014-11-24
Cách cài đặt và cập nhật WordPress với Kiểm soát phiên bản trên CentOS 7
2014-11-10
Cách thêm swap trên CentOS 7
2014-10-31
Cách cài đặt và cấu hình OpenShift Origin trên CentOS 6.5
2014-10-31
Cách cài đặt WordPress trên CentOS 7
2014-10-30
Cách cài đặt Git trên CentOS 7
2014-10-29
Cách thêm và xóa người dùng trên server CentOS 7
2014-10-28
Giới thiệu về SELinux trên CentOS 7 - Phần 1: Các khái niệm cơ bản
2014-09-05
Giới thiệu về SELinux trên CentOS 7 - Phần 2: Tệp và Quy trình
2014-09-05
Giới thiệu về SELinux trên CentOS 7 - Phần 3: Người dùng
2014-09-05