1. Bối cảnh
Trong quản trị hệ thống hoặc làm việc với các máy chủ từ xa, việc truy cập vào một máy chủ mục tiêu đôi khi không thể thực hiện trực tiếp do các hạn chế mạng, tường lửa, hoặc yêu cầu bảo mật. Để giải quyết vấn đề này, SSH cung cấp các cơ chế như ProxyJump và ProxyCommand, cho phép kết nối qua một máy chủ trung gian (bastion host) để đến máy chủ đích. Bài viết này sẽ giải thích hai khái niệm này, cách sử dụng, và so sánh để bạn chọn phương pháp phù hợp.
2. Khái niệm và cách sử dụng
2.1. ProxyJump
ProxyJump là một tính năng được giới thiệu trong OpenSSH phiên bản 7.2 (2016), cho phép thiết lập kết nối SSH thông qua một hoặc nhiều máy chủ trung gian một cách đơn giản. Nó sử dụng cú pháp trực quan trong lệnh SSH hoặc tệp cấu hình ~/.ssh/config
ssh -J user@bastion_host user@target_host
Trong đó:
-J: Chỉ định máy chủ trung gian (bastion host).
user@bastion_host: Tài khoản và địa chỉ của máy chủ trung gian.
user@target_host: Tài khoản và địa chỉ của máy chủ đích.
Sử dụng cấu hình
~/.ssh/config
:Host bastion_host HostName bastion_host_ip User bastion_user IdentityFile ~/.ssh/private-key.pem Host target_host HostName target_host_ip User target_user ProxyJump user@bastion_host
Sau khi cấu hình, chỉ cần run command:
ssh target_host
2.2. ProxyCommand
ProxyCommand là một phương pháp linh hoạt hơn, cho phép sử dụng một lệnh tùy chỉnh để thiết lập kết nối SSH qua máy chủ trung gian. Nó thường được dùng trong các trường hợp phức tạp hoặc khi cần tích hợp với các công cụ khác (như nc hoặc socat).
ssh -o ProxyCommand="ssh -W %h:%p user@bastion_host" user@target_host
Trong đó:
-o ProxyCommand: Chỉ định lệnh để thiết lập kênh kết nối.
-W %h:%p: Chuyển tiếp kết nối đến host (%h) và port (%p) của máy chủ đích.
Sử dụng cấu hình
~/.ssh/config
:Host bastion_host HostName bastion_host_ip User bastion_user IdentityFile ~/.ssh/private-key.pem Host target_host HostName target_host_ip User target_user ProxyCommand ssh -W %h:%p user@bastion_host
Sau khi cấu hình, chỉ cần run command:
ssh target_host
3. So sánh
3.1. Khi nào dùng ProxyJump?
Bạn cần một giải pháp nhanh, dễ cấu hình.
Môi trường sử dụng OpenSSH phiên bản mới (7.2 trở lên).
Chỉ cần nhảy qua một hoặc vài máy chủ trung gian mà không yêu cầu xử lý phức tạp.
Ví dụ: Truy cập máy chủ nội bộ qua một bastion host trong mạng công ty.
3.2. Khi nào dùng ProxyCommand?
Bạn cần tích hợp với các công cụ hoặc kịch bản phức tạp (như sử dụng nc để chuyển tiếp qua mạng cụ thể).
Môi trường sử dụng phiên bản OpenSSH cũ không hỗ trợ ProxyJump.
Cần xử lý các trường hợp đặc biệt, như kết nối qua VPN hoặc proxy SOCKS. (Xem thêm ở bài viết này)
Ví dụ: Kết nối đến máy chủ đích qua một mạng phức tạp với nhiều bước chuyển tiếp không chuẩn.