Thứ hai, 11/05/2020 | 00:00 GMT+7

Cách cài đặt và cấu hình VNC trên Ubuntu 20.04

Máy tính mạng ảo , hay VNC, là một hệ thống kết nối cho phép bạn sử dụng bàn phím và chuột để tương tác với môi trường máy tính đồ họa trên server từ xa. Nó giúp việc quản lý file , phần mềm và cài đặt trên server từ xa dễ dàng hơn cho những user chưa thông thạo dòng lệnh.

Trong hướng dẫn này, bạn sẽ cài đặt server VNC với TightVNC trên server Ubuntu 20.04 và kết nối với server đó một cách an toàn thông qua tunnel SSH. Sau đó, bạn sẽ sử dụng client VNC trên máy local của bạn để tương tác với server của bạn thông qua môi trường máy tính để bàn (có giao diện đồ họa) .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

  • Một server Ubuntu 20.04 với admin-user không phải root và firewall được cấu hình bằng UFW. Để cài đặt điều này, hãy làm theo hướng dẫn cài đặt server ban đầu của ta cho Ubuntu 20.04 .
  • Một máy tính local có cài đặt ứng dụng client VNC. Máy khách VNC bạn sử dụng phải hỗ trợ kết nối qua tunnel SSH:
    • Trên Windows, bạn có thể sử dụng TightVNC , RealVNC hoặc UltraVNC .
    • Trên macOS, bạn có thể sử dụng chương trình Chia sẻ màn hình được tích hợp sẵn hoặc có thể sử dụng ứng dụng đa nền tảng như RealVNC .
    • Trên Linux, bạn có thể chọn từ nhiều tùy chọn, bao gồm vinagre , krdc , RealVNC hoặc TightVNC .

Bước 1 - Cài đặt Môi trường Máy tính để bàn và Server VNC

Theo mặc định, server Ubuntu 20.04 không đi kèm với môi trường máy tính để bàn (có giao diện đồ họa) hoặc server VNC được cài đặt, vì vậy bạn sẽ bắt đầu bằng cách cài đặt chúng.

Bạn có nhiều lựa chọn khi chọn môi trường server và máy tính để bàn VNC. Trong hướng dẫn này, bạn sẽ cài đặt các gói cho môi trường máy tính để bàn Xfce mới nhất và gói TightVNC có sẵn từ repository Ubuntu chính thức. Cả Xfce và TightVNC đều được biết đến với dung lượng nhẹ và tốc độ nhanh, điều này sẽ giúp đảm bảo kết nối VNC sẽ trơn tru và ổn định ngay cả với kết nối internet chậm hơn .

Sau khi kết nối với server của bạn bằng SSH, hãy cập nhật danh sách các gói của bạn:

  • sudo apt update

Bây giờ hãy cài đặt Xfce cùng với gói xfce4-goodies , có một số cải tiến cho môi trường máy tính để bàn:

  • sudo apt install xfce4 xfce4-goodies

Trong khi cài đặt, bạn có thể được yêu cầu chọn trình quản lý hiển thị mặc định cho Xfce. Trình quản lý hiển thị là một chương trình cho phép bạn chọn và đăng nhập vào môi trường máy tính để bàn thông qua giao diện đồ họa. Bạn sẽ chỉ sử dụng Xfce khi kết nối với client VNC và trong các phiên Xfce này, bạn sẽ đăng nhập với quyền là user Ubuntu không phải root của bạn . Vì vậy, đối với mục đích của hướng dẫn này, lựa chọn trình quản lý hiển thị của bạn không phù hợp. Chọn một trong hai và nhấn ENTER .

Khi cài đặt xong , hãy cài đặt server TightVNC:

  • sudo apt install tightvncserver

Tiếp theo, chạy lệnh vncserver để đặt password truy cập VNC, tạo file cấu hình ban đầu và khởi động version server VNC:

  • vncserver

Bạn sẽ được yêu cầu nhập và xác minh password để truy cập vào máy của bạn từ xa:

Output
You will require a password to access your desktops. Password: Verify:

Mật khẩu phải dài từ sáu đến tám ký tự. Mật khẩu nhiều hơn 8 ký tự sẽ tự động bị cắt bớt.

Sau khi xác minh password , bạn sẽ có tùy chọn tạo password chỉ xem. User đăng nhập bằng password chỉ xem sẽ không thể điều khiển version VNC bằng chuột hoặc bàn phím của họ. Đây là một tùy chọn hữu ích nếu bạn muốn chứng minh điều gì đó với người khác bằng server VNC của bạn, nhưng điều này không bắt buộc.

