明天我需要向某人展示一个在我本地机器上运行的网站。通常我会通过在本地路由器上进行端口转发来实现这一点,但由于硬件故障及其更换很糟糕,我当前的路由器不允许我进行端口转发。
因此,坚持这种延迟并且不想将整个事情推送到合适的服务器上,我有一个疯狂的想法:我可以通过 SSH 将我的端口转发到外部服务器吗?
我以前做过端口隧道,但我通常以正确的方式进行:
我想做什么:
Lek*_*eyn 105
将端口 80 从本地机器 ( localhost)转发到端口 8000 上的远程主机的命令是:
ssh -R 8000:localhost:80 oli@remote-machine
Run Code Online (Sandbox Code Playgroud)
这需要对 SSH 服务器进行额外的调整,将这些行添加到/etc/ssh/sshd_config:
Match User oli
GatewayPorts yes
Run Code Online (Sandbox Code Playgroud)
接下来,通过服务器执行重新加载配置sudo reload ssh。
该设置GatewayPorts yes使 SSH 将端口 8000 绑定到通配符地址,因此它可用于remote-machine( remote-machine:8000)的公共地址。
如果您需要选择不绑定通配符地址上的所有内容,请更改GatewayPorts yes为GatewayPorts clientspecified。因为ssh默认绑定回环地址bind_address,所以绑定通配符地址需要指定一个空:
ssh -R :8000:localhost:80 oli@remote-machine
Run Code Online (Sandbox Code Playgroud)
在:以前8000,如果是强制GatewayPorts设置为clientspecified你希望允许公众访问remote-machine:8000。
相关手册摘录:
-R [bind_address:]port:host:hostport
指定远程(服务器)主机上的给定端口要转发到本地端的给定主机和端口。这是通过分配一个套接字来侦听远程端的端口来实现的,每当与该端口建立连接时,该连接就会通过安全通道转发,并从本地计算机建立到主机端口 hostport 的连接。默认情况下,服务器上的侦听套接字将仅绑定到环回接口。这可以通过指定 bind_address 来覆盖。空的 bind_address 或地址“*”表示远程套接字应侦听所有接口。只有启用了服务器的 GatewayPorts 选项(请参阅 sshd_config(5)),指定远程 bind_address 才会成功。
GatewayPorts
指定是否允许远程主机连接到为客户端转发的端口。GatewayPorts 可用于指定 sshd 应允许远程端口转发绑定到非环回地址,从而允许其他主机连接。参数可以是“no”强制远程端口转发仅对本地主机可用,“yes”强制远程端口转发绑定到通配符地址,或“clientspecified”允许客户端选择地址转发是绑定的。默认值为“否”。
也可以看看:
小智 17
如果服务器有GatewayPorts no,则在客户端ssh -g -L 8001:localhost:8000 oli@remote-machine执行ssh -R命令后,您可以通过在服务器上执行来获得相同的结果。这将使服务器上的环回端口 8000 可在端口 8001 上的所有接口上访问。
| 归档时间: |
|
| 查看次数: |
70252 次 |
| 最近记录: |