< Nick Untitled

#37 - ติดตั้ง Apache Guacamole สำหรับการเข้าถึงคอมพิวเตอร์จากระยะไกล

Apache Guacamole เป็นแอพ Remote Desktop ระยะไกลที่ไม่ต้องใช้ Client ที่อนุญาตให้ผู้ใช้สามารถเข้าถึงและควบคุมคอมพิวเตอร์จากระยะไกลผ่านหน้าเว็บเบราวเซอร์ โดยผ่านโปรโตคอลมาตรฐานอย่าง SSH, VNC และ RDP [1] ที่ไม่ต้องติดตั้ง Plugin หรือแอพใด ๆ ลงบนคอมพิวเตอร์ของ Client เลย ด้วยการใช้เทคโนโลยีเว็บอย่าง HTML5 และ JavaScript

เมื่อทราบชื่อของแอพนี้แล้ว ทำไมเราต้องใช้ล่ะ?

ทำไมต้องใช้ Apache Guacamole

โดยปกติเวลาที่เครื่อง Client จะเข้าถึงยังคอมพิวเตอร์ที่ต้องการจากระยะไกลนั้น เราจำเป็นต้องลงแอพ Remote Desktop ก่อนที่จะใช้งาน อย่างไรก็ดีมันติดปัญหาตรงนี้

  • คอมนั้นลงแอพไม่ได้ เนื่องมาจากใช้ระบบปฏิบัติการที่รันผ่านเว็บเบราวเซอร์แบบ Chrome OS หรือคอมนั้นไม่ได้รับอนุญาตให้ลงแอพเพิ่ม
  • ทางองค์กรนั้น ๆ ไม่ได้รับอนุญาตให้ใช้งานพอร์ตอื่นนอกจาก HTTP กับ HTTPS
  • เจอ Firewall

จุดนี้เป็นที่มาของแอพอย่าง Apache Guacamole ที่มีหลักการอยู่ที่สามารถใช้งานรีโหมดจากระยะไกลได้ทั่วโลก โดยที่ไม่ต้องลงแอพ Client แต่ใช้งานผ่านหน้าเว็บเบราวเซอร์เท่านั้น จุดนี้อนุญาตให้ใช้งานจากอุปกรณ์อะไรก็ได้ ไม่จำกัดว่าจะต้องใช้งานผ่านคอมพิวเตอร์เท่านั้น เรายังใช้โทรศัพท์หรือแท็บเล็ตก็รีโหมดเข้ามายังคอมพิวเตอร์จากระยะไกลได้อีกด้วย

นอกจากนี้ตัว Apache Guacamole ยังใช้งานผ่านโปรโตคอล HTTP หรือ HTTPS เท่านั้น จุดนี้ทำให้เราสามารถใช้งานได้เลยโดยที่ไม่ขัดต่อ Policy ของที่ทำงานนั้น ๆ แถมยังไม่เจอปัญหาเรื่อง Firewall อีกด้วย (ถ้าไม่ได้ไปบล็อกโปรโตคอล HTTP กับ HTTPS)

ต่อมาเรามากล่าวถึงโครงสร้างของแอพนี้เสียก่อน

โครงสร้างของ Apache Guacamole

ตัว Apache Guacamole มีโครงสร้างแบบง่าย ๆ ที่ประกอบไปด้วย

  1. เว็บเบราวเซอร์ที่รองรับ HTML5
  2. Guacamole Server ทีป่ระกอบไปด้วยตัว Guacamole ที่ทำหน้าที่เป็นเว็บเซิร์ฟเวอร์ที่ใช้งานผ่าน Apache Tomcat ที่ทำหน้าที่ติดต่อกับตัวคอมพิวเตอร์ที่เราจะรีโหมดโดยผ่าน SSH, VNC, RDP และโปรโตคอลอื่นด้วยตัวกลางอย่าง guacd
  3. คอมพิวเตอร์เป้าหมายที่เราต้องการให้รีโหมด

เมื่อทราบโครงสร้างนี้แล้ว ต่อมาเราจะมาติดตั้ง Apache Guacamole

การติดตั้ง

การติดตั้ง Apache Guacamole สามารถติดตั้งได้สองวิธี ได้แก่

  • ติดตั้งลงไปในคอมพิวเตอร์นั้น ๆ เลย - วิธีนี้เราจำเป็นต้องติดตั้ง Apache Tomcat และติดตั้งเครื่องมือที่จำเป็น ร่วมกับต้องคอมไฟล์ Apache Guacamole ซึ่งยุ่งยาก
  • ติดตั้งโดยใช้งานผ่าน Docker - วิธีนี้ทำง่ายกว่า แถมไม่จำเป็นต้องไปนั่งติดตั้งเครื่องมือและคอมไพล์ให้ยุ่งยาก แถม Apache Guacamole ยังมี Container มาให้แบบ Official มาให้อยู่แล้ว

