Back to blog

VS Code Remote-SSH: Lập Trình Trên Server Từ Xa Như Máy Local

vscodesshdevopsremote-developmentproductivity
VS Code Remote-SSH: Lập Trình Trên Server Từ Xa Như Máy Local

Giới Thiệu

Bạn đã bao giờ cần chỉnh sửa file trên một server Linux từ xa, nhưng chỉ có thể dùng vim hay nano trong terminal? Hoặc bạn cảm thấy bực bội khi phải code qua kết nối SSH chậm chạp, không có IntelliSense, không debug được, không có extension?

VS Code Remote-SSH giải quyết tất cả những vấn đề này. Nó cho phép bạn mở bất kỳ thư mục nào trên máy từ xa qua SSH và làm việc như thể code đang nằm trên máy tính của bạn — với đầy đủ IntelliSense, debug, extension, và giao diện quen thuộc.

Trong bài viết này bạn sẽ học:

  • Remote-SSH hoạt động như thế nào
  • Cài đặt SSH key để đăng nhập không cần mật khẩu
  • Cài đặt và cấu hình extension Remote-SSH
  • Kết nối đến server từ xa và mở thư mục
  • Port forwarding để xem trước ứng dụng web
  • Quản lý nhiều remote host
  • Mẹo và best practice cho remote development hiệu quả

Remote-SSH Hoạt Động Như Thế Nào

Khi bạn kết nối đến máy từ xa, VS Code sẽ cài đặt một VS Code Server nhỏ trên remote host. VS Code client ở máy local sẽ giao tiếp với server này qua SSH. Server xử lý:

  • Truy cập file system
  • Language server (IntelliSense, autocomplete)
  • Phiên debug
  • Thực thi extension

Điều này có nghĩa là các extension ngôn ngữ chạy trên máy từ xa — nơi code thực sự tồn tại — trong khi giao diện chạy ở máy local. Kết quả là trải nghiệm chỉnh sửa nhanh nhạy với đầy đủ khả năng IDE.

Yêu Cầu Trước Khi Bắt Đầu

Trước khi bắt đầu, bạn cần:

  • VS Code được cài đặt ở máy local (tải tại đây)
  • Một server từ xa có thể truy cập qua SSH (Linux/macOS; server Windows cũng được hỗ trợ)
  • SSH client được cài trên máy local
    • macOS/Linux: lệnh ssh có sẵn
    • Windows: OpenSSH (có sẵn từ Windows 10+) hoặc Git Bash

Bước 1: Cài Đặt SSH Key Authentication

Sử dụng SSH key an toàn hơn và tiện lợi hơn so với xác thực bằng mật khẩu — đặc biệt quan trọng khi kết nối remote thường xuyên.

Tạo Cặp SSH Key

Nếu bạn chưa có, hãy tạo cặp key trên máy local của bạn:

ssh-keygen -t ed25519 -C "[email protected]"

Chấp nhận đường dẫn mặc định (~/.ssh/id_ed25519) hoặc chỉ định đường dẫn tùy chỉnh. Thêm passphrase để bảo mật thêm (không bắt buộc nhưng khuyến nghị).

Sao Chép Public Key Lên Server Từ Xa

ssh-copy-id user@your-remote-host

Hoặc thêm thủ công:

cat ~/.ssh/id_ed25519.pub | ssh user@your-remote-host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Kiểm Tra Đăng Nhập Không Mật Khẩu

ssh user@your-remote-host

Bạn sẽ kết nối mà không cần nhập mật khẩu.

Bước 2: Cài Đặt Extension Remote-SSH

  1. Mở VS Code
  2. Vào panel Extensions (Ctrl+Shift+X / Cmd+Shift+X)
  3. Tìm kiếm "Remote - SSH"
  4. Cài extension được xuất bản bởi Microsoft

Bạn cũng sẽ thấy Remote - SSH: Editing Configuration Files — hãy cài thêm extension này để có trải nghiệm chỉnh sửa config tốt hơn.

Sau khi cài đặt, một icon mới xuất hiện trong Activity Bar (góc dưới bên trái) — Remote Explorer.

