ssh tunnel 连线 port 转发
Ubuntu 系统网路 ssh 指令进行连线的本地端 ssh tunnel,将资料 port 转发至远端主机
Categories:
有些主机会因为安全性的疑虑,所以关闭对外连线的 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.1
的 33306
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\>'
参考资料
- How to Set up SSH Tunneling (Port Forwarding) | Linuxize
- How to Use SSH Port Forwarding {Ultimate Guide}
- How to Create SSH Tunneling or Port Forwarding in Linux
- [教学] 透过 SSH Tunnel 将伺服器内部服务绑定到本机电脑上 | 辛比誌