Quá trình này sau đó sẽ tạo các file cấu hình mặc định cần thiết và thông tin kết nối cho server . Ngoài ra, nó chạy version server mặc định trên cổng 5901 . Cổng này được gọi là cổng hiển thị và được VNC gọi là :1 . VNC có thể chạy nhiều version trên các cổng hiển thị khác, với :2 tham chiếu đến cổng 5902 :3 tham chiếu đến 5903 , v.v.

Output
Would you like to enter a view-only password (y/n)? n xauth: file /home/sammy/.Xauthority does not exist New 'X' desktop is your_hostname:1 Creating default startup script /home/sammy/.vnc/xstartup Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

Lưu ý nếu bạn muốn thay đổi password của bạn hoặc thêm password chỉ xem, bạn có thể làm như vậy bằng lệnh vncpasswd :

  • vncpasswd

Đến đây, server VNC đã được cài đặt và chạy. Bây giờ, hãy cấu hình nó để chạy Xfce và cung cấp cho ta quyền truy cập vào server thông qua giao diện đồ họa.

Bước 2 - Cấu hình Server VNC

Server VNC cần biết lệnh nào sẽ thực thi khi khởi động. Cụ thể, VNC cần biết nó nên kết nối với môi trường máy tính để bàn (có giao diện đồ họa) nào.

Các lệnh mà server VNC chạy khi khởi động nằm trong file cấu hình có tên xstartup trong folder .vnc folder chính của bạn. Tập lệnh khởi động được tạo khi bạn chạy lệnh vncserver ở bước trước, nhưng bạn sẽ tạo tập lệnh của riêng mình để chạy màn hình Xfce.

Vì bạn sẽ thay đổi cách cấu hình server VNC, trước tiên hãy dừng version server VNC đang chạy trên cổng 5901 bằng lệnh sau:

  • vncserver -kill :1

Đầu ra sẽ giống như thế này, có thể bạn sẽ thấy một PID khác:

Output
Killing Xtightvnc process ID 17648

Trước khi bạn sửa đổi file xstartup , hãy backup bản root :

  • mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Bây giờ, hãy tạo một file xstartup mới và mở nó trong một editor , chẳng hạn như nano :

  • nano ~/.vnc/xstartup

Sau đó, thêm các dòng sau vào file :

~ / .vnc / xstartup
#!/bin/bash xrdb $HOME/.Xresources startxfce4 & 

Dòng đầu tiên là một shebang . Trong các file văn bản thuần có thể thực thi trên nền * nix, một shebang cho hệ thống biết trình thông dịch nào sẽ chuyển file đó đến để thực thi. Trong trường hợp này, bạn đang chuyển file tới trình thông dịch Bash. Điều này sẽ cho phép mỗi dòng kế tiếp được thực hiện dưới dạng lệnh, theo thứ tự.

Lệnh đầu tiên trong file , xrdb $HOME/.Xresources , yêu cầu khung GUI của VNC đọc file .Xresources của user server . .Xresources là nơi user có thể áp dụng các thay đổi đối với một số cài đặt nhất định của màn hình đồ họa, như màu terminal , chủ đề con trỏ và hiển thị phông chữ. Lệnh thứ hai yêu cầu server chạy Xfce. Khi nào bạn khởi động hoặc khởi động lại server VNC, các lệnh này sẽ tự động thực thi.

Lưu file sau khi thêm các dòng này. Nếu bạn sử dụng nano , hãy làm như vậy bằng cách nhấn CTRL + X , Y , sau đó ENTER .

Để đảm bảo server VNC sẽ có thể sử dụng file khởi động mới này đúng cách, bạn cần làm cho nó có thể thực thi được:

  • chmod +x ~/.vnc/xstartup

Sau đó khởi động lại server VNC:

  • vncserver -localhost

Lưu ý lần này lệnh bao gồm tùy chọn -localhost , liên kết server VNC với giao diện loopback của server của bạn. Điều này sẽ khiến VNC chỉ cho phép các kết nối bắt nguồn từ server mà nó được cài đặt.

Trong bước tiếp theo, bạn sẽ cài đặt một tunnel SSH giữa máy local và server của bạn , về cơ bản đánh lừa VNC nghĩ rằng kết nối từ máy local của bạn bắt nguồn từ server của bạn. Chiến lược này sẽ bổ sung thêm một lớp bảo mật xung quanh VNC, vì user duy nhất có thể truy cập nó là những người đã có quyền truy cập SSH vào server của bạn.

Bạn sẽ thấy kết quả tương tự như sau:

Output
New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

Với cấu hình tại chỗ, bạn đã sẵn sàng kết nối với server VNC từ máy local của bạn .

Bước 3 - Kết nối an toàn với VNC Desktop