Bước 3: Cấu Hình SSH Host

VS Code đọc kết nối SSH từ file chuẩn ~/.ssh/config. Bạn có thể chỉnh sửa trực tiếp hoặc để VS Code quản lý.

Mở SSH Config

Nhấn Ctrl+Shift+P (hoặc Cmd+Shift+P), gõ "Remote-SSH: Open SSH Configuration File", và chọn ~/.ssh/config.

Thêm Host Entry

Host my-dev-server
    HostName 192.168.1.100
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519
    Port 22
 
Host work-server
    HostName work.example.com
    User chanh
    IdentityFile ~/.ssh/work_key
    ForwardAgent yes

Giải thích các trường quan trọng:

TrườngMô tả
HostTên alias (dùng trong danh sách host của VS Code)
HostNameĐịa chỉ IP hoặc tên miền
UserTên người dùng SSH
IdentityFileĐường dẫn đến private key
PortCổng SSH (mặc định: 22)
ForwardAgentChuyển tiếp SSH agent local (hữu ích cho git trên remote)

Bước 4: Kết Nối Đến Remote Host

Cách 1: Remote Explorer

  1. Click icon Remote Explorer trong Activity Bar
  2. Di chuột lên host của bạn trong "SSH Targets"
  3. Click icon thư mục để mở remote host trong cửa sổ mới
  4. Hoặc click icon mũi tên để kết nối trong cửa sổ hiện tại

Cách 2: Command Palette

  1. Nhấn Ctrl+Shift+P / Cmd+Shift+P
  2. Gõ "Remote-SSH: Connect to Host"
  3. Chọn host đã cấu hình từ danh sách
  4. VS Code mở cửa sổ mới kết nối đến remote

Lần Kết Nối Đầu Tiên

Ở lần kết nối đầu, VS Code sẽ:

  1. Tải và cài đặt VS Code Server trên máy từ xa
  2. Thiết lập server trong ~/.vscode-server/ trên remote
  3. Mở cửa sổ VS Code mới — thanh tiêu đề hiển thị [SSH: hostname] để xác nhận bạn đã kết nối

Từ đây, mở thư mục với File > Open Folder và duyệt file system của remote.

Bước 5: Mở Dự Án Từ Xa

Sau khi kết nối, điều hướng đến dự án của bạn:

  1. File > Open Folder (hoặc Ctrl+K Ctrl+O)
  2. Duyệt đến thư mục dự án trên server từ xa
  3. Click OK

