目标
从 C 机器使用 SSH 访问 A
描述:
C 外网设备
B 服务器局域网的出口设备
A 服务器局域网中的某台设备
解决方案
在 A 机器上做到 B 机器的反向代理;在 B 机器上做正向代理本地端口转发。
B机器开启两个接口:
<port_b1>:提供B->A的转发
<port_b2>:提供C->B的转发
机器号 | IP(举例) | 用户名 | 说明 | 解决方案 | 解释 |
---|---|---|---|---|---|
A (目标服务器) | 192.168.100.99 | usr_a | 目标服务器,在局域网中,可以访问 A | ssh -fCNR <port_b1>:localhost:22 [email protected] | <port_b1> 为 B 机器上端口,用来与 A 机器上的22端口绑定。 |
B(代理服务器) | 100.100.100.100 | usr_b | 代理服务器,在外网中,无法访问 A | ssh -fCNL ‘*:<port_b2>:localhost:<port_b1>’ localhost | <port_b2> 为本地转发端口,用以和外网通信,并将数据转发到 <port_b1>,实现可以从其他机器访问。 |
C(外网设备) | - | - | 可以直接访问 B,无法直接访问 A | ssh -p <port_b2> [email protected] | <port_b2>为B的对外接口 |
比如这里:
A-> ssh -CNR 9998:localhost:22 [email protected]
B-> ssh -CNL *:9999:localhost:9998 localhost
C-> ssh -p 9999 [email protected]
三者形成C->B,A->B的SSH代理转发。后台运行使用-f,改为-fCNR或-fCNL。
示例一:
A-> ssh -CNR 9998:localhost:22 [email protected]
B-> ssh -CNL *:9999:localhost:9998 localhost
C-> ssh -p 9999 [email protected]
示例二:
A-> ssh -CNR 19998:localhost:22 [email protected]
B-> ssh -CNL *:19999:localhost:19998 localhost
C-> ssh -p 19999 [email protected]
SSH 参数解释 | 解释 |
---|---|
-f | 后台运行 |
-C | 允许压缩数据 |
-N | 不执行任何命令 |
-R | 将端口绑定到远程服务器,反向代理 |
-L | 将端口绑定到本地客户端,正向代理 |