วิธีใช้ VNC บน Ubuntu อย่างปลอดภัยคือให้ VNC server รับการเชื่อมต่อเฉพาะจากเครื่องตัวเอง (localhost) แล้วเข้าใช้ผ่าน SSH tunnel หรือ VPN โดยไม่เปิดพอร์ต 5900 ขึ้นไปสู่อินเทอร์เน็ต สำหรับเครื่องที่ไม่มีจอหรือเป็นเซิร์ฟเวอร์ ทางที่ตรงที่สุดคือ TigerVNC คู่กับ desktop เบา ๆ อย่าง Xfce ส่วน Ubuntu Desktop ตั้งแต่ 24.04 LTS มี Remote Desktop ในตัวที่ใช้โปรโตคอล RDP ไม่ใช่ VNC

VNC (Virtual Network Computing) คือการใช้หน้าจอของเครื่องอื่นผ่านเครือข่าย ทำงานบนโปรโตคอล RFB (Remote Framebuffer) ตาม RFC 6143 ฝั่ง server ส่งภาพหน้าจอมาให้ ฝั่งผู้ใช้ (viewer) ส่งการกดแป้นพิมพ์และเมาส์กลับไป

สรุปสั้น: ถ้าจะช่วยผู้ใช้ที่นั่งอยู่หน้าเครื่อง Ubuntu Desktop ใช้ Desktop Sharing (RDP) ที่มากับระบบ ถ้าต้องการ desktop บนเครื่องที่ไม่มีจอ ใช้ tigervnc-standalone-server ให้ฟังเฉพาะ localhost แล้วเข้าผ่าน ssh -L ถ้างานคือดูแลเซิร์ฟเวอร์ ใช้ SSH อย่างเดียวพอ ทุกกรณีให้ firewall เปิดเฉพาะ SSH และใช้ SSH key แทนรหัสผ่าน

เลือกแบบไหน: แชร์หน้าจอ GNOME, desktop เสมือน หรือไม่ใช้ desktop เลย

เลือกจากสองคำถาม คือมีคนนั่งใช้เครื่องนั้นอยู่หรือไม่ และงานนั้นต้องใช้หน้าจอกราฟิกจริงหรือเปล่า คำตอบจะชี้ไปที่หนึ่งในสามทางด้านล่าง ไม่จำเป็นต้องเป็น VNC เสมอ

สถานการณ์กับวิธีเข้าเครื่อง Ubuntu ที่เหมาะ
สถานการณ์ทางที่เหมาะเหตุผล
ช่วยผู้ใช้ที่ login อยู่บน Ubuntu Desktop 24.04 LTS ขึ้นไป ให้เห็นหน้าจอเดียวกันDesktop Sharing ของ GNOME (RDP)ผู้ใช้ต้อง login ไว้ก่อน แล้วอีกฝั่งดูหรือควบคุมหน้าจอเดียวกันได้ ตามเอกสาร Ubuntu Desktop
เข้าบัญชีของตัวเองบน Ubuntu Desktop จากที่อื่น ขณะไม่มีใครใช้เครื่องRemote Login ของ GNOME (RDP)ต้อง logout จากเครื่องก่อน และผู้ที่เชื่อมต่อได้ควบคุมเต็ม ตามเอกสารเดียวกัน
เครื่องไม่มีจอ เป็นเซิร์ฟเวอร์หรือ VM ที่ต้องเปิดโปรแกรมกราฟิกเป็นครั้งคราวTigerVNC (tigervnc-standalone-server) กับ Xfce ฟังเฉพาะ localhost แล้วเข้าผ่าน SSH tunnelสร้าง X display เสมือนแยกจากหน้าจอจริง ไม่ต้องลง GNOME ทั้งชุด
งานดูแลเซิร์ฟเวอร์ประจำ เช่น ลง patch อ่าน log แก้ configSSH อย่างเดียว ไม่ลง desktopไม่มีแพ็กเกจ desktop และบริการ VNC เพิ่มเข้ามาให้ต้องลง patch และเฝ้าดู
พนักงานหลายคนเข้าเครื่องในองค์กรจากนอกสำนักงานVPN ขององค์กรก่อน แล้วจึงใช้ RDP หรือ VNC ในเครือข่ายภายในเอกสาร Ubuntu แนะนำ VPN แทนการ forward พอร์ตออกอินเทอร์เน็ต