VS Code tải thư mục remote. Bây giờ bạn có thể:

  • Duyệt và chỉnh sửa file trong panel Explorer
  • Mở terminal tích hợp (Ctrl+`) — terminal này chạy trên máy từ xa
  • Dùng IntelliSense được cung cấp bởi language server từ xa
  • Chạy và debug code trên remote host

Terminal Tích Hợp

Terminal bên trong cửa sổ Remote-SSH là phiên shell thực sự trên server từ xa. Mọi lệnh bạn chạy đều thực thi từ xa:

# Lệnh này chạy trên máy từ xa
ls /home/ubuntu/projects
python3 --version
docker ps

Bước 6: Cài Đặt Extension Trên Remote

Một số extension cần chạy trên server từ xa (ví dụ: extension ngôn ngữ, linter). Các extension khác chạy local (theme, keybinding).

Để cài extension trên remote:

  1. Mở panel Extensions khi đang kết nối
  2. Tìm kiếm extension
  3. Click "Install in SSH: hostname"

Extension có ký hiệu remote sẽ chạy phía server. VS Code tự động gợi ý chuyển các extension local sang remote khi kết nối.

Extension Remote Được Khuyến Nghị

ExtensionMục đích
Python / PylanceIntelliSense cho Python
GoHỗ trợ ngôn ngữ Go
ESLint / PrettierLinting và formatting JS/TS
GitLensTích hợp Git nâng cao
DockerQuản lý Docker container
Remote - ContainersDev container trên remote

Bước 7: Port Forwarding

Khi bạn chạy ứng dụng web trên server từ xa (ví dụ: localhost:3000), bạn không thể truy cập trực tiếp từ trình duyệt local. Port forwarding của VS Code sẽ tự động tunnel cổng từ xa về máy local.

Port Forwarding Tự Động

VS Code phát hiện khi một tiến trình bind vào cổng (ví dụ: npm run dev) và tự động đề xuất forward. Click vào thông báo toast để mở trong trình duyệt local.

Port Forwarding Thủ Công

  1. Mở panel Ports (trong khu vực panel phía dưới)
  2. Click "Forward a Port"
  3. Nhập số cổng từ xa (ví dụ: 3000)
  4. VS Code gán một cổng local (thường cùng số)
  5. Mở http://localhost:3000 trong trình duyệt local

Port Forwarding Cố Định

Thêm các cổng thường dùng vào workspace settings:

{
  "remote.SSH.defaultForwardedPorts": [
    { "localPort": 3000, "remotePort": 3000 },
    { "localPort": 5432, "remotePort": 5432 }
  ]
}

Quản Lý Nhiều Môi Trường Remote

Tổ Chức Host Với Label

Dùng alias Host mô tả trong SSH config để dễ quản lý:

# Server phát triển
Host dev-api
    HostName 10.0.1.10
    User ubuntu
    IdentityFile ~/.ssh/dev_key
 
Host dev-db
    HostName 10.0.1.11
    User postgres
    IdentityFile ~/.ssh/dev_key
 
# Production (chỉ đọc)
Host prod-web
    HostName prod.example.com
    User deploy
    IdentityFile ~/.ssh/prod_key

Workspace File Cho Dự Án Remote

Lưu file .code-workspace để nhanh chóng mở lại thư mục remote:

{
  "folders": [
    {
      "uri": "vscode-remote://ssh-remote+my-dev-server/home/ubuntu/api",
      "name": "API Service"
    },
    {
      "uri": "vscode-remote://ssh-remote+my-dev-server/home/ubuntu/frontend",
      "name": "Frontend"
    }
  ]
}

Các Workflow Phổ Biến

Workflow 1: Phát Triển Python Trên GPU Server

# SSH config
Host gpu-server
    HostName gpu.mylab.com
    User researcher
    IdentityFile ~/.ssh/lab_key
  1. Kết nối qua Remote-SSH
  2. Mở thư mục Python project
  3. Cài extension Python và Jupyter trên remote
  4. Chọn Python interpreter / virtual environment trên remote
  5. Chạy và debug script ML trực tiếp trên GPU server
  6. Forward cổng Jupyter (8888) để xem notebook trên trình duyệt local

Workflow 2: Phát Triển Docker Trên VPS

  1. Kết nối đến VPS qua Remote-SSH
  2. Cài extension Docker trên remote
  3. Quản lý container, image và volume từ panel Docker của VS Code
  4. Mở terminal bên trong container trực tiếp từ VS Code
  5. Forward cổng ứng dụng để test trên trình duyệt local

Workflow 3: Git Operations Trên Remote

Khi SSH agent được chuyển tiếp (ForwardAgent yes), các thao tác git trên remote sử dụng SSH key local của bạn — không cần sao chép key sang server.

# Trên remote, trong terminal VS Code
git clone [email protected]:yourname/yourrepo.git
git push origin main  # Dùng SSH key local qua agent forwarding

Mẹo Và Best Practice

Tối Ưu Hiệu Suất

Dùng cipher SSH nhanh hơn cho kết nối độ trễ cao:

Host fast-server
    HostName server.example.com
    User ubuntu
    Ciphers [email protected]
    Compression yes

Dùng connection multiplexing để tái sử dụng kết nối SSH:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

Tạo thư mục sockets:

mkdir -p ~/.ssh/sockets

Workspace Settings vs User Settings

Settings trong .vscode/settings.json bên trong dự án remote ghi đè user settings. Dùng này để cấu hình settings riêng cho remote:

{
  "python.defaultInterpreterPath": "/home/ubuntu/.venv/bin/python",
  "editor.formatOnSave": true,
  "terminal.integrated.defaultProfile.linux": "bash"
}

Giữ VS Code Server Cập Nhật

VS Code Server tự động cập nhật khi bạn cập nhật VS Code ở máy local. Để cài lại server thủ công (ví dụ: sau khi cập nhật thất bại):

  1. Ctrl+Shift+P → "Remote-SSH: Kill VS Code Server on Host"
  2. Kết nối lại — VS Code sẽ cài lại server

Dùng Jump Host (Bastion Server)

Nếu server của bạn đứng sau bastion/jump host:

Host bastion
    HostName bastion.example.com
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519
 
Host internal-server
    HostName 10.0.0.50
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519
    ProxyJump bastion

VS Code xử lý kết nối SSH nhiều bước một cách trong suốt.

Xử Lý Lỗi Thường Gặp

"Could not establish connection to server"

Nguyên nhân và cách khắc phục:

  1. Sai hostname/IP — kiểm tra bằng ssh user@host trong terminal
  2. Firewall chặn cổng 22 — kiểm tra quy tắc firewall trên remote
  3. SSH service không chạy — chạy sudo systemctl status ssh trên remote
  4. Sai key — đảm bảo IdentityFile trỏ đến private key đúng

"VS Code Server failed to start"

# Trên remote, xóa cài đặt server cũ rồi kết nối lại
rm -rf ~/.vscode-server/

Sau đó kết nối lại — VS Code sẽ cài lại server.

Extension Không Hoạt Động Trên Remote

Một số extension không hỗ trợ thực thi từ xa. Kiểm tra trang marketplace của extension để xem có huy hiệu "Remote Development" không. Với extension không được hỗ trợ, hãy tìm giải pháp thay thế hoặc chạy chúng ở local.

Kết Nối Chậm / Độ Trễ Cao

  • Bật SSH compression (Compression yes trong config)
  • Dùng cipher nhanh hơn (Ciphers [email protected])
  • Cân nhắc dùng VS Code Tunnels cho tunneling qua HTTPS (không cần cổng SSH mở)

So Sánh VS Code Remote-SSH Với Các Giải Pháp Khác

Công cụƯu điểmNhược điểm
Remote-SSHĐầy đủ VS Code, miễn phí, hoạt động với mọi SSH serverYêu cầu cổng SSH mở
Remote TunnelsHoạt động qua firewall, không cần cổng SSHYêu cầu tài khoản GitHub
Dev ContainersMôi trường tái tạo đượcYêu cầu Docker trên remote
CodespacesKhông cần cài đặt localChi phí, phụ thuộc GitHub
JetBrains GatewayHỗ trợ JetBrains IDETrả phí cho đầy đủ tính năng

Remote-SSH là điểm bắt đầu tốt nhất cho hầu hết developer — miễn phí, mạnh mẽ, và hoạt động với bất kỳ server nào có thể SSH vào.

Tổng Kết

VS Code Remote-SSH thay đổi cách bạn làm việc với server từ xa:

✅ IntelliSense, debug và extension đầy đủ trên máy từ xa
✅ Terminal tích hợp chạy trực tiếp trên server từ xa
✅ Port forwarding tự động cho trình duyệt local
✅ Hoạt động với mọi server Linux, macOS, hoặc Windows có thể SSH
✅ Không cần cấu hình gì trên remote ngoài SSH access

Một khi bạn thử remote development với VS Code, bạn sẽ không bao giờ muốn quay lại chỉnh sửa qua SSH thuần túy nữa. Những lợi ích về năng suất — IntelliSense, refactor nhiều file, debug tích hợp — là ngay lập tức và đáng kể.

Bước tiếp theo để khám phá:

📬 Đăng ký nhận bản tin

Nhận những bài viết mới nhất qua email mỗi tuần. Không spam, hủy đăng ký bất cứ lúc nào.

Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất cứ lúc nào.

💬 Comments

Đăng nhập để bình luận

Chúng tôi sẽ không đăng bất cứ điều gì mà không có sự cho phép của bạn.