使用 SSH 进行端口转发

本文地址:https://blog.lucien.ink/archives/484/

0. 背景

有时,在软件开发、测试的时候需要连接数据库,于是就会在数据库配置文件中填入测试服务器的地址等信息,一不小心就会连同测试服务器的信息一起上传至 GitHub。

为了避免这种情况,我更青睐于将测试服务器的地址伪装起来,通过修改 /etc/hosts 来用一个不存在的域名指向测试服务器。

但在 GitHub Actions 里并不能修改 hosts 文件,所以我在想能不能在本地搭建一个 MySQL 服务器,可这样无论如何都不是一个非常好的办法。

好在还有一种方法,能通过 SSH 使得本机和服务器之间建立一个隧道,访问本机的时候就等价于访问服务器,这样一来可以直接通过访问本机的某个端口来访问远端的端口啦。

1. 命令

命令格式为:

ssh -L <local port>:<remote_0 host>:<remote_0 port> <remote_1 username>@<remote_1 host>

假定 client 是本地主机,remote_0 是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台 remote_1,可以同时连通前面两台主机。因此,很自然的想法就是,通过 remote_1,使得 client 可以访问 remote_0。

执行完上面的命令之后,访问 localhost:<local port> 就等价于访问 <remote_0 host>:<remote_0 port>

假如我们要用本机的 3306 端口代理 192.168.123.1233306 端口,执行命令:ssh -L 3306:192.168.123.123:3306 username@192.168.123.123 即可。

最后修改:2019 年 11 月 16 日
谢谢老板!