
SSH Config là gì và tại sao cần dùng?
SSH Config là file cấu hình (~/.ssh/config) cho phép quản lý nhiều server từ một vị trí tập trung. Thay vì gõ dòng lệnh dài mỗi lần kết nối, bạn định nghĩa alias và tham số mặc định — sau đó chỉ cần gõ ssh production thay vì ssh -p 2222 -i ~/.ssh/production_key [email protected].
Với nhiều server (dev, staging, production, database, monitoring), SSH Config trở thành công cụ không thể thiếu cho DevOps engineer và developer. File này hỗ trợ wildcard matching, jump host, proxy, forward port — mọi thứ cần thiết để quản lý hạ tầng phức tạp.

Cấu trúc cơ bản của SSH Config
Mỗi block trong file bắt đầu bằng Host keyword, theo sau là các directive:
Host production
HostName 192.168.1.100
User deploy
Port 2222
IdentityFile ~/.ssh/id_rsa_production
ForwardAgent yes
Host staging
HostName staging.myapp.com
User admin
Port 22
IdentityFile ~/.ssh/id_rsa_staging
LogLevel VERBOSE
Sau khi thêm cấu hình trên, gõ ssh production sẽ tự động thực thi toàn bộ tham số đã định nghĩa.
Các directive quan trọng
| Directive | Mô tả | Giá trị mẫu |
|---|---|---|
| HostName | Địa chỉ IP hoặc domain server | 192.168.1.100, myserver.com |
| User | Tên đăng nhập mặc định | root, deploy, ubuntu |
| Port | Cổng SSH (mặc định 22) | 22, 2222, 443 |
| IdentityFile | Đường dẫn private key | ~/.ssh/id_rsa_prod |
| ProxyJump | Nhảy qua jump host trước khi vào server | bastion |
| LocalForward | Forward port từ localhost | 3306 localhost:3306 |
| ServerAliveInterval | Giữ kết nối alive (giây) | 60 |
| StrictHostKeyChecking | Kiểm tra host key | accept-new, no, yes |
Quản lý nhiều server với SSH Config

Wildcard Matching
Sử dụng * để match nhiều host cùng lúc:
Host *-dev
User developer
IdentityFile ~/.ssh/id_rsa_dev
ForwardX11 no
Host api-*
ProxyJump bastion
User deploy
Với cấu hình trên, ssh api-server1 sẽ tự động qua bastion host, trong khi ssh web-dev sẽ dùng key và user dev mặc định.
Jump Host (Bastion Server)
Khi server nằm trong private network, cần nhảy qua bastion trước:
Host bastion
HostName bastion.mycompany.com
User ops
IdentityFile ~/.ssh/bastion_key
Host internal-*
ProxyJump bastion
User deploy
IdentityFile ~/.ssh/internal_key
Host db-prod
HostName 10.0.5.50
ProxyJump bastion
User dbadmin
LocalForward 5432 localhost:5432
Sau đó kết nối database qua bastion: ssh db-prod. Port 5432 được forward tự động — dùng psql -h localhost -p 5432 trên máy local để truy cập database trực tiếp.
Match Directive cho cấu hình nâng cao
Cho phép cấu hình khác nhau tùy môi trường:
Match Host production User root
ForwardAgent no
X11Forwarding no
LogLevel INFO
Match Exec "hostname = %h"
AddKeysToAgent yes
Match Exec chạy command shell — nếu return 0 thì block config được áp dụng. Đây là cách tạo conditional config mạnh mẽ.
Bảo mật SSH Config
- File permissions:
chmod 600 ~/.ssh/config— SSH từ chối đọc file có permission quá rộng - Host key verification: Dùng
StrictHostKeyChecking accept-new(thay vìno) để xác nhận host key lần đầu và lưu lại — tránh MITM attack - Agent Forwarding rủi ro:
ForwardAgent yescho phép server sử dụng SSH key trên máy bạn — chỉ dùng trên bastion đáng tin cậy - Include directive: Tách key nhạy cảm sang file riêng:
# ~/.ssh/config
Include ~/.ssh/secrets.conf
Host production
HostName prod.example.com
Mẹo nâng cao cho SSH Config
Throttle bandwidth với Compression
Host slow-network-*
Compression yes
ServerAliveInterval 30
ServerAliveCountMax 5
Tự động kết nối qua ProxyCommand
Host deep-internal
ProxyCommand ssh bastion nc %h %p
User root
IdentityFile ~/.ssh/deep_key
ProxyCommand chạy một shell command để thiết lập kết nối tunnel. %h và %p là placeholder cho HostName và Port. Cách này linh hoạt hơn ProxyJump trong nhiều trường hợp.
Git integration
Kết nối SSH Config với Git workflow:
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/work_key
IdentitiesOnly yes
# ~/.gitconfig
[url "ssh://git@github-work/"]
insteadOf = https://github.com/
Git clone từ GitHub sẽ tự động dùng SSH key thay vì HTTPS — không cần thay đổi URL từng repo.
Tổng kết nhanh
SSH Config là “one file to rule them all” cho quản lý server. Với 15 phút thiết lập ban đầu, bạn tiết kiệm hàng giờ mỗi tuần không cần gõ lại command dài. Các điểm quan trọng nhất:
- Sử dụng alias ngắn gọn cho mỗi server
- ProxyJump thay thế ProxyCommand khi có thể (đơn giản hơn)
- Luôn set permissions 600 cho file config
- Dùng wildcard
*để groups hóa config theo môi trường - ServerAliveInterval ≥ 60 giây để tránh disconnect đột ngột
Một workflow hiệu quả là tạo file config theo từng môi trường: dev, staging, production, mỗi môi trường một block riêng với user, key và bastion tương ứng. Khi có server mới, chỉ cần thêm 3-4 dòng vào file — không cần nhớ IP, port hay path key. Đây là khoản đầu tư nhỏ nhưng mang lại hiệu quả lớn cho mọi developer và DevOps engineer thường xuyên làm việc với nhiều server.
Tham khảo thêm về SSH Config options tại man page SSH_CONFIG chính thức của OpenSSH.
