ssh反向代理访问内网

有以下的使用场景和需求:

电脑A:办公室的一台服务器,处于公司内网中,没有公网ip,可以访问公网;

电脑C:家里的一台电脑,处于家里的内网中,没有公网ip,可以访问公网;

现在希望通过家里的电脑C,用ssh访问公司的电脑A,以实现远程办公。但是,电脑A和C都没有公网ip,不能直接访问。那么,需要

电脑B:有公网ip,能被电脑A和C访问,比如租用的阿里云。

实现原理是使用ssh的反向代理

实现步骤:

  1. 在电脑A上实现反向代理,使电脑A的端口a_port_0(一般是22)暴露给电脑B的端口b_port_0
    ssh -fCNR b_port_0:localhost:a_port_0 [email protected]
    注意:B.B.B.B是电脑B的公网ip
    如果电脑B是租用的阿里云,由于防火墙,端口b_port_0的选择有限,比如80;
  2. 在电脑C上ssh登录电脑B
    ssh -p b_port_1 [email protected]
    如果电脑B是租用的阿里云,端口b_port_1只能是22
    登录后,就有了电脑C登录电脑B的ssh窗口
    在此ssh窗口下运行命令,查看电脑A的反向代理
    netstat -tnl | grep 127.0.0.1
    如果电脑A的反向代理成功,应该能看到端口b_port_0的监听
    在此ssh窗口下,再用ssh登录电脑A
    ssh -p b_port_0 usr_a@127.0.0.1
    usr_a是电脑A的用户名,IP127.0.0.1是一个特定ip,固定的。
    至此,就有了电脑C登录电脑A的ssh窗口
    在此ssh窗口下,就能操作电脑A了
  3. 在电脑A和C之间拷贝文件,可以用scp命令把文件拷贝到电脑B上中转
    比如,新开一个电脑C登录电脑B的ssh窗口,拷贝电脑A的文件到电脑B
    scp -P b_port_0 usr_a@127.0.0.1:/path_a/file_a /path_b
    注意指定端口的-P是大写的P
  4. 如果使用git,可以在电脑B上建一个中转仓库,在电脑A和C上push和pull电脑B的仓库,来实现电脑A和C的git仓库同步

猜你喜欢

转载自my.oschina.net/kyle960/blog/1635081