ssh tunnel 连线 port 转发

Ubuntu 系统网路 ssh 指令进行连线的本地端 ssh tunnel,将资料 port 转发至远端主机

有些主机会因为安全性的疑虑,所以关闭对外连线的 port,但如果我们可以透过 ssh 连线至主机时,可以透过 ssh tunnel

SSH Tunnel 指令

原理

=> SSH Tunnel 跳板(可以存取目标的主机) => 目标

指令

ssh -L <你的 port>:<目标 ip / dns>:<目标 port> <SSH Tunnel 跳板帐号>@<SSH Tunnel 跳板 ip / dns>

ssh -L <your-port>:<target-server-ip-or-dns>:<target-port> <ssh-tunnel-account>@<ssh-tunnel-ip-or-dns>

连线资料库范例

ssh -L 33306:mysql.kejyun.com:3306 kj@mysql.kejyun.com

连线完成后,就可以在本地端透过 127.0.0.133306 port 连线至远端的资料库

连线网页范例

ssh -L 8080:web.kejyun.com:80 kj@web.kejyun.com

连线完成后就可以在本地端透过 http://127.0.0.1:8080/ 连线至远端网页的 80 port

参数说明

说明 参数
建立本地端 port forwarding -L
背景执行 -f
不要执行远端指令 -N

不要执行远端指令并在背景执行范例

ssh -L 33306:mysql.kejyun.com:3306 -N -f kj@mysql.kejyun.com

SSH Tunnel 到不对外开放连线的主机

我们可能会有资料库主机完全没有对外连线,连 3306 port 都无法连线,但我们有允许其中一台 Web 主机可以连线至资料库,我们可以 SSH Tunnel 至该 Web 主机,再连线至资料库主机

我们允许主机 web.kejyun.com 可以连线至资料库 mysql.kejyun.com,但资料库 mysql.kejyun.com 主机是完全不对外开放的,可以使用 ssh 连线至 web.kejyun.com,再请求连线至资料库 mysql.kejyun.com 主机,指令会像这样

ssh -L <本地端 port>:<不对外开放资料库主机 ip / dns>:<资料库主机 port> <ssh 连线对外开放主机 ip / dns>

ssh -L 33306:mysql.kejyun.com:3306 -N -f kj@web.kejyun.com

除错

列出目前所有 SSH Tunnel

lsof -i -n | egrep '\<ssh\>'

参考资料