TigerVNC มีอีกแพ็กเกจคือ tigervnc-scraping-server ซึ่งให้คำสั่ง x0tigervncserver ตาม man page x0tigervncserver(1) ตัวนี้ไม่สร้าง display ใหม่ แต่แชร์ display ของ X server ที่เปิดอยู่แล้ว จึงใช้กับ desktop ที่รันบน Xorg

ส่วน GNOME นั้น ประกาศใน Ubuntu Discourse (10 มิถุนายน 2025) ระบุว่าตั้งแต่ Ubuntu 25.10 หน้า login จะไม่มีตัวเลือก "Ubuntu on Xorg" แล้ว โดย Xorg เองและ desktop อื่นที่ไม่ใช่ GNOME ยังใช้ Xorg ได้ ถ้าต้องการแชร์หน้าจอ GNOME ที่มีคนใช้อยู่ ทางที่ Ubuntu ทำเอกสารไว้คือ RDP

คู่มือ vino หรือ vnc4server แบบเก่าเปลี่ยนไปอย่างไร

แพ็กเกจและฟีเจอร์ที่คู่มือเหล่านั้นอ้างถึงเปลี่ยนไปแล้ว vnc4server ไม่มีใน Ubuntu รุ่นใดที่ยังอยู่ในคลังแพ็กเกจ vino ยังติดตั้งได้บน 22.04 และ 24.04 แต่ไม่มีใน 26.04 และการแชร์หน้าจอในตัวของ Ubuntu เปลี่ยนจาก VNC เป็น RDP ตารางนี้จับคู่สิ่งที่คู่มือเก่าบอกให้ทำกับสิ่งที่ใช้แทนได้

สถานะ ณ 2026-11-11: ของในคู่มือ VNC รุ่นเก่ากับสิ่งที่ใช้แทน
ในคู่มือเก่าสถานะใช้อะไรแทน
vnc4serverค้นใน packages.ubuntu.com ไม่พบในรุ่นใดtigervnc-standalone-server
vino (VNC server ของ GNOME)มีใน universe (ส่วนหนึ่งของคลังแพ็กเกจ Ubuntu) ของ 22.04 และ 24.04 ไม่มีใน 26.04 (packages.ubuntu.com) และโครงการต้นทางใน GNOME GitLabถูก archive เป็นแบบอ่านอย่างเดียวDesktop Sharing ของ GNOME (RDP) หรือ TigerVNC
เปิด VNC ในหน้า Sharing ของ GNOMETest plan ของทีม Ubuntu Desktop ระบุว่าฟีเจอร์ VNC ถูกถอดออกตั้งแต่ Ubuntu 22.10RDP ในหน้าเดียวกัน
คำสั่ง vncserver และ vncpasswdแพ็กเกจติดตั้งไฟล์จริงเป็น tigervncserver และ tigervncpasswd (อยู่ใน tigervnc-tools) ส่วนชื่อ vncserver และ vncpasswd เป็น alternative ที่ชี้ไปยังไฟล์เหล่านี้ (ตามสคริปต์ติดตั้ง tigervnc-standalone-server และ tigervnc-tools ของ Debian)ใช้ได้ทั้งสองชื่อ บทความนี้ใช้ชื่อที่ขึ้นต้นด้วย tiger
เขียนไฟล์ vncserver@.service เองแพ็กเกจของ Ubuntu มี unit tigervncserver@.service และไฟล์ /etc/tigervnc/vncserver.users มาให้แล้ว (รายการไฟล์ของแพ็กเกจ)ใช้ unit ที่มากับแพ็กเกจ
เพิ่ม -localhost no แล้วเปิด ufw allow 5901ยกเลิกค่าตั้งต้นที่ฟังเฉพาะ localhost และเปิด VNC ให้เครือข่ายเห็นโดยตรงคง localhost ไว้ แล้วเข้าผ่าน SSH tunnel
tightvncserverยังมีใน universe ถึง 26.04 (packages.ubuntu.com)ใช้ได้ ดูด้านล่าง

tightvncserver ยังใช้ได้ แต่บทความนี้ใช้ TigerVNC เพราะเอกสารของแพ็กเกจใน Ubuntu ระบุ systemd unit การฟังเฉพาะ localhost และ security type (วิธียืนยันตัวตนและเข้ารหัสของ VNC) แบบ TLS/X509 ไว้ครบ

Remote Desktop ที่มากับ Ubuntu Desktop ใช้ RDP ไม่ใช่ VNC

