使用SSH的端口转发 从外网连接局域网内的主机

2,619 阅读2分钟

当我们在家或者别的地方,怎么使用ssh连接局域网内的远程主机,而实现加班(手动狗头)的愿望的时候,应该怎么操作呢?

SSH端口转发

机器A:处于内网(局域网),可以连接机器B 机器B:处于公网(广域网),不可以连接B(需要有公网IP)

在机器A上:

# N 选项为不执行命令,仅转发
# f 选项为后台运行
# username_B 是机器B的用户名
# remote_server_IP_B 是B的公网IP地址
ssh -NfR 2222:localhost:22 username_B@remote_server_IP_B
机器A的ssh客户端向22端口发起TCP请求,将连接转发(反向代理)到机器B的2222端口上。

在机器B上

# username_A 是机器A的用户名
ssh username_A@localhost -p 2222

这样就可以大功告成了!

三台机器的SSH端口转发

机器A:处于内网(局域网),可以连接机器B
机器B:处于公网(广域网),不可以连接B,没有公网IP(使用的动态IP,例如连接WIFI的笔记本)
机器C:处于公网(广域网),不可以连接B,有公网IP(例如云服务器主机的网络,有公网IP)

现有需求:B连接处于内网中的A

在机器A上:

# username_C 是机器C的用户名
# remote_server_IP_C 是C的公网IP地址
ssh -NfR 2222:localhost:22 username_C@remote_server_IP_C
机器A的ssh客户端向22端口发起TCP请求,将连接转发(反向代理)到机器C的2222端口上。

在机器B上:

# username_A 是机器A的用户名
# remote_server_IP_C 是C的IP地址 ssh username_A@remote_server_IP_C -p 2222

当两台机器的转发测试成功,但是三台机器的转发出现错误时候,可能需要修改机器C的的/etc/sshd_config
# no 修改为 yes
GatewayPorts yes

参考

SSH端口转发