1,安全策略
公司生产机器,肯定不能随便就访问的。一个常规思路是,我们搞一个跳板机,只有通过跳板机才能访问公司生产机器。然后每个用户分配一个跳板机账号密码,可以很好的细粒度权限控制以及追溯。
1.1,公司有个跳板机
这个跳板机只能公司内网ip(链接公司wifi后的ip)访问。
1.2,公司有很多生产机器
这些生产机器,都是不能直接访问的,必须先登录跳板机,然后才能登录其他机器。
1.3,出了公司,如何访问线上机器
vpn,先通过vpn,给自己建立一个公司内网ip的网络通道,后续网络数据都通过这个通道先转给公司内网,然后通过公司内网登录跳板机,最后通过跳板机登录公司其他生产机器。
2,通过跳板机建立隧道
正常情况下,1.2/1.3的方式是可以访问线上机器的。but,我们的代码是不能直接先登录跳板机然后登录线上机器的(比如mysql服务器)。
2.1 思路
如果搞个快捷方式
,我们代码看上去是直接访问某个线上ip,但是实际上做了两个步骤:自动先登录跳板机,然后通过跳板机登录线上机器。这种快捷方式
叫做隧道。
2.2 代理软件的作用
那么就需要借助一个代理软件建立隧道,此类代理软件很多:mac下比如ssh_tunnel/finalshell。
代理软件就是把一个本机能访问的avaliable_ip:port的访问,通过本机能访问的另一个proxy_ip:22,转发成另一个target_ip:port的访问。非常适用于2.1思路的实现,而跳板机就扮演者代理机proxy_ip的角色。
2.3 代理软件ssh_tunnel配置隧道
下图所示配置,可以配置一个隧道,这个隧道的效果是:你可以本地访问 127.0.0.1:19004 快捷方式一样访问 r-xxxx:6379这个端口。下面这个图对代理机器sshhost起的作用非常清晰,图中 forwards to 标示的虚线就是一个隧道。
2.4 代理软件finalshell配置隧道
同样如下图所示,配置的隧道效果是:你可以本机访问 127.0.0.1:10126 快捷访问 10.172.80.185:22 这个端口。具体原理和sshtunnel一样(参考上图)
3,一种本地debug的困境
我们正常情况下,是不需要跳板机访问线上数据库的能力的。因为数据库只需要线上服务器或开发机器能访问即可。
所以我们本地debug如果需要链接线上数据库,那么是不能直接通过跳板机建立隧道链接的。
3.1 思路
假如本机ip 设为 LOCAL;
跳板机ip 设为 JUMP;
开发机器服务器ip设为 DEV;
线上数据库服务ip设为 MYSQL;
本机对四个ip的关系是:可以访问LOCAL,可以访问JUMP,可以通过JUMP建立隧道访问DEV,可以通过JUMP建立隧道访问不了MYSQL(因为没有分配权限),可以通过JUMP建立隧道访问DEV后基于DEV再访问MYSQL。
那么我们本机通过两个代理软件,实现两级跳两个隧道
访问MYSQL。
首先通过finalshell使用JUMP作为代理机建立一个隧道,通过访问LOCAL:port1可以访问DEV:22,然后通过sshtunel使用LOCAL:port1(其实是DEV:22)作为代理机建立一个隧道,通过LOCAL:port2访问MYSQL。
然后代码即可直接使用LOCAL:port2访问线上数据库。