บน Ubuntu Desktop 24.04 LTS ขึ้นไปที่ใช้ GNOME การแชร์หน้าจอในตัวทำงานผ่าน RDP (Remote Desktop Protocol) ตามเอกสาร Share your desktop remotely ซึ่งไม่กล่าวถึง VNC เลย ใครที่ทำตามคู่มือเก่าแล้วหาเมนู VNC ไม่เจอ สาเหตุอยู่ตรงนี้

เอกสารเดียวกันแบ่งเป็นสองโหมด:

  • Desktop Sharing: อีกคนดูหรือควบคุมหน้าจอของคุณขณะที่คุณ login อยู่ เหมาะกับการช่วยเหลือผู้ใช้
  • Remote Login: เข้าบัญชีของคุณจากที่อื่น ต้อง logout จากเครื่องก่อน และผู้เชื่อมต่อได้ควบคุมเต็ม

ทั้งสองโหมดใช้พอร์ต TCP 3389 เป็นค่าตั้งต้น ถ้าเปิดพร้อมกัน Desktop Sharing จะย้ายไป 3390 รหัสผ่านที่ตั้งในหน้านี้แยกจากรหัสผ่านบัญชีผู้ใช้และใช้ได้กับการเชื่อมต่อระยะไกลเท่านั้น เอกสารยังเตือนว่าการ forward พอร์ตออกอินเทอร์เน็ตเปิดเครื่องให้ทั้งโลกเห็น และแนะนำ VPN เมื่อต้องให้กลุ่มคนเฉพาะเข้าใช้

ฝั่งเครื่องที่เชื่อมต่อเข้าไป เอกสาร Access a remote desktop แนะนำ Remmina ซึ่งรองรับทั้ง RDP และ VNC ให้เลือก RDP เมื่อต่อไปยัง Ubuntu 24.04 LTS ขึ้นไปหรือ Windows และเลือก VNC เมื่อต่อไปยังรุ่นก่อนหน้าอย่าง 22.04 LTS หรือ macOS

การไม่มี VNC เป็นการตัดสินใจของผู้ทำแพ็กเกจ ไม่ใช่ข้อจำกัดของ GNOME README ของ gnome-remote-desktop ระบุว่ามีทั้ง backend RDP และ VNC แต่ changelog ของแพ็กเกจ รุ่น 43.0-1 (21 กันยายน 2022) ระบุว่าให้เฉพาะ RDP เพราะประสิทธิภาพและความเป็นส่วนตัวดีกว่าและมี client รองรับมาก

ทำไมไม่ควรเปิดพอร์ต VNC ออกอินเทอร์เน็ต?

เพราะโปรโตคอล VNC เองป้องกันได้น้อย การยืนยันตัวตนแบบรหัสผ่านอ่อน และข้อมูลที่ส่งไม่ถูกเข้ารหัสในแบบดั้งเดิม การป้องกันจริงจึงต้องมาจากช่องทางที่ VNC วิ่งผ่าน เช่น SSH tunnel หรือ VPN ไม่ใช่รหัสผ่าน VNC

  • รหัสผ่านใช้ได้แค่ 8 ตัวอักษร: RFC 6143 หัวข้อ 7.2.2 อธิบายว่า VNC Authentication เข้ารหัส challenge ด้วย DES โดยใช้รหัสผ่านเป็นกุญแจ ซึ่งถูกตัดเหลือ 8 ตัวอักษร และระบุตรง ๆ ว่าวิธีนี้อ่อนทางการเข้ารหัส tigervncpasswd(1) ก็ระบุว่ามีผลเฉพาะ 8 ตัวแรก และต้องยาวอย่างน้อย 6 ตัว
  • ไม่ป้องกันการดักดูหรือแก้ข้อมูล: RFC 6143 หัวข้อ 9 ระบุว่าโปรโตคอลไม่มีความปลอดภัยอื่นนอกจากการตรวจรหัสผ่านข้างต้น ไม่ป้องกันการดักดูหรือแก้ไขข้อมูลระหว่างทาง และเสนอให้ส่งผ่านช่องทางที่ปลอดภัยอย่าง IPsec หรือ SSH
  • พอร์ตเป็นที่รู้จัก: ตาม RFC เดียวกัน server หมายเลข N มักฟังที่พอร์ต 5900+N และ IANA จัดพอร์ต 5900 ให้ RFB

