Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

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

Ngày đăng: 2 tháng 12 năm 2022

Ubuntu

Giới thiệu

Virtual Network Computing, 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àn hình đồ họa trên máy chủ từ xa. Nó giúp việc quản lý tệp, phần mềm và cài đặt trên máy chủ từ xa trở nên dễ dàng hơn đối với những người dùng chưa quen với dòng lệnh.

Trong hướng dẫn này, bạn sẽ thiết lập máy chủ VNC với TightVNC trên máy chủ Ubuntu 20.04 và kết nối với máy chủ đó một cách an toàn thông qua SSH tunnel. Sau đó, bạn sẽ sử dụng chương trình máy khách VNC trên máy cục bộ của mình để tương tác với máy chủ của mình thông qua môi trường máy tính để bàn đồ họa.

Điều kiện tiên quyết

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

  • Một máy chủ Ubuntu 20.04 với non-root administrative user và tường lửa được thiết lập cấu hình bằng UFW. Để thiết lập điều này, hãy làm theo hướng dẫn thiết lập máy chủ ban đầu của chúng tôi cho Ubuntu 20.04.
  • Một máy tính cục bộ có cài đặt máy khách VNC. Máy khách VNC mà bạn sử dụng phải hỗ trợ các kết nối qua SSH tunnel:
  1. Trên Windows, bạn có thể sử dụng TightVNC, RealVNC hoặc UltraVNC.
  2. Trên macOS, bạn có thể sử dụng chương trình Chia sẻ màn hình tích hợp sẵn hoặc có thể sử dụng ứng dụng đa nền tảng như RealVNC.
  3. 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 Desktop Environment và VNC Server

Theo mặc định, máy chủ Ubuntu 20.04 không đi kèm với môi trường máy tính để bàn đồ họa hoặc máy chủ 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 tùy chọn khi nói đến máy chủ VNC và môi trường máy tính để bàn mà bạn chọn. 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ừ kho lưu trữ chính thức của Ubuntu. Cả Xfce và TightVNC đều nổi tiếng là nhẹ và nhanh, điều này sẽ giúp đảm bảo rằng kết nối VNC sẽ mượt mà và ổn định ngay cả trên các kết nối internet chậm hơn.

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

  1. sudo apt update

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

  1. sudo apt install xfce4 xfce4-goodies

Trong khi cài đặt, bạn có thể được nhắc chọn display manager mặc định cho Xfce. Display manager 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 ứng dụng khách VNC và trong các phiên Xfce này, bạn đã đăng nhập với tư cách là non-root Ubuntu user của mình. Vì vậy, với mục đích của hướng dẫn này, lựa chọn display manager của bạn không phù hợp. Chọn một trong hai và nhấn ENTER.

Sau khi quá trình cài đặt hoàn tất, hãy cài đặt máy chủ TightVNC:

  1. sudo apt install tightvncserver

Tiếp theo, chạy lệnh vncserver để đặt mật khẩu truy cập VNC, tạo các tệp cấu hình ban đầu và khởi động phiên bản máy chủ VNC:

  1. vncserver

Bạn sẽ được nhắc nhập và xác minh mật khẩu để truy cập máy của mình 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 dài hơn 8 ký tự sẽ tự động bị cắt bớt.

Sau khi xác minh mật khẩu, bạn sẽ có tùy chọn tạo mật khẩu chỉ xem (view-only). Người dùng đăng nhập bằng mật khẩu chỉ xem sẽ không thể kiểm soát phiên bản 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ì đó cho người khác sử dụng máy chủ VNC của mình, nhưng điều này không bắt buộc.

Sau đó, quá trình tạo các tệp cấu hình mặc định cần thiết và thông tin kết nối cho máy chủ. Ngoài ra, nó khởi chạy phiên bản máy chủ 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ể khởi chạy nhiều phiên bản trên các cổng hiển thị khác, với :2 đề cập đến cổng 5902, :3 đề cập đế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 ý rằng nếu bạn muốn thay đổi mật khẩu hoặc thêm mật khẩu chỉ xem, bạn có thể thực hiện bằng lệnh vncpasswd:

  1. vncpasswd

Tại thời điểm này, máy chủ VNC đã được cài đặt và đang chạy. Bây giờ, hãy thiết lập cấu hình nó để khởi chạy Xfce và cấp cho chúng ta quyền truy cập vào máy chủ thông qua giao diện đồ họa.

Bước 2 — Thiết lập cấu hình Máy chủ VNC

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

Các lệnh mà máy chủ VNC chạy khi khởi động nằm trong tệp cấu hình có tên xstartup trong thư mục .vnc trong thư mục 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 để khởi chạy màn hình nền Xfce.

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

  1. vncserver -kill :1

Đầu ra sẽ trông như thế này, mặc dù bạn sẽ thấy một PID khác:

Output
Killing Xtightvnc process ID 17648

Trước khi bạn sửa đổi tệp xstartup, hãy sao lưu bản gốc:

  1. mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Bây giờ hãy tạo một tệp xstartup mới và mở tệp đó trong trình soạn thảo văn bản, chẳng hạn như nano:

  1. nano ~/.vnc/xstartup

Sau đó thêm các dòng sau vào tệp:

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

Dòng đầu tiên là một shebang. Trong các tệp văn bản thuần có thể thực thi được trên nền tảng nix, một shebang cho hệ thống biết trình thông dịch nào sẽ chuyển tệp đó tới để thực thi. Trong trường hợp này, bạn đang chuyển tệp 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 thi dưới dạng các lệnh theo thứ tự.

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

