Giới thiệu
Có một vài trường hợp ta cần kết nối tới các tài nguyên nằm ở trên máy chủ nhưng vì vấn đề bảo mật nên các tài nguyên đó được đặt ở trên máy chủ có tường lửa (firewall) hoặc được đặt ở trong mạng kín (private network), nên ta không thể kết nối tới nó được.
Một vài công ty sẽ giải quyết vấn đề này bằng cách dựng VPN, hoặc đơn giản hơn ta sẽ sử dụng SSH Port Forwarding.
Local Port Forward
Cách sử dụng đầu tiên của SSH Port Forwarding là ta sử dụng nó để kết nối tới tài nguyên ở trên máy chủ mà có tường lửa.
Ví dụ ta có đoạn mã ở local đang cần kết nối tới con Redis ở máy chủ, tuy nhiên con máy chủ của ta bị chặn ở port 6379 bởi tường lửa nên từ bên ngoài ta không thể kết nối tới nó được. Ta sẽ sử dụng SSH Port Forwarding theo cú pháp như sau:
ssh -L localhost:<local-port>:localhost:<remote-address-port> <username>@<server-ip>
Ví dụ với máy chủ có IP là 172.168.65.117, username là ec2-user, trong đó có con Redis chạy ở port 6379.
ssh -L localhost:6379:localhost:6379 ec2-user@172.168.65.117
Ta có thể bỏ localhost
ở đầu.
ssh -L 6379:localhost:6379 ec2-user@172.168.65.117
Lúc này ở dưới local của ta sẽ mở port 6379, ta chỉ cần kết nối tới localhost:6379
thì có thể truy cập tới con Redis ở máy chủ.
Bastion Host
Cách sử dụng tiếp theo của SSH Port Forwarding là ta sử dụng nó để kết nối tới tài nguyên nằm ở trong Private Network.
Trường hợp này ta sẽ gặp nhiều nhất khi ta sử dụng Cloud, ví dụ với AWS thông thường ta sẽ tạo Amazon Relational Database Service (RDS) ở trong private network, tất nhiên là vì mạng kín nên ta sẽ không thể kết nối được tới RDS từ bên ngoài, cách phổ biến mọi người hay sử dụng là tạo con Bastion Host, và ta sẽ kết nối tới RDS thông qua con bastion host này.
Ta sẽ sử dụng SSH Port Forwarding theo cú pháp như sau:
ssh -L localhost:<local-port>:<remote-address>:<remote-address-port> <username>@<bastion-host-ip>
Ví dụ với bastion host có IP là 172.168.65.117, username của bastion host là ec2-user, địa chỉ của RDS là postgres.123456789012.us-east-1.rds.amazonaws.com
, chạy ở port 5432. Ta có thể bỏ localhost ở đầu:
ssh -L 5432:postgres.123456789012.us-east-1.rds.amazonaws.com:5432 ec2-user@172.168.65.117
Lúc này ở dưới local của ta sẽ mở port 5432, ta chỉ cần kết nối tới localhost:5432
thì có thể truy cập tới con RDS ở trong private network.
Kết luận
Ở trên là hai cách sử dụng phổ biến của SSH Port Forwarding, các bạn tham khảo các cách sử dụng khác ở đây: SSH Port Forwarding - Why and How. Mong rằng bài này sẽ hữu ích với các bạn.
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?