หน่วยงานรัฐของสหรัฐฯ ก็เตือนเรื่องนี้ CISA advisory AA25-343A (เผยแพร่ครั้งแรก 9 ธันวาคม 2025) ซึ่งเขียนในบริบทระบบควบคุมอุตสาหกรรมและโครงสร้างพื้นฐานสำคัญ ระบุว่าผู้โจมตีค้นหาบริการ VNC ที่พอร์ต 5900 หรือ 5901–5910 แล้วสุ่มรหัสผ่านค่าตั้งต้นหรือรหัสที่อ่อน คำแนะนำในเอกสารคือลดการเปิดสู่อินเทอร์เน็ต ให้พิจารณาใช้ firewall หรือ VPN และพิจารณาปิดการเข้าถึงจากภายนอกไว้เป็นค่าตั้งต้น เปิดเฉพาะช่วงเวลาที่ต้องใช้

ติดตั้ง VNC server (TigerVNC) กับ Xfce บน Ubuntu

ติดตั้งสามแพ็กเกจ ตั้งรหัสผ่าน VNC ด้วยบัญชีผู้ใช้ปกติ แล้วเปิด server ที่ display :1 (หน้าจอเสมือนหมายเลข 1) โดยให้ฟังเฉพาะ localhost คำสั่งด้านล่างตรงกับ man page และรายการไฟล์ของแพ็กเกจทั้งใน 24.04 และ 26.04 ส่วนตำแหน่งไฟล์ที่ต่างกันอยู่ในตารางถัดไป

  1. ติดตั้งแพ็กเกจ: tigervnc-standalone-server (server), tigervnc-tools (มี tigervncpasswd) และ xfce4 (desktop) ทั้งหมดอยู่ใน component universe ของคลังแพ็กเกจ Ubuntu ตาม packages.ubuntu.com
    sudo apt install tigervnc-standalone-server \
      tigervnc-tools xfce4
  2. ตั้งรหัสผ่าน VNC: รันด้วยบัญชีที่จะใช้ desktop ไม่ใช่ root เพราะเอกสาร HOWTO ของ TigerVNC เตือนว่าการรัน server ด้วย root ไม่ปลอดภัย ไฟล์รหัสผ่านจะถูกเก็บในตำแหน่งตั้งต้นของรุ่นนั้น
    tigervncpasswd
  3. เปิด server ที่ display :1: ระบุ session ให้ตรงกับไฟล์ใน /usr/share/xsessions (แพ็กเกจ xfce4-session มีไฟล์ xfce.desktop) ตาม tigervncserver(1) พอร์ตตั้งต้นคือ 5900 บวกเลข display จึงเป็น 5901 และขนาดหน้าจอตั้งต้นคือ 1920x1200
    tigervncserver :1 -localhost yes -- xfce
  4. ตรวจว่าฟังเฉพาะ localhost: ss(8) แสดง TCP socket ที่กำลังฟังพร้อม process ที่อยู่ของพอร์ต 5901 ต้องเป็น 127.0.0.1 หรือ [::1] ถ้าเห็น 0.0.0.0, [::] หรือ * แปลว่าเปิดให้ทุก interface (0.0.0.0 และ :: คือ address แบบ any ของ IPv4 และ IPv6 ตาม ip(7) และ ipv6(7))
    sudo ss -tlnp
  5. ดูและปิด session: tigervncserver -list แสดง server ที่เปิดอยู่ (รายการค้างจะมีคำว่า stale) และ tigervncserver -kill :1 ปิด display :1

ตาม tigervncserver(1) ถ้าไม่ระบุ -localhost server จะฟังเฉพาะ localhost เว้นแต่รายการ security type มีแบบ TLS หรือ X509 (และไม่มีแบบ None) ซึ่งจะทำให้ฟังทุก address ของเครื่อง เราใส่ -localhost yes ไว้ชัด ๆ เพื่อไม่ต้องพึ่งเงื่อนไขนี้ ส่วนคู่มือที่ใส่ -localhost no จะได้ security type ตั้งต้นเป็น VncAuth,TLSVnc และ server ที่ทุกเครื่องในเครือข่ายเชื่อมต่อได้

สถานะ ณ 2026-11-11: ตำแหน่งไฟล์ของ TigerVNC ใน Ubuntu แต่ละรุ่น