ในบทความนี้เราจะกล่าวถึงการติดตั้งโดยผ่าน Docker ส่วนอันแรกผู้อ่านสามารถอ่านได้ในหน้าเว็บของผู้ทำแอพได้ครับ

ติดตั้งผ่าน Docker

การติดตั้งผ่าน Docker [2] เป็นวิธีที่ทำได้ง่าย ไม่จำเป็นต้องติดตั้งและคอนไพล์ให้ยุ่งยาก โดยมี Container ที่จำเป็นทั้งหมด 3 Container ได้แก่

  • guacamole/guacd ที่เป็น Container สำหรับ guacd ที่ทำหน้าที่เป็นตัวอย่างระหว่างตัวเว็บเซิร์ฟเวอร์กับโปรโตคอลที่แตกต่างอย่าง SSH, VNC, RDP และอื่น ๆ
  • guacamole/guacamole เป็นตัวเว็บเซิร์ฟเวอร์ที่รันผ่าน Apache Tomcat ที่ติดต่อกับ guacd และฐานข้อมูล MySQL, PostgreSQL, Mariadb โดยอ่านการตั้งค่าจาก Environment Variables
  • mysql หรือ mariadb หรือ postgresql เป็นฐานข้อมูลสำหรับการเก็บข้อมูลการล็อคอิน และเก็บการตั้งค่าการเชื่อมต่อกับคอมพิวเตอร์ผ่านโปรโตคอลต่าง ๆ ในบทความนี้เราจะใช้ MariaDB

เมื่อทราบชื่อ Container ที่จำเป็นแล้ว ก่อนอื่นเราดาวน์โหลดตัว Container ที่กล่าวมาข้างต้นเสียก่อนโดยพิมพ์คำสั่งตามด้านล่างนี้ โดยเวอร์ชันที่ใช้ของ Apache Guacamole ในบทความนี้เราจะใช้รุ่น 1.6.0 ส่วน MariaDB เราจะใช้ lts-ubi

docker pull guacamole/guacamole:1.6.0
docker pull guacamole/guacd:1.6.0
docker pull mariadb:lts-ubi

นำเข้าฐานข้อมูลของ Apache Guacamole

เมื่อดาวน์โหลด Container เสร็จแล้วเราจำเป็นต้องมีไฟล์ SQL ที่เก็บรายละเอียดฐานข้อมูลที่เกี่ยวข้องกับ Apache Guacamole เสียก่อน ทำได้โดย

docker run --rm guacamole/guacamole:1.6.0 /opt/guacamole/bin/initdb.sh --mysql > initdb.sql

ต่อมาเริ่มต้น Container ของ MariaDB เพื่อนำเข้าไฟล์ SQL ที่สร้างไว้ในขั้นตอนก่อนหน้าสำหรับการสร้างฐานข้อมูลที่จำเป็นต่อการรัน Apache Guacamole ด้วยการสร้างไฟล์ docker-compose.yml

version: '3'
services:
  guacdb:
    container_name: guacamoledb
    image: mariadb:lts-ubi
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: '< รหัสผ่าน root >'
      MYSQL_DATABASE: 'guacamole_db'
      MYSQL_USER: 'guacamole_user'
      MYSQL_PASSWORD: '< รหัสผ่านผู้ใช้ guacamole_user >'
    volumes:
      - './db-data:/var/lib/mysql'
volumes:
  db-data:

จากนั้นให้เริ่มต้นการทำงานของ Docker ด้วยการพิมพ์คำสั่ง docker-compose up -d แล้วก็นำเข้าไฟล์ SQL ลงไปใน Container นั้นด้วยการพิมพ์คำสั่งตามด้านล่างนี้

docker cp initdb.sql guacamoledb:/initdb.sql
docker exec -it guacamoledb bash
cat /initdb.sql | mysql -u root -p guacamole_db
exit

เมื่อพิมพ์คำสั่งในบรรทัดที่ 3 แล้ว ตัว MariaDB จะสอบถามรหัสผ่านของ root ให้ผู้อ่านพิมพ์รหัสผ่านที่กล่าวถึงแล้วในขั้นตอนก่อนหน้า

