quinnwencn / blog

Apache License 2.0
0 stars 0 forks source link

[tips] ssh反向隧道连接内网 #52

Open quinnwencn opened 4 days ago

quinnwencn commented 4 days ago

需要访问内网或者家里的PC等没有公网IP的电脑时,除了安装teamviewer等商用软件外,其实还可以通过ssh反向隧道连接,依赖是一个公网IP的服务器。我们举例家里有一台电脑A,有一个公网服务器B,然后希望在另外的地方通过电脑C连接电脑A。我们可以通过A主动连接到公网电脑B,然后通过公网电脑B建立一个端口转发,从而使得C可以通过公网电脑B访问电脑A。 具体步骤如下:

  1. 在电脑A上建立反向SSH隧道

    ssh -p 10000 -R 2222:localhost:22 userB@ip_of_pcB

    这里的参数解释如下:

    • -p 10000:指定端口B的ssh端口是10000,如果没有修改过配置,应该是22
    • -R 2222:localhost:22:将服务器B的2222端口转发到电脑A的22端口
    • userB@ip_of_pcB:连接电脑B的用户名和公网ip地址
  2. 在电脑C上通过公网服务器B转发数据

    ssh -p 10000 -L 3333:localhost:2222 userB@ip_of_pcB

    参数解释:

    • -p 10000:与步骤1相同
    • -L 3333:localhost:2222:将电脑C的本地端口3333转发到服务器B的2222端口
    • userB@ip_of_pcB:与步骤1相同
  3. 通过电脑C连接电脑A:

    ssh -p 3333 userA@localhost

    PS:如果服务器B开启了非对称密钥验证,那么步骤1和2需要通过-i选项选择本地的私钥,前提是已经把电脑A和C的ssh公钥拷贝到服务器B上