ค่าที่ต่างกันระหว่าง Ubuntu 24.04 LTS และ 26.04 LTS ตาม man page และรายการไฟล์ของแพ็กเกจ (unit ชื่อ tigervncserver@.service ทั้งสองรุ่น)
เรื่อง24.04 LTS (noble)26.04 LTS (resolute)
รุ่นที่ออกและสิ้นสุด standard security maintenance (Ubuntu release cycle)เม.ย. 2024 ถึง พ.ค. 2029เม.ย. 2026 ถึง พ.ค. 2031
รุ่น TigerVNC ในคลัง (packages.ubuntu.com)1.13.11.15.0
ไฟล์รหัสผ่าน (noble · resolute)~/.vnc/passwd~/.config/tigervnc/passwd
ไฟล์ตั้งค่าของผู้ใช้แบบ key=value (noble · resolute)~/.vnc/config~/.config/tigervnc/config
Log~/.vnc/~/.config/tigervnc/ เมื่อเปิดด้วย tigervncserver และ ~/.local/state/tigervnc/ เมื่อเปิดผ่าน service
ไดเรกทอรีของ systemd unit (noble · resolute)/lib/systemd/system//usr/lib/systemd/system/

ให้ VNC เปิดเองเมื่อเครื่องบูตด้วย systemd

แพ็กเกจของ Ubuntu มี unit ชื่อ tigervncserver@.service ไม่ใช่ vncserver@.service แบบในเอกสารต้นทาง เพราะ patch ของ Debian เติมคำว่า tiger นำหน้าชื่อ unit และสคริปต์ ขั้นตอนตามคำอธิบายในไฟล์ unit มีดังนี้

  1. จับคู่ display กับผู้ใช้ ใน /etc/tigervnc/vncserver.users รูปแบบคือ <display>=<username> ตามไฟล์ตัวอย่างของ TigerVNC
    :1=alice
  2. ตั้ง session และ localhost ในไฟล์ตั้งค่าแบบ key=value ของผู้ใช้ตามตารางข้างบน ตัวเลือกที่ไม่มีค่าให้เขียนเป็นคำเดียว ถ้ามีไฟล์แบบ Perl (tigervnc.conf หรือ config.pl) อยู่แล้ว ไฟล์นี้จะไม่ถูกอ่าน
    session=xfce
    localhost
  3. เปิด service: ถ้ายังมี server ที่เปิดด้วยมือบน :1 อยู่ ให้ปิดก่อนด้วย tigervncserver -kill :1
    sudo systemctl enable tigervncserver@:1.service
    sudo systemctl start tigervncserver@:1.service
  4. ตรวจด้วย sudo ss -tlnp อีกครั้งว่าพอร์ต 5901 ฟังเฉพาะ 127.0.0.1 หรือ [::1]

ถ้าผู้ดูแลต้องการบังคับค่าให้ทุกคนบนเครื่อง ไฟล์ /etc/tigervnc/vncserver-config-mandatory มีผลเหนือค่าของผู้ใช้ ส่วน /etc/tigervnc/vncserver-config-defaults เป็นค่าตั้งต้นที่ผู้ใช้แก้ทับได้ ตาม tigervncsession(8) ทั้งสองไฟล์ใช้ไวยากรณ์ Perl ให้ดูตัวอย่างในไฟล์ที่แพ็กเกจติดตั้งมาก่อนแก้

เชื่อมต่อ VNC ผ่าน SSH tunnel

บนเครื่องของผู้ใช้ เปิด SSH tunnel ที่ส่งพอร์ต 5901 ของเครื่องตัวเองไปยัง localhost:5901 ของเซิร์ฟเวอร์ แล้วให้ VNC viewer ต่อที่เครื่องตัวเอง ข้อมูลทั้งหมดจึงวิ่งในช่อง SSH ที่เข้ารหัส และ firewall ของเซิร์ฟเวอร์ไม่ต้องเปิดพอร์ต VNC เลย

ssh -N -L localhost:5901:localhost:5901 \
  alice@server.example

ตาม ssh(1) ตัวเลือก -L ส่งพอร์ตบนเครื่องผู้ใช้ผ่านช่องทางที่ปลอดภัยไปยัง host และพอร์ตปลายทาง การระบุ bind address (address ที่พอร์ตรับการเชื่อมต่อ) เป็น localhost ทำให้พอร์ตนั้นใช้ได้จากเครื่องผู้ใช้เท่านั้น ส่วน -N คือไม่รันคำสั่งบนเซิร์ฟเวอร์ ใช้เพื่อ forward พอร์ตอย่างเดียว ถ้าพอร์ต 5901 บนเครื่องผู้ใช้ไม่ว่าง เปลี่ยนเลขแรกเป็นพอร์ตอื่นได้ ส่วนปลายทางยังเป็น localhost:5901 ของเซิร์ฟเวอร์

