Tre*_*lph 225 ssh openssh ssh-tunnel
回到这个问题,我正在通过 OpenSSH (Client: Mac OS X 10.6 | Server: Linux Mint) 执行以下操作,但是被隧道连接的端口没有公开工作:
ssh -R 8080:localhost:80 -N root@example.com
Run Code Online (Sandbox Code Playgroud)
localhost
,而不是所有接口上localhost
在远程计算机上打开端口时它可以工作,但是当尝试从我的本地计算机访问远程计算机的公共 IP 时,该端口似乎没有打开我如何在 IP 上公开隧道供任何人访问?
Ste*_*del 444
如果您查看 ssh 的手册页,您会发现其语法-R
如下:
-R [ bind_address:]端口:主机:HOSTPORT
当bind_address
被省略(如在你的例子),端口绑定只回送接口上。为了使其绑定到所有接口,请使用
ssh -R \*:8080:localhost:80 -N root@example.com
Run Code Online (Sandbox Code Playgroud)
或者
ssh -R 0.0.0.0:8080:localhost:80 -N root@example.com
Run Code Online (Sandbox Code Playgroud)
或者
ssh -R "[::]:8080:localhost:80" -N root@example.com
Run Code Online (Sandbox Code Playgroud)
第一个版本单独绑定到所有接口。第二个版本创建了一个通用的 IPv4-only 绑定,这意味着端口可以通过 IPv4 在所有接口上访问。第三个版本在技术上可能与第一个版本相同,但它再次只创建一个绑定到::
,这意味着端口可以通过本机 IPv6 访问,也可以通过 IPv4 通过IPv4 映射的 IPv6 地址访问(不适用于 Windows,OpenBSD) . (您需要引号,因为[::]
否则可能会被解释为 glob。)
请注意,如果您使用 OpenSSHsshd
服务器,则GatewayPorts
需要启用服务器的选项(clientspecified
或在极少数情况下,启用yes
)才能使其工作(检查/etc/ssh/sshd_config
服务器上的文件)。否则(此选项的默认值为no
),服务器将始终强制端口仅绑定在环回接口上。
sna*_*hoe 44
-g
适用于本地转发端口,但您想要的是反向/远程转发端口,这是不同的。
你想要的是这个。
本质上,在example.com
,设置GatewayPorts=clientspecified
在/etc/ssh/sshd_config
。
使用 -g 选项。从 ssh 的手册页:
-g Allows remote hosts to connect to local forwarded ports.
Run Code Online (Sandbox Code Playgroud)
Mig*_*ing 18
这是我的完成答案:
我最终ssh -R ...
用于隧道,并socat
在此基础上用于将网络流量重定向到127.0.0.1
:
隧道绑定到 127.0.0.1:
ssh -R mitm:9999:<my.ip>:8084 me@mitm
社交:
mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999
其他选择是在此基础上做一个仅限本地的隧道,但我发现这要慢得多
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
小智 13
如果您不想或可以更改 /etc/ssh/sshd_config,您也可以使用双转发。
首先转发到远程机器上环回设备上的临时端口(例如 10080),然后使用本地转发将端口 10080 重定向到所有接口上的 80:
ssh -A -R 10080:localhost_or_machine_from:80 user@remote.tld "ssh -g -N -L 80:localhost:10080 localhost"
Run Code Online (Sandbox Code Playgroud)
使用“网关端口”选项。
ssh -g -R REMOTE_PORT:HOST:PORT ...
为了使用它,您可能需要GatewayPorts yes
在服务器的/etc/ssh/sshd_config
.