Khi bạn cần truy cập vào một máy chủ từ xa (VPS) để quản lý hệ thống, giải pháp truyền thống luôn là sử dụng các ứng dụng SSH Client như PuTTY, Termius hoặc Terminal tích hợp sẵn trên macOS/Linux. Tuy nhiên, có những tình huống bạn không thể cài đặt phần mềm bổ sung (ví dụ: đang ở máy tính công cộng, máy tính của khách hàng, hoặc máy tính bị hạn chế quyền cài đặt). Sshwifty ra đời để giải quyết vấn đề này: một công cụ SSH và Telnet Client hoạt động hoàn toàn trên web, cho phép bạn truy cập vào VPS trực tiếp từ trình duyệt mà không cần cài đặt bất kỳ phần mềm bổ sung nào.

Sshwifty Là Gì?

Sshwifty là một ứng dụng mã nguồn mở (giấy phép AGPL-3.0) được phát triển bởi lập trình viên Ni Rui, viết bằng ngôn ngữ Go. Nó hoạt động như một máy chủ trung gian (Gateway) cho phép người dùng kết nối đến các máy chủ SSH hoặc Telnet từ xa thông qua giao diện web. Bạn chỉ cần mở trình duyệt, nhập địa chỉ IP và tài khoản SSH, và gần như mọi thao tác trên terminal đều có thể thực hiện được ngay lập tức.

Toàn bộ dữ liệu phiên làm việc (session) được mã hóa bằng WebCrypt API và lưu trữ cục bộ trên trình duyệt, đảm bảo rằng máy chủ Sshwifty không thể đọc được thông tin nhạy cảm như mật khẩu hay private key của bạn.

Những Tính Năng Nổi Bật Của Sshwifty

  • Hỗ trợ SSH và Telnet: Kết nối đến máy chủ qua cả hai giao thức phổ biến nhất.
  • Mã hóa đầu cuối (End-to-end Encryption): Dữ liệu được mã hóa bằng WebCrypt API, yêu cầu kết nối HTTPS để hoạt động.
  • Hoàn toàn chạy trên trình duyệt: Không cần cài đặt phần mềm, plugin hay extension. Chỉ cần một trình duyệt hiện đại (Chrome, Firefox, Edge).
  • Hỗ trợ Presets (Cấu hình sẵn): Quản trị viên có thể định nghĩa sẵn các máy chủ cho người dùng, giúp họ kết nối nhanh mà không cần nhập thông tin thủ công.
  • Hỗ trợ Docker: Dễ dàng triển khai Sshwifty trên máy chủ chỉ với một lệnh Docker duy nhất.
  • Hooks tùy biến (Server-side Hooks): Cho phép quản trị viên thực thi các script kiểm tra trên máy chủ trước khi cho phép kết nối, giúp tăng cường bảo mật.

Kiến Trúc Hoạt Động Của Sshwifty

Sshwifty hoạt động theo mô hình Client-Server đơn giản. Máy chủ Sshwifty (Backend) được viết bằng Go, đảm nhận việc lắng nghe các kết nối HTTP/HTTPS từ trình duyệt và thiết lập kết nối SSH/Telnet đến máy chủ đích. Giao diện người dùng (Frontend) được xây dựng bằng JavaScript và hiển thị terminal ngay trong trình duyệt thông qua thư viện xterm.js.

Khi người dùng nhập thông tin kết nối (IP, Port, Username, Password hoặc Private Key), dữ liệu được mã hóa bằng WebCrypt API ngay trên trình duyệt trước khi gửi đến máy chủ Sshwifty. Máy chủ chỉ đóng vai trò chuyển tiếp (relay) các gói tin đã được mã hóa, do đó mật khẩu và private key của bạn không bao giờ lộ diện trên máy chủ Backend. Vì lý do bảo mật này, Sshwifty bắt buộc phải được truy cập qua HTTPS (kết nối an toàn).

Hướng Dẫn Cài Đặt Sshwifty Bằng Docker

Cách đơn giản và nhanh nhất để triển khai Sshwifty là sử dụng Docker. Chỉ với một lệnh duy nhất, bạn đã có một máy chủ SSH Web hoạt động:

docker run --detach   --restart unless-stopped   --publish 8182:8182   --name sshwifty   niruix/sshwifty:latest

Sau khi chạy lệnh trên, bạn có thể truy cập Sshwifty qua địa chỉ http://dia_chi_IP_may_chu:8182. Lưu ý là image Docker được đặt tên là niruix/sshwifty (có chữ “x” ở cuối), không phải “nirui”.

Nếu bạn muốn chỉ cho phép truy cập từ localhost và sử dụng một Reverse Proxy (ví dụ Nginx) để bảo mật bằng HTTPS, hãy thay đổi tùy chọn publish:

# Chỉ publish local, dùng Reverse Proxy để expose ra ngoài
docker run --detach   --restart unless-stopped   --publish 127.0.0.1:8182:8182   --name sshwifty   niruix/sshwifty:latest

