因为疫情的关系,我们只能在家远程办公,但是开发环境的数据库在公司内网中。对于动辄几十上百GB的数据库,要同步到自己的电脑上是非常耗时且占用本地空间的。
原理说明
SSH 端口转发是在指定的计算机上建立 SSH 连接通道,从而转发数据。因为 SSH 通信本身是加密的,所以安全上有所保证,但是并不意味着绝对的安全(如中间人攻击)。所以在第一次建立连接时,远端主机会将共钥指纹
发送给建立连接的对端,为了避免中间人攻击,可以事先将远端服务器的共钥指纹告诉客户端,这样客户端可以辨别是否在建立连接时,存在中间人。
本地端口转发
1 | $ ssh -L [本地主机:]本地端口:目标主机:目标主机端口 [用户名@]SSH服务器 |
注意:目标主机是相对于 SSH 服务器的,例如上面的目标主机可以是 localhost,也就是 example.com 自己。
当按下会车后,后面的流程和普通 SSH 一样。
远程端口转发
如上图,Server 1 需要访问 Server 2 的服务,但是二者无法直接通信,Server 3 可以同时和 Server 1 以及 Server 2 通信,但是因为 Server 3 处于内网, Server 1 无法访问 Server 3。这种情况就需要使用远程端口转发来实现让 Server 1 通过 Server 3 转发数据到 Server 2 的对应端口。
1 | $ ssh -R [远程主机:]远程主机端口:目标主机:目标主机端口 [用户名@]SSH服务器 |
动态端口转发
这种方式多用于代理请求。
1 | $ ssh -D [本地主机:]本地端口 [用户名@]SSH服务器 |
所有到 8080 端口的数据将通过 SOCKS 转发到 example.com 代理。