有三台机器A,B,C ,A和B分别处于一个局域网内,C是一个允许Linux的公网服务器,如果通过ssh命令让A通过C访问B的指定端口?
要让机器A通过机器C访问机器B的指定端口,并且使用SSH,你可以设置一个SSH隧道。SSH隧道允许你通过SSH连接转发TCP端口。在这个例子中,你需要设置一个反向SSH隧道从机器B到机器C,然后在机器A上设置一个本地端口转发到机器C上的隧道端口。
这里是如何设置的步骤:
1. 在机器B上设置反向SSH隧道到机器C
首先,你需要在机器B上设置一个反向SSH隧道到机器C。你可以使用ssh命令的-R选项来做到这一点。
在机器B上执行以下命令:
bash
ssh -fN -R <local_port_on_C>:<host_or_ip_of_B>:<port_on_B> user@C -p C的端口
<local_port_on_C> 是你希望在机器C上打开的端口,用于转发到机器B的<port_on_B>。
<host_or_ip_of_B> 是机器B的IP地址或主机名。
<port_on_B> 是机器B上你想要访问的端口。
user@C 是机器C上的用户名和机器C的地址。
例如,如果你想要转发机器B上的22端口(SSH端口)到机器C上的3306端口,你可以这样做:
ssh -fN -R 3306:127.0.0.1:22 user@C -p C的端口
2. 在机器A上设置本地端口转发到机器C
现在,你需要在机器A上设置一个本地端口转发,将某个本地端口转发到机器C上的<local_port_on_C>。这样,当你连接到机器A的这个本地端口时,流量会被转发到机器C,然后通过SSH隧道转发到机器B。
在机器A上执行以下命令:
bash
ssh -L <local_port_on_A>:<host_or_ip_of_B>:<local_port_on_C> user@C -p C的端口
<local_port_on_A> 是机器A上的本地端口,用于接收连接。
<host_or_ip_of_B> 和 <local_port_on_C> 应该是你在机器B上设置的反向SSH隧道时使用的相同值。
user@C 是机器C上的用户名和机器C的地址。
例如,如果你想要在机器A上使用本地端口4444来访问机器B的22端口,并且机器C上的隧道端口是3306,你可以这样做:
ssh -L 4444:127.0.0.1:3306 user@C -p C的端口