Chuyển đến nội dung chính

SSH Tunnel

SSH tunneling cho phép bạn kết nối an toàn đến các database trên server từ xa không thể truy cập trực tiếp từ Mac của bạn. TablePro tạo một tunnel được mã hóa thông qua SSH server để kết nối đến database.

Cách SSH Tunneling Hoạt Động

  1. TablePro tạo kết nối SSH đến jump server của bạn
  2. Một cổng cục bộ (ví dụ: 60000) được chuyển tiếp qua tunnel
  3. Lưu lượng được mã hóa giữa Mac của bạn và SSH server
  4. SSH server kết nối đến database thay mặt bạn

Khi Nào Sử Dụng SSH Tunneling

  • Database server nằm trong mạng nội bộ
  • Database server chỉ chấp nhận kết nối cục bộ
  • Bạn cần mã hóa kết nối đến database
  • Bạn muốn truy cập database thông qua bastion/jump host

Thiết Lập SSH Tunneling

1

Tạo hoặc Chỉnh Sửa Kết Nối

Mở form kết nối cho database của bạn
2

Bật SSH Tunnel

Bật công tắc SSH Tunnel
3

Cấu Hình SSH Settings

Nhập chi tiết SSH server và xác thực
4

Kiểm Tra và Kết Nối

Nhấp Test Connection để xác minh tunnel hoạt động
SSH tunnel settings

Tùy Chọn Cấu Hình SSH

Thiết Lập SSH Server

FieldMô tảMặc định
SSH HostHostname hoặc IP của SSH server-
SSH PortCổng SSH server22
SSH UserTên người dùng SSH-

Phương Thức Xác Thực

TablePro hỗ trợ hai phương thức xác thực SSH:
Xác thực mật khẩu đơn giản:
FieldMô tả
SSH PassMật khẩu SSH của bạn
Xác thực bằng mật khẩu kém an toàn hơn xác thực bằng key. Hãy cân nhắc sử dụng SSH key cho server production.

Sử Dụng SSH Config

Nếu bạn có các entry trong file ~/.ssh/config, TablePro có thể sử dụng chúng:
  1. TablePro đọc SSH config của bạn tự động
  2. Chọn một host từ dropdown SSH Host
  3. Các thiết lập được tự động điền từ config của bạn
Ví dụ SSH config entry:
# ~/.ssh/config
Host production-jump
    HostName jump.example.com
    User deploy
    Port 22
    IdentityFile ~/.ssh/production_key
Entry này xuất hiện như “production-jump” trong dropdown SSH Host.

Thiết Lập Kết Nối Database

Khi sử dụng SSH tunneling, database host là tương đối với SSH server:
FieldGiá trịMô tả
Hostlocalhost hoặc 127.0.0.1Database nằm trên chính SSH server
Hostdb.internalDatabase nằm trên mạng nội bộ
Port3306, 5432, v.v.Cổng database (không đổi)
Database host nên là giá trị mà SSH server sử dụng để kết nối đến database, không phải giá trị mà Mac của bạn sử dụng.

Các Trường Hợp Phổ Biến

Database trên SSH Server

Database chạy trên cùng máy với SSH server:
SSH Host:       jump.example.com
SSH User:       deploy

Database Host:  localhost
Database Port:  3306

Database trên Mạng Nội Bộ

Database nằm trên server khác, chỉ có thể truy cập từ SSH server:
SSH Host:       jump.example.com
SSH User:       deploy

Database Host:  db.internal.example.com
Database Port:  5432

AWS RDS qua Bastion

Kết nối đến RDS thông qua EC2 bastion host:
SSH Host:       bastion.example.com
SSH User:       ec2-user
Key File:       ~/.ssh/aws-key.pem

Database Host:  mydb.abc123.us-east-1.rds.amazonaws.com
Database Port:  5432

Thiết Lập SSH Key

Tạo SSH Keys

Nếu bạn chưa có SSH key:
# Tạo key pair mới
ssh-keygen -t ed25519 -C "[email protected]"

# Hoặc sử dụng RSA để tương thích rộng hơn
ssh-keygen -t rsa -b 4096 -C "[email protected]"

Vị Trí Key

Vị trí key mặc định trên macOS:
Loại KeyPrivate KeyPublic Key
Ed25519~/.ssh/id_ed25519~/.ssh/id_ed25519.pub
RSA~/.ssh/id_rsa~/.ssh/id_rsa.pub
ECDSA~/.ssh/id_ecdsa~/.ssh/id_ecdsa.pub

