VPS của bạn là một máy tính ở xa. SSH là cách mã hoá để đăng nhập, chạy lệnh, chuyển file và chạm tới những thứ chỉ VPS nhìn thấy — thay thế telnet không an toàn.
← / → để chuyển slide · chuyển EN/VI bên dưới · góc nhìn kiến trúc sư — mô hình trong đầu trước, vài ví dụ nhỏ
Bạn không cắm bàn phím vào nó được. Mọi thao tác đều đi qua mạng — nên cách bạn đăng nhập quyết định mức độ an toàn.
telnet là cách vào cũ. Nó gửi username VÀ password của bạn dạng plaintext — ai trên đường dây giữa bạn và VPS cũng đọc được.
Lưu lượng của bạn đi qua router, ISP, cáp mà bạn không kiểm soát. Bất kỳ chặng nào, một sniffer cũng thấy login của bạn — gồm cả password — dạng plaintext.
Để ship, bạn sẽ đăng nhập, chạy lệnh, sửa file và chạm tới dịch vụ mà chỉ VPS thấy được. Bàn tay ở xa đó phải an toàn, không chỉ tiện.
SSH = Secure Shell. Nó làm đúng việc của telnet — remote login kèm shell — nhưng mã hoá toàn bộ cuộc hội thoại, nên đường dây chỉ toàn là mớ ký tự vô nghĩa.
Cùng một lần login — cái này ai cũng đọc được, cái kia không ai đọc được.
Telnet giao thông tin đăng nhập của bạn cho đường dây. SSH bọc toàn bộ phiên trong một đường hầm — từ password đến lệnh cuối cùng bạn gõ, không ai trên đường dây đọc được.
Ngay khi kết nối, không ai trên đường dây đọc được username, password hay bất kỳ lệnh nào. Đường hầm mới là ý cốt lõi.
ssh user@host đưa bạn vào một shell thật trên VPS. Gõ lệnh, lệnh chạy ngay trên đó, bạn thấy output — như thể đang ngồi trước máy đó.
scp và sftp copy file tới và từ VPS qua cùng kênh mã hoá — cùng mức an toàn, dùng để chuyển file thay vì gõ lệnh.
Port forwarding cho phép bạn chạm tới những thứ chỉ VPS thấy — một database trên mạng riêng — qua ống mã hoá.
Telnet là một cuộc hội thoại hét qua cánh đồng trống. SSH là cùng cuộc hội thoại trong một ống kín, mã hoá — cánh đồng không đọc được.
Lệnh đầu tiên, port tuỳ chỉnh, và prompt fingerprint bạn sẽ thấy đúng một lần mỗi server.
Port mặc định là 22; -p để đổi. Lần connect đầu hỏi bạn xác nhận fingerprint — quyết định 'tin server này' chỉ một lần.
Mỗi server SSH có một host key. Lần connect đầu nó trình ra fingerprint (hash ngắn của key đó) để bạn xác nhận đang nói chuyện với server đúng — không phải kẻ giả mạo.
Bạn đối chiếu fingerprint với giá trị nhà cung cấp đưa (console, email). Khớp? Gõ yes. Đó là toàn bộ bước tin tưởng.
Đã chấp nhận, fingerprint được ghi nhớ trên máy bạn. Các lần connect sau lặng lẽ — và nếu key server đổi, SSH sẽ cảnh báo rõ (nghi MITM).
Password dễ đoán, dễ lừa. Một cặp key là toán học không thể giả mạo. Cách setup — và cách khoá cửa sau lưng.
Bạn gõ một bí mật mà cả hai bên cùng biết. Nó có thể bị đoán, lộ, lừa hay dùng lại. Mỗi lần login, bí mật đó đều đi qua mạng — có mã hoá, nhưng vẫn là bí mật đang di chuyển.
Bạn tạo private key (bí mật) và public key (danh tính). Server chỉ lưu public key. Login chứng minh bạn giữ private key — không bí mật nào di chuyển.
ssh-keygen tạo private key (giữ kỹ — không chia sẻ) và public key tương ứng. Chấp nhận mặc định hoặc thêm passphrase.
ssh-copy-id gửi PUBLIC key của bạn tới server và thêm vào ~/.ssh/authorized_keys. Chỉ nửa public đi ra ngoài.
Giờ ssh không hỏi password — xác minh bạn bằng private key. Cùng mức an toàn, không phải gõ gì, và không có gì để lừa.
Hai lệnh trên laptop của bạn làm trọn việc. Private key ở lại đây; chỉ public key đến VPS.
Khi key đã chạy, bỏ con đường password để chỉ key vào được. Một dòng, và password trở nên vô nghĩa.
Trong /etc/ssh/sshd_config, đặt PasswordAuthentication no. Khởi động lại dịch vụ SSH. Từ đó, chỉ login bằng key được chấp nhận.
Hãy chắc chắn login key chạy được TRƯỚC khi tắt password — và mở sẵn một console của nhà cung cấp làm phương án dự phòng. Tự khoá mình ngoài cửa là kẹt luôn.
Không password = không gì để brute-force, lừa hay stuff. Kẻ tấn công tìm thấy server vẫn không vào được nếu không có private key.
Cùng kênh mã hoá, giờ cho file. Một để copy, một để duyệt, một để đồng bộ.
Như cp nhưng trên mạng. scp file user@host:/path copy file tới (hoặc từ) VPS qua kênh mã hoá. Một lệnh, xong.
Một file shell tương tác. sftp user@host đưa bạn vào prompt nhỏ, nơi bạn ls, cd, get, put — người anh em an toàn hơn của ftp.
Con ngựa thồ cho việc lớn. rsync so hai phía, chỉ chuyển phần thay đổi — dừng giữa chừng vẫn chạy tiếp được, nhanh, và chạy qua ssh được.
# scp: copy a file TO the VPS
scp deploy.py deploy@203.0.113.10:/home/deploy/
# scp: copy a file FROM the VPS
scp deploy@203.0.113.10:/var/log/app.log ./app.log
# sftp: interactive file shell
sftp deploy@203.0.113.10
sftp> ls
sftp> get app.log
sftp> bye
# rsync: sync a folder over ssh
rsync -avz --progress ./site/ deploy@203.0.113.10:/var/www/site/
scp là một lượt (tới/từ), sftp là shell tương tác để duyệt và get/put, và rsync là đồng bộ so-sánh có thể tiếp tục — tất cả qua cùng kênh mã hoá.
Mô hình trong đầu: một đường hầm chạy QUA kết nối SSH mã hoá của bạn để chạm tới những thứ chỉ VPS thấy.
Local forward (-L): laptop của bạn → SSH mã hoá → VPS → mạng riêng → database.
Bạn trỏ DB client tới 127.0.0.1:5432 (localhost). SSH mang lưu lượng đó, mã hoá, xuyên tới database riêng trên mạng nội bộ của VPS — thứ mà internet không chạm tới được. Không port công khai, không phơi ra.
ssh -L 5432:10.0.0.5:5432 user@vps mở port 5432 trên laptop CỦA BẠN; mọi thứ gửi tới đó được đưa qua hầm, mã hoá, tới 10.0.0.5:5432 theo cách VPS nhìn. Chạm tới DB riêng mà không bao giờ phơi nó ra.
Gương ngược — mở một port trên VPS, dẫn ngược về máy của bạn qua hầm. Hữu ích khi phía kia không thể chạm tới bạn trực tiếp.
Mở một SOCKS proxy cục bộ; app nào trỏ tới nó sẽ định tuyến toàn bộ lưu lượng qua VPS. Phiên bản đa dụng của cùng một ý tưởng.
Cú hích cho trải nghiệm hằng ngày: đặt tên server một lần, rồi ssh myvps và đi. Không phải gõ hostname, port hay path key mỗi lần.
# ~/.ssh/config — one block per server
Host myvps
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
# now this just works:
ssh myvps
Định nghĩa một Host alias một lần với HostName, User, Port và IdentityFile — sau đó ssh myvps, scp file myvps:/path và ssh -L ... myvps đều dùng nó tự động.
ssh myvps thay vì ssh -i ~/.ssh/id_ed25519 deploy@203.0.113.10. Ngắn, dễ nhớ, khó gõ sai. Mọi tool nhận host (ssh, scp, sftp) đều tôn trọng alias.
Đổi port hay path key một lần trong file là mọi lệnh tự cập nhật. Server mới? Thêm một block Host. Mở rộng từ một VPS lên mười mà không phải ghi nhớ gì.
Alias mang theo User, Port và IdentityFile — nên đường hầm (ssh -L ... myvps), copy (scp x myvps:/path) và mọi thứ khác kế thừa config miễn phí.
Rút xa ra. SSH không phải đống cờ — nó là một mối quan hệ an toàn với VPS của bạn.
Đăng nhập, chạy lệnh, chuyển file, chạm tới những thứ riêng — tất cả mã hoá, tất cả từ laptop. Nó là kênh duy nhất để bạn quản trị VPS.
Login bằng key (để không có gì để lừa hay đoán) và đường hầm (để thứ riêng vẫn riêng). Thành thạo hai cái đó, phần còn lại của SSH chỉ là tiện ích đi kèm.
SSH là cái bắt tay giữa bạn và VPS — mã hoá từ byte đầu đến byte cuối. Làm đúng key và đường hầm, phần còn lại tự viết.
ssh user@host, key thay password, một đường hầm tới thứ riêng — và một alias trong ~/.ssh/config để bạn không bao giờ phải gõ lại tất cả.