Bản thân VNC không sử dụng các giao thức an toàn khi kết nối. Để kết nối an toàn với server của bạn, bạn sẽ cài đặt một tunnel SSH và sau đó yêu cầu ứng dụng client VNC của bạn kết nối bằng tunnel đó thay vì tạo kết nối trực tiếp.

Tạo kết nối SSH trên máy tính local của bạn để chuyển tiếp an toàn đến kết nối localhost cho VNC. Bạn có thể thực hiện việc này thông qua terminal trên Linux hoặc macOS bằng lệnh ssh sau:

  • ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Đây là ý nghĩa của các tùy chọn của lệnh ssh này:

  • -L 59000 :localhost: 5901 : Lựa chọn -L chỉ định rằng cổng nhất định trên máy tính local ( 59000 ) sẽ được chuyển tiếp đến server nhất định và cổng trên server đích ( localhost:5901 , nghĩa là cổng 5901 trên server đích , được định nghĩa là your_server_ip ). Lưu ý cổng local mà bạn chỉ định hơi tùy ý; Miễn là cổng chưa bị ràng buộc với một dịch vụ khác, bạn có thể sử dụng nó làm cổng chuyển tiếp cho tunnel của bạn .
  • -C : Cờ này cho phép nén có thể giúp giảm thiểu tiêu thụ tài nguyên và tăng tốc mọi thứ.
  • -N : Tùy chọn này cho ssh biết rằng bạn không muốn thực hiện bất kỳ lệnh nào từ xa. Cài đặt này hữu ích khi bạn chỉ muốn chuyển tiếp các cổng.
  • -l sammy your_server_ip : Lựa chọn -l cho phép bạn chỉ định user bạn muốn đăng nhập khi bạn kết nối với server . Đảm bảo thay sammyyour_server_ip bằng tên của user không phải root và địa chỉ IP của server của bạn.

Lưu ý : Lệnh này cài đặt một tunnel SSH để chuyển tiếp thông tin từ cổng 5901 trên server VNC của bạn đến cổng 59000 trên máy local của bạn thông qua cổng 22 trên mỗi máy, cổng mặc định cho SSH. Giả sử bạn đã làm theo hướng dẫn Cài đặt Server Ban đầu tiên quyết cho Ubuntu 20.04 , bạn sẽ thêm luật UFW để cho phép kết nối với server của bạn qua OpenSSH.

Điều này an toàn hơn là chỉ mở firewall của server của bạn để cho phép các kết nối đến cổng 5901 , vì điều đó sẽ cho phép bất kỳ ai truy cập vào server của bạn qua VNC. Bằng cách kết nối qua tunnel SSH, bạn đang giới hạn quyền truy cập VNC đối với các máy đã có quyền truy cập SSH vào server .

Nếu bạn đang sử dụng PuTTY để kết nối với server của bạn , bạn có thể tạo tunnel SSH bằng cách nhấp chuột phải vào thanh trên cùng của cửa sổ terminal , sau đó nhấp vào tùy chọn Thay đổi Cài đặt… :

Nhấp chuột phải vào thanh trên cùng để hiển thị tùy chọn Thay đổi Cài đặt

Tìm nhánh Kết nối trong menu cây ở phía bên trái của cửa sổ Cấu hình lại PuTTY. Mở rộng nhánh SSH và nhấp vào Đường hầm . Trên màn hình Tùy chọn điều khiển chuyển tiếp cổng SSH , nhập 59000 làm Cổng nguồnlocalhost:5901 làm Đích , như sau:

Cấu hình tunnel  PuTTY SSH mẫu

Sau đó nhấp vào nút Thêm , sau đó nhấp vào nút Áp dụng để triển khai tunnel .

Khi tunnel đang chạy, hãy sử dụng ứng dụng client VNC để kết nối với localhost:59000 . Bạn sẽ được yêu cầu xác thực bằng password bạn đã đặt ở Bước 1.

Sau khi được kết nối, bạn sẽ thấy màn hình Xfce mặc định. Nó trông giống như sau :

Kết nối VNC với  server  Ubuntu 20.04 với môi trường máy tính để bàn Xfce

Bạn có thể truy cập các file trong folder chính của bạn bằng trình quản lý file hoặc từ dòng lệnh, như được thấy ở đây:

Trình quản lý file  qua kết nối VNC với Ubuntu 20.04

Nhấn CTRL+C trong terminal local của bạn để dừng tunnel SSH và quay lại dấu nhắc của bạn. Thao tác này cũng sẽ ngắt kết nối phiên VNC của bạn.

Đến đây bạn có thể cấu hình server VNC của bạn để chạy như một dịch vụ systemd.

Bước 4 - Chạy VNC như một Dịch vụ Hệ thống