จากนั้นเปิด viewer ไปที่ localhost::5901 (สองโคลอนตามด้วยเลขพอร์ต) หรือ localhost:1 (โคลอนเดียวตามด้วยเลข display) ตาม xtigervncviewer(1) ถ้าใช้ viewer ของ TigerVNC (แพ็กเกจ tigervnc-viewer) ตัวเลือก -via สร้าง tunnel ผ่าน SSH ให้เองก่อนเชื่อมต่อ

xtigervncviewer -via alice@server.example \
  localhost:1

ถ้าองค์กรมี VPN อยู่แล้ว การให้ผู้ใช้เข้า VPN ก่อนแล้วจึงเปิด SSH tunnel ไปยังเซิร์ฟเวอร์ภายในก็ได้ผลเดียวกัน และช่วยให้ SSH ของเซิร์ฟเวอร์ไม่ต้องเปิดสู่อินเทอร์เน็ต

ตั้ง ufw ให้เปิดเฉพาะ SSH และใช้ SSH key

เมื่อเข้า VNC ผ่าน SSH tunnel แล้ว firewall ของเซิร์ฟเวอร์ต้องเปิดเฉพาะพอร์ต SSH ไม่ต้องมีกฎสำหรับ 5901 เลย และความปลอดภัยของทั้งระบบจะขึ้นกับ SSH จึงควรใช้ key แทนรหัสผ่าน

ตามเอกสาร Firewalls ของ Ubuntu Server ufw ปิดอยู่เมื่อติดตั้งเสร็จ และตาม ufw(8) ใช้ default กำหนดนโยบายของขาเข้า ตัวอย่างนี้อนุญาต SSH เฉพาะจากวงเครือข่ายของผู้ดูแล (192.0.2.0/24 เป็นช่วง address ตัวอย่าง ให้เปลี่ยนเป็นของคุณ) แล้วจึงเปิด firewall

sudo ufw default deny incoming
sudo ufw allow proto tcp from 192.0.2.0/24 \
  to any port 22
sudo ufw enable
sudo ufw status verbose

ใส่กฎ SSH ก่อน ufw enable เสมอเมื่อทำผ่าน SSH ufw(8) ระบุว่าจะถามยืนยันเมื่อเปิด firewall ระหว่าง session SSH ถ้า SSH ต้องเปิดรับจากทุกที่ ใช้ sudo ufw limit ssh/tcp ซึ่งปฏิเสธ IP ที่เริ่มเชื่อมต่อตั้งแต่ 6 ครั้งภายใน 30 วินาที

ฝั่ง SSH ทำตามเอกสาร OpenSSH server ของ Ubuntu: สร้าง key บนเครื่องผู้ใช้แล้วคัดลอก public key ไปที่เซิร์ฟเวอร์

ssh-keygen -t ed25519
ssh-copy-id alice@server.example

เมื่อ login ด้วย key ได้แล้ว ปิดการ login ด้วยรหัสผ่านตามลำดับนี้

  1. เพิ่ม PasswordAuthentication no ในไฟล์ .conf ใต้ /etc/ssh/sshd_config.d/ เช่น 10-no-password.conf เพราะ sshd_config ของ Ubuntu include เฉพาะ *.conf ตาม sshd_config(5) ค่าตั้งต้นของตัวเลือกนี้คือ yes
  2. ตรวจว่าไม่มีไฟล์อื่นตั้งค่านี้ไว้ก่อน เพราะเอกสารของ Ubuntu ระบุว่า OpenSSH ใช้ค่าแรกที่พบสำหรับ directive ส่วนใหญ่
  3. ตรวจไวยากรณ์ด้วย sudo sshd -t
  4. restart ด้วย sudo systemctl restart ssh.service โดยเปิด session เดิมค้างไว้จนกว่าจะทดสอบ login ใหม่ผ่าน

ถ้าต้องการจำกัดปลายทางที่ forward ได้ sshd_config มีตัวเลือก PermitOpen สำหรับเรื่องนี้

นโยบาย remote access ระดับองค์กร เช่น ไม่เปิด RDP สู่อินเทอร์เน็ตและใช้ VPN กับ MFA อธิบายไว้แล้วในบทความเรื่อง ransomware หัวข้อ "ป้องกัน ransomware ต้องเริ่มจากอะไร?"

ใช้ TLS หรือ X509 ของ TigerVNC แทน SSH tunnel ได้ไหม?

