有以下的使用场景和需求:
电脑A:办公室的一台服务器,处于公司内网中,没有公网ip,可以访问公网;
电脑C:家里的一台电脑,处于家里的内网中,没有公网ip,可以访问公网;
现在希望通过家里的电脑C,用ssh访问公司的电脑A,以实现远程办公。但是,电脑A和C都没有公网ip,不能直接访问。那么,需要
电脑B:有公网ip,能被电脑A和C访问,比如租用的阿里云。
实现原理是使用ssh的反向代理。
实现步骤:
- 在电脑A上实现反向代理,使电脑A的端口a_port_0(一般是22)暴露给电脑B的端口b_port_0 ssh -fCNR b_port_0:localhost:a_port_0 usr_b@B.B.B.B 注意:B.B.B.B是电脑B的公网ip 如果电脑B是租用的阿里云,由于防火墙,端口b_port_0的选择有限,比如80;
- 在电脑C上ssh登录电脑B ssh -p b_port_1 usr_b@B.B.B.B 如果电脑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 usr_a是电脑A的用户名,IP127.0.0.1是一个特定ip,固定的。 至此,就有了电脑C登录电脑A的ssh窗口 在此ssh窗口下,就能操作电脑A了
- 在电脑A和C之间拷贝文件,可以用scp命令把文件拷贝到电脑B上中转 比如,新开一个电脑C登录电脑B的ssh窗口,拷贝电脑A的文件到电脑B scp -P b_port_0 usr_a:/path_a/file_a /path_b 注意指定端口的-P是大写的P
- 如果使用git,可以在电脑B上建一个中转仓库,在电脑A和C上push和pull电脑B的仓库,来实现电脑A和C的git仓库同步