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-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ổng5901
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 chossh
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 thaysammy
vàyour_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… :
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 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