Bằng cách cài đặt server VNC để chạy như một dịch vụ systemd, bạn có thể bắt đầu, dừng và khởi động lại nó nếu cần, giống như bất kỳ dịch vụ nào khác. Bạn cũng có thể sử dụng các lệnh quản lý của systemd đảm bảo rằng VNC khởi động khi server của bạn khởi động.

Đầu tiên, hãy tạo một file đơn vị mới có tên /etc/systemd/system/vncserver@.service :

  • sudo nano /etc/systemd/system/vncserver@.service

Ký hiệu @ ở cuối tên sẽ cho phép ta chuyển đối số mà bạn có thể sử dụng trong cấu hình dịch vụ. Bạn sẽ sử dụng nó để chỉ định cổng hiển thị VNC mà bạn muốn sử dụng khi quản lý dịch vụ.

Thêm các dòng sau vào file . Đảm bảo thay đổi giá trị của User , Group , WorkingDirectory và tên user trong giá trị của PIDFILE để trùng với tên user của bạn:

/etc/systemd/system/vncserver@.service
[Unit] Description=Start TightVNC server at startup After=syslog.target network.target  [Service] Type=forking User=sammy Group=sammy WorkingDirectory=/home/sammy  PIDFile=/home/sammy/.vnc/%H:%i.pid ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i ExecStop=/usr/bin/vncserver -kill :%i  [Install] WantedBy=multi-user.target 

Lệnh ExecStartPre dừng VNC nếu nó đang chạy. Lệnh ExecStart khởi động VNC và đặt độ sâu màu thành màu 24-bit với độ phân giải 1280x800. Bạn cũng có thể sửa đổi các tùy chọn khởi động này để đáp ứng nhu cầu của bạn . Ngoài ra, lưu ý lệnh ExecStart bao gồm tùy chọn -localhost .

Lưu và đóng file .

Tiếp theo, làm cho hệ thống biết file đơn vị mới:

  • sudo systemctl daemon-reload

Bật file đơn vị:

  • sudo systemctl enable vncserver@1.service

Số 1 sau dấu @ biểu thị số hiển thị mà dịch vụ sẽ xuất hiện, trong trường hợp này là mặc định :1 như đã thảo luận ở Bước 2.

Dừng version hiện tại của server VNC nếu nó vẫn đang chạy:

  • vncserver -kill :1

Sau đó, khởi động nó như bạn sẽ khởi động bất kỳ dịch vụ systemd nào khác:

  • sudo systemctl start vncserver@1

Bạn có thể xác minh nó đã bắt đầu bằng lệnh này:

  • sudo systemctl status vncserver@1

Nếu nó bắt đầu đúng , kết quả sẽ giống như sau:

Output
● vncserver@1.service - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS) Main PID: 39795 (Xtightvnc) ...

Server VNC của bạn hiện đã sẵn sàng để sử dụng khi nào server của bạn khởi động và bạn có thể quản lý nó bằng các lệnh systemctl giống như bất kỳ dịch vụ systemd nào khác.

Tuy nhiên, sẽ không có bất kỳ sự khác biệt nào về phía khách hàng. Để kết nối lại, hãy bắt đầu lại tunnel SSH của bạn:

  • ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Sau đó, tạo một kết nối mới bằng phần mềm client VNC của bạn tới localhost:59000 để kết nối với server của bạn.

Kết luận

Đến đây bạn có một server VNC được bảo mật và đang chạy trên server Ubuntu 20.04 của bạn. Như vậy, bạn có thể quản lý các file , phần mềm và cài đặt của bạn bằng giao diện đồ họa thân thiện với user và bạn có thể chạy phần mềm đồ họa như trình duyệt web từ xa.


Tags:

Các tin liên quan

Cách cài đặt và cấu hình VNC trên Ubuntu 20.04 [Quickstart]
2020-05-11
Cách cài đặt Node.js trên Ubuntu 20.04
2020-05-08
Cách cài đặt và cấu hình VNC trên Ubuntu 18.04
2020-05-07
Cách cài đặt Java với Apt trên Ubuntu 18.04
2020-05-07
Cách cài đặt Java với Apt trên Ubuntu 20.04
2020-05-07
Cách cài đặt Django và thiết lập môi trường phát triển trên Ubuntu 20.04
2020-05-07
Cách cài đặt Django và thiết lập môi trường phát triển trên Ubuntu 16.04
2020-05-06
Cách cài đặt Jenkins trên Ubuntu 18.04
2020-05-04
Cách thêm không gian swap trên Ubuntu 20.04
2020-05-04
Cách thiết lập firewall với UFW trên Ubuntu 20.04
2020-05-04