ทำได้ แต่ server จะต้องรับการเชื่อมต่อจากเครือข่ายโดยตรง ซึ่งเพิ่มพอร์ตที่ต้องดูแลใน firewall สำหรับทีมที่ใช้ SSH ดูแลเครื่องอยู่แล้ว SSH tunnel ยังง่ายกว่า เพราะใช้พอร์ตเดียว ใช้ key เดิม และไม่ต้องจัดการ certificate เพิ่ม

ตาม Xtigervnc(1) TigerVNC รองรับ security type หลายแบบ ได้แก่ None, VncAuth, Plain, TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc, X509Plain และกลุ่ม RA2 (RSA-AES) แบบ X509 ใช้ certificate และ key ในรูปแบบ PEM ที่ระบุด้วย -X509Cert และ -X509Key ถ้าไม่ระบุ tigervncserver(1) บอกว่าสคริปต์จะสร้าง self-signed certificate ให้และไม่เขียนทับเมื่อสร้างแล้ว ฝั่ง viewer ตรวจ certificate ด้วยตัวเลือก -X509CA

ถ้าเลือกทางนี้ อย่าลืมเงื่อนไขในหัวข้อติดตั้ง: server จะฟังทุก address จึงต้องจำกัดต้นทางใน firewall และควรให้ผ่าน VPN ตามคำแนะนำของ Ubuntu และ CISA ข้างต้น

ปัญหาที่เอกสาร TigerVNC และ Ubuntu ระบุไว้

ปัญหาที่เอกสาร TigerVNC ระบุตรงที่สุดคือเปิด server ผ่าน service ให้ผู้ใช้ที่ login หน้าจอกราฟิกอยู่แล้วไม่ได้ และไม่ได้ระบุ session ทำให้ desktop ไม่ขึ้น ก่อนแก้ให้ดู log ซึ่งตำแหน่งของแต่ละรุ่นอยู่ในตารางสถานะข้างบน รายการที่เอกสารระบุไว้มีดังนี้

  • เปิดผ่าน service (tigervncserver@) ให้ผู้ใช้ที่ login หน้าจอกราฟิกอยู่ไม่ได้: HOWTO ของ TigerVNC ซึ่งอธิบายการเปิดผ่าน systemd ระบุข้อนี้ไว้ ให้ logout จากเครื่องก่อน ใช้บัญชีแยกสำหรับ VNC หรือถ้าต้องการหน้าจอเดียวกับคนที่นั่งอยู่ ให้ใช้ Desktop Sharing แทน
  • ไม่ได้ระบุ session: HOWTO ระบุว่า TigerVNC จะใช้ session แรกที่หาเจอ ซึ่งอาจใช้ได้หรือไม่ได้ ให้ระบุ session=xfce หรือ -- xfce ให้ตรงกับชื่อไฟล์ใน /usr/share/xsessions
  • เปลี่ยนรหัสผ่านแล้วรหัสเก่ายังเข้าได้: ถ้าต่างกันเฉพาะหลังตัวที่ 8 ระบบถือว่าเป็นรหัสเดียวกัน เพราะมีผลเฉพาะ 8 ตัวแรกตาม tigervncpasswd(1)
  • หน้าจอขนาดไม่พอดี: ค่าตั้งต้นคือ 1920x1200 เปลี่ยนด้วย -geometry หรือบรรทัด geometry= ในไฟล์ตั้งค่า
  • รายการ server ค้างหลังเครื่องดับ: tigervncserver -list จะทำเครื่องหมาย stale ไว้ และมีตัวเลือก -cleanstale สำหรับล้างรายการเหล่านี้

เมื่อไร VNC ไม่ใช่เครื่องมือที่ควรใช้

VNC เหมาะกับงานที่ต้องใช้โปรแกรมกราฟิกบนเครื่องที่ไม่มีจอเป็นครั้งคราว ถ้างานไม่ได้ต้องการหน้าจอ หรือมีผู้ใช้จำนวนมาก มีทางที่ดูแลง่ายกว่า ดังที่สรุปไว้ในตารางเลือกวิธีด้านบน

สำหรับงาน support หน้าจอผู้ใช้เป็นประจำ เครื่องมือ remote support ที่องค์กรเลือกใช้และมีบันทึกการเข้าถึงจะตรวจสอบย้อนหลังได้ง่ายกว่าการเปิด VNC เป็นรายเครื่อง