Thêm Key vào Server

Sao chép public key của bạn đến SSH server:
# Sử dụng ssh-copy-id
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server

# Hoặc thủ công
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Quyền Key

SSH key phải có quyền chính xác:
# Sửa quyền
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_*
chmod 644 ~/.ssh/id_*.pub
chmod 644 ~/.ssh/config

Khắc Phục Sự Cố

Từ Chối Kết Nối

Triệu chứng: “Connection refused” khi kiểm tra SSH tunnel Nguyên nhân và Giải pháp:
  1. SSH server không chạy
    # Kiểm tra kết nối SSH trực tiếp
    ssh -v user@server
    
  2. Sai cổng
    • Xác minh cổng SSH (một số server sử dụng cổng không chuẩn)
    • Kiểm tra với quản trị viên server
  3. Firewall chặn kết nối
    • Đảm bảo cổng 22 (hoặc cổng tùy chỉnh) được mở
    • Kiểm tra cả firewall cục bộ và server

Xác Thực Thất Bại

Triệu chứng: “SSH authentication failed” hoặc “Permission denied” Đối với Xác thực Mật khẩu:
  1. Xác minh username và password
  2. Kiểm tra xem xác thực mật khẩu có được bật trên server không
  3. Thử kết nối qua terminal: ssh user@server
Đối với Xác thực Key:
  1. Xác minh đường dẫn file key chính xác
  2. Kiểm tra quyền key (chmod 600)
  3. Đảm bảo public key nằm trong authorized_keys của server
  4. Xác minh passphrase (nếu key được mã hóa)
  5. Thử kết nối qua terminal:
    ssh -i ~/.ssh/your_key user@server
    

Lỗi Private Key

“Private key file not found”:
  • Xác minh đường dẫn tồn tại
  • Sử dụng nút Browse để chọn file
“Private key file is not readable”:
chmod 600 ~/.ssh/your_key
“Wrong passphrase”:
  • Nhập lại passphrase
  • Kiểm tra key thủ công: ssh-keygen -y -f ~/.ssh/your_key

Tunnel Thiết Lập Nhưng Database Lỗi

Nếu SSH tunnel kết nối nhưng kết nối database thất bại:
  1. Xác minh database host chính xác (tương đối với SSH server)
    # Từ SSH server, kiểm tra kết nối database
    ssh user@server "mysql -h localhost -u dbuser -p"
    
  2. Kiểm tra cổng database
    • Đảm bảo cổng khớp với cổng thực tế của database server
  3. Xác minh thông tin đăng nhập database
    • Username/password có thể khác với thông tin SSH

Tunnel Bị Ngắt Định Kỳ

TablePro bao gồm thiết lập keep-alive để ngăn tunnel bị ngắt:
  • ServerAliveInterval=60 - Gửi keep-alive mỗi 60 giây
  • ServerAliveCountMax=3 - Ngắt kết nối sau 3 lần không phản hồi
Nếu tunnel vẫn bị ngắt:
  1. Kiểm tra độ ổn định mạng
  2. Xác minh thiết lập ClientAliveInterval của server
  3. Kiểm tra thiết lập idle timeout trên firewall

Cân Nhắc Bảo Mật

Thực Hành Tốt Nhất

  1. Sử dụng xác thực bằng key thay vì mật khẩu
  2. Sử dụng key Ed25519 hoặc RSA với 4096+ bit
  3. Bảo vệ private key bằng passphrase
  4. Giới hạn truy cập SSH cho người dùng/IP cụ thể trên server
  5. Sử dụng jump host chuyên dụng thay vì truy cập database trực tiếp

Những Gì Được Mã Hóa

Dữ liệuĐược mã hóa
Kết nối SSH
Thông tin đăng nhập databaseCó (qua tunnel)
Dữ liệu queryCó (qua tunnel)
Mật khẩu lưu cục bộCó (macOS Keychain)

Những Điều Cần Tránh

  • Không chia sẻ private key
  • Không sử dụng xác thực mật khẩu trên server production
  • Không lưu mật khẩu SSH ở dạng plain text
  • Không để lộ cổng database trực tiếp ra internet

Nâng Cao: SSH Agent

Nếu bạn sử dụng SSH Agent để quản lý key:
  1. Thêm key vào agent:
    ssh-add ~/.ssh/id_ed25519
    
  2. TablePro có thể sử dụng key từ SSH Agent tự động
  3. Bạn không cần nhập passphrase nhiều lần

Các Bước Tiếp Theo