ส่วนกรณีที่พิมพ์คำสั่ง mysql ในบรรทัดที่ 3 ไม่ได้เพราะว่ามันไม่มีคำสั่งนี้ ให้ผู้อ่านเปลี่ยนจาก mysql -> mariadb แทนครับ

หลังจากที่พิมพ์คำสั่ง exit แล้ว ให้ผู้อ่านพิมพ์ docker-compose down เพื่อปิดการทำงานของ Container เสียก่อน

รัน Apache Guacamole

เมื่อนำเข้าฐานข้อมูลเสร็จเรียบร้อยแล้ว ให้ผู้อ่านแก้ที่ไฟล์ docker-compose.yml ครับ

version: '3'
services:
  guacdb:
    container_name: guacamoledb
    image: mariadb:lts-ubi
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: '< รหัสผ่าน root >'
      MYSQL_DATABASE: 'guacamole_db'
      MYSQL_USER: 'guacamole_user'
      MYSQL_PASSWORD: '< รหัสผ่านผู้ใช้ guacamole_user >'
    volumes:
      - './db-data:/var/lib/mysql'
  guacd:
    container_name: guacd
    image: guacamole/guacd:1.6.0
    restart: unless-stopped
  guacamole:
    container_name: guacamole
    image: guacamole/guacamole:1.6.0
    restart: unless-stopped
    ports:
      - 8080:8080
    environment:
      GUACD_HOSTNAME: "guacd"
      MYSQL_HOSTNAME: "guacdb"
      MYSQL_DATABASE: "guacamole_db"
      MYSQL_USER: "guacamole_user"
      MYSQL_PASSWORD: '< รหัสผ่านผู้ใช้ guacamole_user >'
      TOTP_ENABLED: "true"
    depends_on:
      - guacdb
      - guacd
volumes:
  db-data:

แก้เสร็จแล้ว ให้รัน Container ขึ้นมาด้วยคำสั่ง docker-compose up -d

การเข้าถึง Apache Guacamole

เมื่อรันเสร็จแล้วให้ผู้ใช้เข้าไปที่ Apache Guacamole ผ่านหน้าเว็บเบราวเซอร์ด้วยการพิมพ์

http://< ตำแหน่ง IP ของคอมที่ติดตั้ง Apache Guacamole >:8080/guacamole 

โดยตัว /guacamole อันนี้มีต่อไว้เนื่องจากตัว Apache Guacamole ไม่สามารถเข้าถึงจาก Root directory จำเป็นต้องพิมพ์ข้อความต่อด้านล่างเพิ่มเติมมาครับ

เมื่อเข้าถึง Apache Guacamole ผ่านหน้าเว็บแล้วจะปรากฏหน้าจอตามด้านล่างนี้

Apache Guacamole

ให้พิมพ์ชื่อผู้ใช้และรหัสผ่านด้วย guacadmin เมื่อพิมพ์เสร็จแล้วจะปรากฏหน้าจอ Two Factor Authentication ให้ผู้ใช้เปิดแอพ Authenticator บนมือถือเพื่อสแกน QR code แล้วพิมพ์รหัสที่ได้ลงไปในหน้านั้นแล้วก็เข้าสู่ระบบ

หน้าจอ Two Factor Authentication

กรณีที่ไม่อยากเห็นหน้าจอตามด้านบนนี้ให้แก้ในไฟล์ docker-compose.yml ตรง TOTP_ENABLED: "true" ให้เป็น "false" แทนครับ

เมื่อเข้าสู่ระบบแล้วจะปรากฏหน้าจอหลักของ Apache Guacamole ตามด้านล่างนี้ แค่นี้ก็สามารถใช้งานได้แล้ว

หน้าจอหลักของ Apache Guacamole

ที่มา

  1. https://guacamole.apache.org/doc/gug/introduction.html
  2. https://krdesigns.com/articles/how-to-install-guacamole-using-docker-step-by-step


Kittisak Chotikkakamthorn

จบทั้งแพทย์ + วิศวะร่วมกับผ่านการฝึกงานทางด้าน AI ที่มหาวิทยาลัยที่ไต้หวันที่พัฒนาเทคนิค Machine Learning ที่เป็น state-of-the-art (SOTA) สำหรบัการแก้ปัญหาทางการแพทย์ ปัจจุบันเขียนบล็อกโดยสนใจเกี่ยวกับทางด้าน Coding, AI, Data รวมถึงเขียนเป็นไดอารี่เป็นหลัก

ผู้อ่านสามารถส่งอีเมลมาทาง contact[at]nickuntitled.com

↑ Go to top


© 2025 Nick Untitled is licensed under CC BY 4.0 / Privacy Policy