Lưu và đóng tệp sau khi thêm những 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, rồi ENTER.

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

  1. chmod +x ~/.vnc/xstartup

Sau đó khởi động lại máy chủ VNC:

  1. vncserver -localhost

Lưu ý rằng lần này lệnh bao gồm tùy chọn -localhost, liên kết máy chủ VNC với giao diện loopback của máy chủ 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ừ máy chủ mà nó được cài đặt.

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

Bạn sẽ thấy đầu ra 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 sẵn có, bạn đã sẵn sàng kết nối với máy chủ VNC từ máy cục bộ của mình.

Bước 3 — Kết nối An toàn với Máy tính để bàn VNC

Bản thân VNC không sử dụng các giao thức bảo mật khi kết nối. Để kết nối an toàn với máy chủ của bạn, bạn sẽ thiết lập một SSH tunnel và sau đó yêu cầu máy khách 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 cục bộ của bạn để chuyển tiếp an toàn tới kết nối máy chủ cục bộ cho VNC. Bạn có thể thực hiện việc này thông qua thiết bị đầu cuối trên Linux hoặc macOS bằng lệnh ssh sau:

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

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

  • -L 59000:localhost:5901: Công tắc -L chỉ định rằng cổng đã cho trên máy tính cục bộ (59000) sẽ được chuyển tiếp đến máy chủ đã cho và cổng trên máy chủ đích (localhost:5901, nghĩa là cổng 5901 trên máy chủ đích , được định nghĩa là your_server_ip). Lưu ý rằng cổng cục bộ mà bạn chỉ định hơi tùy ý; miễn là cổng chưa bị ràng buộc với 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 mình.
  • -C: Cờ này cho phép nén có thể giúp giảm thiểu mức 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 từ xa nào. Cài đặt này hữu ích khi bạn chỉ muốn chuyển tiếp cổng.
  • -l sammy your_server_ip: Công tắc -l cho phép bạn chỉ định người dùng mà bạn muốn đăng nhập khi bạn kết nối với máy chủ. Đảm bảo thay thế sammyyour_server_ip bằng tên của non-root user và địa chỉ IP của máy chủ của bạn.

Lưu ý: Lệnh này thiết lập một SSH tunnel chuyển tiếp thông tin từ cổng 5901 trên máy chủ VNC của bạn sang cổng 59000 trên máy cục bộ 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 điều kiện tiên quyết Hướng dẫn thiết lập máy chủ ban đầu cho Ubuntu 20.04, bạn sẽ thêm quy tắc UFW để cho phép kết nối đến máy chủ của mình qua OpenSSH.

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

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

description image

Tìm nhánh Connection trong menu ở phía bên trái của cửa sổ PuTTY Reconfiguration. Mở rộng nhánh SSH và nhấp vào Tunnels. Trên màn hình Options controlling SSH port forwarding, nhập 59000 làm Source Portlocalhost:5901 làm Destination, như sau:

description image

Sau đó nhấp vào nút Add, rồi nhấp vào nút Apply để triển khai tunnel.

Khi đường hầm đang chạy, hãy sử dụng máy khách VNC để kết nối với localhost:59000. Bạn sẽ được nhắc xác thực bằng mật khẩu bạn đã đặt ở Bước 1.

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

description image

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

description image

Nhấn CTRL+C trong thiết bị đầu cuối cục bộ của bạn để dừng SSH tunnel và quay lại lời nhắc của bạn. Điều này cũng sẽ ngắt kết nối phiên VNC của bạn.

Bây giờ bạn có thể thiết lập cấu hình máy chủ VNC của mình để chạy dưới dạng systemd service.

Bước 4 — Chạy VNC dưới dạng System Service

Bằng cách thiết lập máy chủ VNC để chạy như một systemd service, bạn có thể bắt đầu, dừng và khởi động lại nó khi 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 máy chủ của bạn khởi động.

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

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

Biểu tượng @ ở cuối tên sẽ cho phép chúng ta chuyển vào đối số mà bạn có thể sử dụng trong cấu hình dịch vụ. Bạn sẽ sử dụng cổng này để 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 tệp. Đảm bảo thay đổi giá trị của User, Group, WorkingDirectory, và username trong giá trị của PIDFILE để khớp với username 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 mình. Ngoài ra, lưu ý rằng lệnh ExecStart lại bao gồm tùy chọn -localhost.

Lưu và đóng tập tin.

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

  1. sudo systemctl daemon-reload

Kích hoạt tệp đơn vị:

  1. sudo systemctl enable vncserver@1.service

Số 1 sau ký hiệ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à số mặc định :1 như đã thảo luận trong Bước 2.

Dừng phiên bản hiện tại của máy chủ VNC nếu nó vẫn đang chạy:

  1. 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:

  1. sudo systemctl start vncserver@1

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

  1. sudo systemctl status vncserver@1

Nếu nó bắt đầu đúng cách, đầu ra sẽ như thế này:

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

Máy chủ VNC của bạn hiện đã sẵn sàng để sử dụng bất cứ khi nào máy chủ 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 SSH tunnel của bạn:

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

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

Kết luận

Bây giờ bạn đã có một máy chủ VNC được bảo mật và đang chạy trên máy chủ Ubuntu 20.04 của mình. Giờ đây, bạn sẽ có thể quản lý các tệp, phần mềm và cài đặt của mình bằng giao diện đồ họa thân thiện với người dùng và bạn sẽ có thể chạy phần mềm đồ họa như trình duyệt web từ xa.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời