Remote Port Forwarding với SSH Tunnel

LAMP Feb 22, 2021

Đã có khi nào bạn gặp một vẫn đề như thế này chưa:
Bên khách hàng cung cấp cho bạn một remote server để demo website.
Nhưng website đó có một chức năng yêu cầu bộ nhớ của server lớn để  có thể hoạt động, lúc này remote server không thể đáp ứng được và khách không cung cấp một server mạnh hơn.

Để giải quyết vấn đề trên mình đã sử dụng SSH Tunnel với Remote Port Forwarding.

SSH Tunnel

Là một hương pháp tạo kết nối SSH được mã hóa giữa máy khách và máy chủ mà qua đó các cổng dịch vụ có thể được chuyển tiếp.

Remote Port Forwarding

Là một loại ssh tunnel, cho phép chuyển lưu lượng truy cập từ cổng được chỉ định trên remote server tới cổng được chỉ định trên máy đích của bạn.

Setup

Theo mặc định, SSH không cho phép remote port forwarding.
Bạn có thể kích hoạt nó bằng cách config GatewayPorts yes trong tệp cấu hình ở remote server.

Truy cập vào remote server. Chạy lệnh :
sudo vi /etc/ssh/sshd_config
Tìm đến config GatewayPorts đổi giá trị của nó thành yes
GatewayPorts yes
Lưu lại file. Sau đó khởi động lại sshd.
sudo service sshd restart

Tiếp theo. Ở máy local bạn thực hiện lệnh:
ssh -N -R remote_port:local_address:local_port username@remote_host
Chú thích:
- R: chỉ định remote port forwarding.
- remote_port : Cổng trên remote server mà bạn cho phép chuyển tiếp.
- local_address:local_port: Cổng và địa chỉ máy local.
- username@remote_host: địa chỉ remote server và ssh_user.
- N: Không thực hiện chế độ truy cập vào remote server.

Ví dụ:
ssh -N -R 8181:localhost:9090 user@remote_server_ip.

Từ giờ khi ai đó truy cập vào địa chỉ: remote_server_ip:8181 thì kết nối đó sẽ được chuyển tiếp đến ứng dụng đang chạy ở cổng 9090 trên máy local của bạn.( Hiểu đơn giản là dứng dụng ở cổng 9090 ở localhost có thể truy cập được qua cổng 8181 ở remote server).

Lưu ý:
+ Bạn có thể thêm flag -f để  thực hiện ở chế độ chạy nền.
+ Nếu remote server yêu cầu private key bạn sẽ phải thêm nó vào câu lệnh: ssh -i "private-key.pem" ...
+ nhớ mở port 8181 ở remote server để có thể truy cập nó từ bên ngoài.

Tổng kết

Việc sử dụng Remote Port Forwarding đã giải quyết bài toán nhỏ của mình và nó có thể sử dụng vào các mục đích khác. Hơn nữa SSH tunnel còn có 2 loại chuyển tiếp cổng khác: Local Port Forwarding, Dynamic Port Forwarding, nó sẽ có nhiều ứng dụng hay ho. Bạn có thể tìm hiểu thêm ở link dưới.

Tài liệu tham khảo
https://www.ssh.com/ssh/tunneling/

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.