作者:明天会更好--好过_652 | 来源:互联网 | 2023-09-25 16:06
SSH端口转发-案例,命令及服务器配置三种转发类型本地转发-L远程转发-R动态转发-D简单理解:ABC三台机AC机器无法直接互通,但是B分别能和AC互通,所以AC通过B转发互通本地
SSH 端口转发 - 案例,命令及服务器配置
三种转发类型
简单理解: ABC三台机 AC机器无法直接互通, 但是B分别能和AC互通, 所以AC通过B转发互通
本地 SSH 端口转发
将远程 server 的某个端口映射到本地的某个端口,通常用于A机器通过B登录C , 因为无法直接连通C,但是B可以连通C的情况
(如果是跳板机登录其他服务器,可以使用-J 参数跳转)
访问路径: 自己或者同局域网用户 --> 本机:Port --> SSH隧道 --> 跳转机 --> 远程服务:Port
Command:
ssh -L [本地主机:]本地主机端口:远程网络主机:远程网络主机端口 转发服务器
ssh -L 0.0.0.0:8080:HOST_C:8080 root@HOST_A # 本地主机可以忽略不写,默认是127.0.0.1
ssh -L 127.0.0.1:8080:HOST_C:8080 root@HOST_A # 自查127.0.0.1和0.0.0.0区别
Example:
* `ssh -L 8000:10.10.30.3:10000 10.10.20.2` # 通过ssh 登录 10.10.20.2 ,将远程10.10.30.3的端口10000映射到本地计算机的8000端口上
* `ssh -L 10086::10086 10.10.20.2` # 将10.10.20.2的10086端口映射到本地
远程端口转发
将本机(或本地局域网中其他服务器)某个端口,映射到服务器的端口上,通常用于提供给外网访问(因为服务器有公网IP鸭)
访问路径: 用户 --> Server:Port —> SSH隧道 --> 本地主机端口 --> 本机服务端口(或局域网其他主机)
重要提示:
默认情况下,OpenSSH 只允许从服务器本机连接到远程转发端口,使用netstat -anlp 查看监听端口时能看到监听的是 127.0.0.1:Port
如何能让其他用户通过Server IP访问呢 ? 需要监听 0.0.0.0:Port
修改服务器的 /etc/ssh/sshd_config ,修改或添加一行,有如下三个可选项
GatewayPorts No (设默认只允许来自服务器主机的本地连接)
GatewayPorts Yes (Internet上的任何人都可以连接到远程转发端口)
GatewayPorts clientspecified (可以指定一个可以连接的IP地址,如果没有指定的话,则任何人都可以访问)
Command:
ssh -R [登录主机:]登录主机端口:本地网络主机:本地网络主机端口 代登录主机
Example:
ssh -R 10.10.20.2:3306:localhost:3306 10.20.20.2
# 将本地3306端口映射给远程10.20.20.2服务器的3306端口ssh -R 10.10.20.2:3306:192.168.2.5:3306 10.20.20.2
# 将本地局域网中192.168.2.5的3306端口映射给远程10.20.20.2服务器的3306端口ssh -o -R 0:localhost:3306 10.20.20.2
# 将本地3306端口映射给远程服务器的一个随机端口,连接后第一行输出会显示具体是哪个端口 ex:Allocated port 41389 for remote forward to localhost:3306ssh -R 52.194.1.73:8080:localhost:80 xxxxxx
# 此时只有 52.194.1.73 能够访问 xxxxx 的8080端口,前提要设置GatewayPorts clientspecified
服务器端配置
必须在服务器上启用 OpenSSH 服务器配置文件中的 AllowTcpForwarding
选项,才能允许远程端口转发。
不过默认情况下该功能是打开的。有如下可选项:
- yes 或 all,以允许所有 TCP 转发
- no,以防止所有 TCP 转发,本地允许本地转发,远程允许远程转发。
另一个选项是 AllowStreamLocalForwarding
,它可以用于转发 Unix 域套接字。它允许使用与 AllowTcpForwarding 相同的值。默认值是yes。
AllowTcpForwarding remote
AllowStreamLocalForwarding no
动态端口转发
无需固定指定被访问目标主机的端口号。这个端口号需要在本地通过协议指定,该协议就是简单、安全、实用的 SOCKS 协议。
简单讲就是, 通过sock代理将所有流量通过server转发. server能访问的ip,你也就都能访问了
Command:
ssh -D [本机:]本机端口
Example:
# 如何使用?
举例
* 浏览器设置sock代理为 server:端口
* ssh -o ProxyCommand='/usr/bin/nc -X 5 -x 127.0.0.1:5000 %h %p' user@host2 # 给ssh套上sock代理并通过代理登陆host2
注意事项
- 只要SSH不断开,连接就一直存在,同理断开SSH连接就会断开
- 如果不是以root身份设置端口转发的话,转发端口只能使用大于1024的端口号。