IT序号网

ssh反向代理+正向代理

lxf 2021年05月25日 程序员 263 0

用一台能够公网访问的host作为跳板机,转发不同端口到内网目标机的ssh端口,进而实现ssh远程登录。

配置中将会用到的SSH参数:

反向代理 ssh -fCNR

正向代理 ssh -fCNL

-g:允许远程主机连接主机(host)的转发端口;

-f 后台执行ssh指令

-C 允许压缩数据

-N 不执行远程指令

-R 将远程主机(服务器)的某个端口转发到本地主机指定的端口

-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口

-p 指定远程主机的端口

准备工作

开启ssh的转发功能,以ubuntu server12.04为例,服务器默认是安装了openssh-server的,在/etc/ssh/sshd_config末尾追加一下命令:

GatewayPorts yes


重启ssh

service ssh restart

正向代理

正向代理的典型例子是主机(A)通过一台可以访问的主机(B)访问主机(C)提供的服务。 主机A不能直接访问主机C提供的服务,但是主机A可以访问主机B,主机B可以访问到主机C的服务,那我们可以在主机A上使用以下命令

ssh -CNfL a_port:c_ip:c_port b_user@b_ip


其中CNf都不是必须参数,C是对数据进行压缩,N代表不执行远程命令(尽量带上),f代表后台执行。
主机A可以通过访问自己的a_port端口来访问主机C的c_port端口,例如主机A要通过自己的6666端口访问主机C的80端口,则需要执行一下命令

ssh -CNfL 6666:c_ip:80 b_user@b_ip


我们可以将问题简化一些,假设主机B的某个端口不对外提供服务,只能够主机B自己访问,那么上述命令中的主机C和主机B将是一样的,命令将变为

ssh -CNfL a_port:b_ip:b_port b_user@b_ip 
ssh -CNfL a_port:localhost:b_port b_user@b_ip


以上两条命令是等价的,因为在第一个端口(a_port)后面的地址(b_ip)与端口(b_port)是相对于命令最末端的主机(b_ip)来说的,如果主机A是要用主机B来代理主机B的某项服务,那么第一个端口后写的主机地址为主机B的ip或者是localhost(127.0.0.1)是没有区别的。

可以看到正向代理是给自己代理提供服务的。

反向代理

反向代理与正向代理的原理产不多,都是用过ssh进行数据的传输,只是使用场景不同.反向代理的作用可以认为是把内网中的主机(A)暴露出来,以便于所有的主机都可以访问到主机A的服务

假定我们使用一台公网可以访问的主机(B)来给主机A做反向代理,那么命令如下

ssh -CNfR b_port:127.0.0.1:a_port b_user@b_ip


CNf与正向代理相同,也不是必须的,在主机A上使用以上命令,即可以把主机B的b_port端口映射到主机A的a_port端口。

举个简单的例子,主机A处于内网中,公网不能访问,在主机A上有一个http服务器,现在想让异地的朋友能够看到这个服务器上的内容,那我们就可以使用一下命令:

ssh -CNfR b_port:127.0.0.1:80 b_user@b_ip


b_port自己定义,不要冲突就行,之后我们通过b_ip:b_port就可以访问到主机A的http服务了。

总结一下就是反向代理是给其他用户代理提供服务的。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

jq