Cấu Hình Sshwifty Cơ Bản

Sshwifty có thể được cấu hình thông qua file JSON hoặc biến môi trường (Environment Variables). Dưới đây là các tùy chọn cơ bản bạn cần biết khi triển khai Sshwifty cho doanh nghiệp:

{
  "HostName": "localhost",
  "SharedKey": "WEB_ACCESS_PASSWORD",
  "DialTimeout": 10,
  "Servers": [
    {
      "ListenInterface": "0.0.0.0",
      "ListenPort": 8182,
      "ReadTimeout": 120,
      "WriteTimeout": 120,
      "HeartbeatTimeout": 10,
      "InitialTimeout": 10
    }
  ]
}

SharedKey là mật khẩu bảo vệ trang web của bạn. Nếu để trống, bất kỳ ai truy cập vào địa chỉ Sshwifty cũng có thể sử dụng nó để kết nối SSH đến máy chủ tùy ý. Đây là rủi ro bảo mật rất lớn, vì vậy hãy luôn đặt SharedKey khi triển khai Sshwifty ở môi trường Production.

Bảo Mật Khi Sử Dụng Sshwifty

Mặc dù Sshwifty cung cấp cơ chế mã hóa đầu cuối, việc triển khai nó trên môi trường thực tế đòi hỏi quản trị viên phải tuân thủ các nguyên tắc bảo mật nghiêm ngặt:

  • Luôn sử dụng HTTPS: WebCrypt API yêu cầu chế độ bảo mật (Secure Context) do đó Sshwifty bắt buộc phải chạy qua HTTPS. Bạn có thể cấu hình TLS trực tiếp trên Sshwifty hoặc dùng Reverse Proxy như Nginx để chấm dứt SSL.
  • Đặt SharedKey mạnh: Sử dụng một mật khẩu phức tạp để bảo vệ trang web Sshwifty, tránh bị người lạ truy cập trái phép.
  • Chỉ publish trên localhost: Nếu bạn là người dùng duy nhất, hãy để Sshwifty chỉ lắng nghe trên 127.0.0.1 và truy cập thông qua SSH Tunnel (cổng chuyển tiếp) để tăng cường bảo mật.
  • Sử dụng Presets hạn chế: Tính năng OnlyAllowPresetRemotes cho phép bạn giới hạn người dùng chỉ được kết nối đến các máy chủ đã được định nghĩa trước, ngăn chặn việc sử dụng Sshwifty để tấn công các máy chủ khác trên internet.

Tích Hợp Sshwifty Với Nginx Và Chứng Chỉ SSL

Để triển khai Sshwifty một cách chuyên nghiệp và an toàn trong môi trường Production, bạn nên đặt một Reverse Proxy Nginx phía trước để xử lý chứng chỉ SSL và các quy tắc bảo mật:

server {
    listen 443 ssl http2;
    server_name sshwifty.vnhte.com;

    ssl_certificate /etc/letsencrypt/live/sshwifty.vnhte.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sshwifty.vnhte.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8182;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}

Với cấu hình này, Sshwifty được bảo vệ bởi chứng chỉ SSL Let’s Encrypt và tất cả lưu lượng đều được mã hóa toàn bộ đường truyền. Timeout được đặt cao (3600 giây) để hỗ trợ các phiên làm việc SSH dài.

So Sánh Sshwifty Với Các Giải Pháp SSH Web Khác

Tiêu chíSshwiftyApache GuacamoleGateOne (Shellinabox)
Giao thức hỗ trợSSH, TelnetSSH, RDP, VNC, TelnetSSH
Kiến trúcNhẹ (Go + JS)Nặng (Java)Nhẹ (Python)
Triển khaiDocker 1 lệnhPhức tạp (Tomcat)Docker dễ dàng
Mã hóa dữ liệuWebCrypt APITLSKhông
PresetsKhôngKhông
Giấy phépAGPL-3.0Apache 2.0AGPL-3.0

Kết Luận

Sshwifty là một công cụ SSH Web cực kỳ nhẹ, mạnh mẽ và dễ triển khai. Với khả năng chạy trên Docker, mã hóa WebCrypt API đầu cuối và hỗ trợ Telnet, nó là giải pháp lý tưởng cho các quản trị viên hệ thống cần truy cập khẩn cấp vào máy chủ từ bất kỳ trình duyệt nào. Hãy luôn nhớ cấu hình HTTPS và đặt SharedKey để bảo vệ hệ thống của bạn trước các truy cập trái phép.

Xem thêm: CrowdSec WAF bảo vệ máy chủSwitch Port Modes cho Network Engineer.

Chào các bạn mình là Quốc Hùng , mình sinh ra thuộc cung song tử ,song tử luôn khẳng định chính mình ,luôn luôn phấn đấu vượt lên phía trước ,mình sinh ra và lớn lên tại vùng đất võ cổ truyền ,đam mê của mình là coder ,ngày đi học tối về viết blog ...