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:
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:
OutputYou 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.
OutputWould 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:
OutputKilling 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 :
#!/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:
OutputNew '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-Lchỉ đị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ổng5901trê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 chosshbiế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-lcho 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 thaysammyvàyour_server_ipbằ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… :
 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ồn và localhost:5901 làm Đích , như sau: 
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 :
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:
 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:
[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.
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 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 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 16.04
2020-05-06
Cách thêm không gian swap trên Ubuntu 20.04
2020-05-04
Cách cài đặt Jenkins trên Ubuntu 18.04
2020-05-04
Cách thiết lập firewall với UFW trên Ubuntu 20.04
2020-05-04
 

