SSH là một trong những kỹ năng nền tảng mà lập trình viên, backend engineer hay DevOps engineer đều nên nắm chắc. Chỉ với vài lệnh cơ bản, bạn có thể đăng nhập server, deploy ứng dụng, xem log, copy file và xử lý sự cố từ xa một cách an toàn.
SSH là gì?
SSH, viết tắt của Secure Shell, là giao thức dùng để kết nối tới máy chủ từ xa qua một kênh đã được mã hóa. Thay vì gửi username và password qua mạng theo cách dễ bị nghe lén, SSH giúp bảo vệ phiên làm việc giữa máy của bạn và server.
Trong thực tế, SSH thường được dùng để quản trị VPS, chạy lệnh trên Linux server, cấu hình CI/CD, kết nối Git server hoặc tạo đường hầm an toàn tới một dịch vụ nội bộ.
Kết nối SSH bằng password
Cú pháp đơn giản nhất là:
ssh username@server_ip
Ví dụ:
ssh -l deploy 192.168.1.10
Nếu server dùng port khác port mặc định 22, thêm tham số -p:
ssh -l deploy -p 2222 192.168.1.10
Nên dùng SSH key thay vì password
Đăng nhập bằng password tiện nhưng không phải lựa chọn tốt nhất cho server production. Cách phổ biến hơn là dùng SSH key: máy local giữ private key, server lưu public key. Khi đăng nhập, hai bên xác thực với nhau mà không cần gửi password qua mạng.
Tạo SSH key mới:
ssh-keygen -t ed25519 -C "aedev-ssh-key"
Sau đó copy public key lên server:
ssh-copy-id -o User=deploy 192.168.1.10
Nếu máy bạn không có ssh-copy-id, có thể copy nội dung file ~/.ssh/id_ed25519.pub vào file ~/.ssh/authorized_keys trên server.
Tạo alias để kết nối nhanh hơn
Khi phải làm việc với nhiều server, bạn nên cấu hình file ~/.ssh/config để không phải nhớ IP, port và username mỗi lần kết nối.
Host staging-api
HostName 192.168.1.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
Từ đó, bạn chỉ cần chạy:
ssh staging-api
Copy file qua SSH với scp
SSH thường đi kèm các công cụ hữu ích như scp hoặc rsync. Ví dụ copy file build lên server:
scp ./app.tar.gz staging-api:/var/www/releases/
Với thư mục lớn hoặc deploy lặp lại nhiều lần, rsync thường hiệu quả hơn vì chỉ đồng bộ phần thay đổi.
Một vài thiết lập bảo mật nên có
- Tạo user deploy riêng, hạn chế đăng nhập bằng user root.
- Dùng SSH key, tránh phụ thuộc vào password.
- Tắt password login sau khi đã kiểm tra key hoạt động ổn.
- Chỉ mở port SSH cần thiết trong firewall.
- Không commit private key vào Git repository.
Một cấu hình server thường thấy trong file /etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Sau khi chỉnh cấu hình, reload SSH service:
sudo systemctl reload ssh
Lỗi thường gặp
Permission denied publickey thường xảy ra khi public key chưa được thêm vào server, sai user, sai quyền file trong thư mục ~/.ssh, hoặc client đang dùng nhầm private key.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Connection timed out thường liên quan tới firewall, security group cloud provider, sai IP hoặc port SSH chưa mở.
Kết luận
SSH không chỉ là một lệnh để vào server. Nó là nền tảng cho rất nhiều workflow trong phát triển phần mềm: deploy, debug, automation, CI/CD và vận hành hệ thống. Nếu mới bắt đầu, hãy tập dùng SSH key, cấu hình alias trong ~/.ssh/config và hiểu rõ các lỗi phổ biến trước khi thao tác trên production.


