SSH隧道转发

本地转发

SSH客户端监听来自某个端口的连接,当它收到连接时,将请求通过隧道转发到SSH服务器;然后SSH服务器将请求转到目标端口。

1
ssh -L [bind_address:]localport:host:hostport remotehost

bind_address限制了ssh客户端的监听地址, localport表示监听ssh客户端的该端口, host是remotehost可以访问的地址, hostport是host所监听的端口

效果就是访问ssh客户端的localport可以访问host的hostport

bind_address通常有127.0.0.1 [::1] 0.0.0.0 [::] *, man里说省略这个参数=*, 我实测好像=localhost

image-20231115141140698

远程转发

适用于将ssh客户端所能访问的服务暴露给remotehost, 也就是内网穿透

1
ssh -R [bind_address:]port:host:hostport remotehost

bind_address好像没啥用, port是remotehost所监听的端口, host是ssh客户端网络范围内的地址, hostport是该host运行服务的端口

默认remotehost的/etc/ssh/sshd_configGatewayPorts no, 所以在remotehost中是127.0.0.1:port, 服务只能remotehost访问

修改GatewayPorts yes之后, 在remotehost中是0.0.0.0:port, 如果remotehost有公网IP, 就达到了内网穿透

动态端口转发

1
ssh -D 7890 remotehost

7890是ssh客户端监听的端口, 就可以使用ssh客户端ip:7890的socks5代理