youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
Một lát sau:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
Những gì bạn có thể làm là thế này: ở bước 1 chuyển tiếp một cổng từ xa từ PC văn phòng đến máy chủ ( 12345
được sử dụng làm ví dụ, bất kỳ cổng nào> 1024 nên làm). Bây giờ kết nối với 12345 trên máy chủ sẽ kết nối bạn với cổng 22 trên officepc.
Ở bước 2, chuyển tiếp cổng 23456 từ máy chủ của bạn sang 12345 trên máy chủ (từ đó nó được chuyển tiếp đến officepc: 22, như được thiết lập ở bước 1)
Ở bước 3, bạn kết nối với cổng cục bộ 23456 bằng thông tin đăng nhập PC văn phòng của bạn . Điều này được chuyển tiếp từ bước 2 đến cổng 12345 trên máy chủ của bạn và bước 1 đến PC văn phòng của bạn.
Lưu ý rằng tôi đang sử dụng autossh cho các chuyển tiếp, vì nó là một trình bao bọc ssh tự động kết nối lại đường hầm nếu nó bị ngắt kết nối; tuy nhiên ssh bình thường cũng sẽ hoạt động, miễn là kết nối không bị rớt.
Có một lỗ hổng có thể xảy ra: bất kỳ ai có thể kết nối với localhost: 12345 trên serverpc giờ đây có thể kết nối với officepc: 22 và cố gắng hack vào nó. (Lưu ý rằng nếu bạn đang chạy máy chủ SSH, dù sao bạn cũng nên bảo mật nó trên các biện pháp bảo vệ cơ bản được bật theo mặc định; tôi khuyên bạn ít nhất nên vô hiệu hóa đăng nhập gốc và vô hiệu hóa xác thực mật khẩu - xem ví dụ này )
Chỉnh sửa : Tôi đã xác minh điều này với cùng một cấu hình, và nó hoạt động. GatewayPorts no
chỉ ảnh hưởng đến các cảng mở ra thế giới tại các đường hầm lớn chứ không phải địa phương. Đây là những gì các cổng chuyển tiếp là:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
Vì vậy, liên quan đến ngăn xếp mạng, tất cả lưu lượng truy cập cục bộ trên các giao diện loopback tương ứng (cộng với các kết nối ssh với serverpc); do đó, GatewayPorts
không được kiểm tra
Tuy nhiên, có chỉ thị AllowTcpForwarding
: nếu đó là no
, thiết lập này sẽ thất bại vì không được phép chuyển tiếp, thậm chí không qua giao diện loopback.
Hãy cẩn thận :
nếu sử dụng autossh và ssh gần đây, bạn có thể muốn sử dụng ssh's ServerAliveInterval
và ServerAliveCountMax
để giữ cho đường hầm lên. Autossh có một kiểm tra tích hợp, nhưng rõ ràng nó có một số vấn đề trên Fedora. -M0
vô hiệu hóa điều đó và -oServerAliveInterval=20 -oServerAliveCountMax=3
kiểm tra xem có kết nối không - thử mỗi 20 giây, nếu nó bị lỗi 3x liên tiếp, dừng ssh (và autossh tạo một kết nối mới):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
Có thể hữu ích để khởi động lại đường hầm ssh nếu chuyển tiếp không thành công, bằng cách sử dụng -oExitOnForwardFailure=yes
- nếu cổng đã bị ràng buộc, bạn có thể nhận được kết nối SSH đang hoạt động, nhưng không có đường hầm chuyển tiếp.
~/.ssh/config
Nên sử dụng cho các tùy chọn (và cổng), nếu không thì các dòng lệnh quá dài dòng. Ví dụ:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
Sau đó, bạn có thể sử dụng chỉ bí danh máy chủ:
autossh -M0 fwdserverpc