Những gì bạn đang tìm kiếm được gọi là một đường hầm ngược. ssh
cung cấp nó thông qua công -R
tắc:
-R [bind_address:]port:host:hostport
Specifies that the given port on the remote (server) host is to
be forwarded to the given host and port on the local side. This
works by allocating a socket to listen to port on the remote side,
and whenever a connection is made to this port, the connection is
forwarded over the secure channel, and a connection is made to host
port hostport from the local machine.
Khi OP phát hiện ra với câu trả lời của họ, cú pháp như sau:
$ ssh -f -N -R vvv:localhost:22 w.x.y.z
Thí dụ
Tôi có 2 máy tính trên mạng, lappy
và remotey
. Vì vậy, tôi chạy lệnh sau trên lappy
:
$ ssh -f -N -R 12345:localhost:22 remotey
Tôi có thể xác nhận rằng nó hoạt động:
$ ps -eaf|grep "[l]ocalhost:22"
saml 27685 1 0 11:10 ? 00:00:00 ssh -f -N -R 12345:localhost:22 remotey
Bây giờ nếu tôi ssh
tách riêng với hệ thống từ xa remotey
và chạy lệnh này, tôi có thể thấy rằng hiện tại nó đang chấp nhận các kết nối trên cổng 12345 trên giao diện cục bộ của hệ thống từ xa:
$ netstat -an|grep :12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
tcp 0 0 ::1:12345 :::* LISTEN
Kiểm tra kết nối
Bạn có thể thấy rằng đường hầm ssh ngược đang hoạt động như sau.
đăng nhập vào remotey
[user@lappy ~]$ ssh remotey
kiểm tra cổng hầm ngược
[user@remotey ~]$ ssh -p 12345 localhost
bây giờ nên trở lại với lappy
user@localhost's password:
Last login: Thu Aug 1 17:53:54 2013
/usr/bin/xauth: creating new authority file /home/user/.Xauthority
[user@lappy ~]$
Các cổng trên các giao diện khác ngoài localhost ( lo
)?
Bạn có thể gãi đầu nếu bạn thử một lệnh như thế này và nó dường như không hoạt động hoặc nó luôn liên kết với một cổng trên lo
giao diện localhost ( ).
Ví dụ:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
LƯU Ý: Lệnh này nói để mở cổng 12345 @ remotey và đường hầm bất kỳ kết nối nào đến cổng 22 @ lappy.
Sau đó trên remotey:
remotey$ netstat -an|grep 12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
Những gì đang diễn ra là sshd
cấu hình không cho phép bạn làm điều này. Trong thực tế không có tính năng này được kích hoạt ( GatewayPorts
), bạn sẽ không thể liên kết bất kỳ ssh
cổng đường hầm nào với bất cứ thứ gì ngoại trừ localhost.
Kích hoạt GatewayPorts
remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no
Để kích hoạt nó, chỉnh sửa tập tin này /etc/ssh/sshd_config
:
GatewayPorts clientspecified
Và khởi động lại sshd
:
remotey$ sudo service sshd restart
Bây giờ hãy thử lại và chúng ta sẽ thấy hiệu quả sau:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
Và kiểm tra lại lần này trên remotey:
remotey$ netstat -anp | grep 12345
tcp 0 0 192.168.1.3:12345 0.0.0.0:* LISTEN 9333/sshd
LƯU Ý: Ở phần trên chúng ta có thể thấy rằng sshd
quy trình hiện đang lắng nghe trên giao diện có địa chỉ IP 192.168.1.3, cho các kết nối trên cổng 12345.
Kiểm tra kết nối (phần deux)
Bây giờ với thiết lập đã thay đổi của chúng tôi khi chúng tôi kiểm tra lần này. Sự khác biệt chính là chúng ta không còn phải kết nối với localhost!
đăng nhập vào remotey
[user@lappy ~]$ ssh remotey
kiểm tra kết nối ngược
[user@remotey ~]$ ssh -p 12345 remotey
bây giờ nên trở lại với lappy
root@remotey's password:
Last login: Wed Aug 21 01:49:10 2013 from remotey
[user@lappy ~]$
Tài liệu tham khảo