ถ้าระบบเก่าที่ต้องใช้หน้าจอกราฟิกยังแก้หรือลง patch ไม่ได้ แนวทางแยกเครือข่ายและมาตรการชดเชยอยู่ในบทความ ระบบเก่าหมด support แต่ยังต้องใช้ต่อ: ลดความเสี่ยงอย่างไรระหว่างรอ modernize

UNIXDEV ช่วยดูแลเรื่องนี้ได้แค่ไหน

UNIXDEV ดูแลเซิร์ฟเวอร์ Linux ทั้ง Ubuntu, RHEL และ Debian ภายใต้บริการ Linux งานที่เกี่ยวกับบทความนี้คือสำรวจบริการและพอร์ตที่เปิดอยู่บนแต่ละเครื่อง วาง hardening baseline (ชุดค่าความปลอดภัยพื้นฐานของเครื่อง) เช่น การตั้ง SSH และ firewall ลง patch เป็นรอบ และส่งมอบบันทึกการตั้งค่ากับ runbook ให้ทีมของคุณ หรือให้เราดูแลต่อผ่าน DevOps · SRE · Managed ตามขอบเขตในสัญญา MA เราไม่ได้ขายซอฟต์แวร์ remote desktop หรือบริการ helpdesk

แหล่งอ้างอิงและอ่านต่อ

ตรวจข้อมูล ณ วันที่ 2026-11-11

วิธีจัดทำ: อ้างอิงจากเอกสารต้นทางข้างต้น ตรวจโดยทีม UNIXDEV

คำถามที่พบบ่อย

ให้หลายคนใช้ VNC บนเครื่องเดียวกันพร้อมกันได้ไหม?

ได้ ถ้าใช้ tigervnc-standalone-server แต่ละคนได้ display เสมือนของตัวเอง กำหนดในไฟล์ /etc/tigervnc/vncserver.users บรรทัดละหนึ่งคน เช่น :1=alice และ :2=bob แล้วเปิด service แยกตามเลข display แต่ละ display ฟังพอร์ต 5900 บวกเลข display (5901, 5902) ผู้ใช้แต่ละคนจึงเปิด SSH tunnel ไปพอร์ตของตัวเอง

ต้องลง GNOME บนเครื่องที่ใช้ TigerVNC ไหม?

ไม่ต้อง TigerVNC ให้เลือก session จากไฟล์ใน /usr/share/xsessions บทความนี้ใช้ Xfce ซึ่งแพ็กเกจ xfce4 ใน Ubuntu อธิบายว่าเป็น desktop แบบ lightweight ส่วน GNOME ตั้งแต่ Ubuntu 25.10 ทำงานบน Wayland เท่านั้น จึงไม่มี session แบบ X ให้ TigerVNC เปิด ถ้าต้องการ desktop ใน TigerVNC ให้ใช้ desktop ที่ยังรองรับ Xorg เช่น Xfce และจำไว้ว่าการเปิดผ่าน service (tigervncserver@) ใช้กับผู้ใช้ที่ login หน้าจอกราฟิกอยู่แล้วไม่ได้

อัปเกรดจาก 22.04 เป็น 24.04 แล้วเชื่อมต่อ VNC เข้าเครื่องไม่ได้ ทำไม?

ตาม test plan ของทีม Ubuntu Desktop ฟีเจอร์แชร์หน้าจอแบบ VNC ในตัวถูกถอดออกตั้งแต่ 22.10 หลังอัปเกรดให้เปิด Desktop Sharing แบบ RDP ใน Settings แทน และเปลี่ยนฝั่ง Remmina เป็นโปรโตคอล RDP ตั้งรหัสผ่านใหม่ในหน้านั้นเพราะแยกจากรหัสผ่านบัญชี

เลิกใช้ VNC แล้วควรปิดอะไรบ้าง?

หยุดและยกเลิก service ด้วย sudo systemctl stop tigervncserver@:1.service และ sudo systemctl disable tigervncserver@:1.service ลบบรรทัดของผู้ใช้ใน /etc/tigervnc/vncserver.users ถ้าเปิดด้วยมือให้ใช้ tigervncserver -kill :1 แล้วตรวจด้วย ss -tlnp ว่าพอร์ต 5901 ไม่มีอะไรฟังอยู่ คำแนะนำของ CISA สำหรับระบบ OT ก็ให้พิจารณาปิดการเข้าถึงจากภายนอกไว้เป็นค่าตั้งต้นและเปิดเฉพาะช่วงเวลาที่ต้องใช้