使用 SSH 进行端口转发
端口转发概述
端口转发(port forwarding),也称作是隧道(tunnel),可以用来将一台主机的网络端口转发到另外一台主机并由另一主机提供转发。
假设公司内网有一个集群,集群中只有堡垒机可以同时访问外网和内网,其他机器只能访问内网。我的开发机可以访问堡垒机但是无法直接访问内网,因此我如果想访问内网中某个机器提供的网络服务,可以选择:
- 在我的开发机上进行本地端口转发或动态端口转发
- 在堡垒机上进行远端端口转发
本地端口转发
使用 ssh 进行本地端口转发的命令格式如下:
1ssh -NL [bind_address:]port:host:hostport user@hostname
-N
参数表示该 SSH 连接不用于执行命令,在进行端口转发时建议加上该参数。-L
参数表示本地端口转发。bind_address
指定绑定到本地主机的地址,通常只有在本地主机有多个 IP 地址时才需要指定。port
指定本地主机的端口号。host
和hostport
分别指定目标主机地址和端口号。
远端端口转发
使用 ssh 进行远端端口转发的命令格式如下:
1ssh -NR [bind_address:]port:host:hostport user@hostname
-N
参数表示该 SSH 连接不用于执行命令,在进行端口转发时建议加上该参数。-R
参数表示远端端口转发。bind_address
指定绑定到远端主机的地址,通常只有在远端主机有多个 IP 地址时才需要指定。port
指定远端主机的端口号。host
和hostport
分别指定目标主机地址和端口号。
动态端口转发
使用 ssh 进行动态端口转发的命令格式如下:
1ssh -ND [bind_address:]port user@hostname
-N
参数表示该 SSH 连接不用于执行命令,在进行端口转发时建议加上该参数。-R
参数表示远端端口转发。bind_address
指定绑定到远端主机的地址,通常只有在远端主机有多个 IP 地址时才需要指定。port
指定远端主机的端口号。
总结
本文主要简单介绍了:
- 端口转发的概念、类型和使用场景
- 使用 ssh 命令进行端口转发