ssh端口转发

前言

有时候由于网络策略的限制,我们无法直接访问目标服务,但有个中间服务器两边互通且可以ssh访问,这时候就可以借助ssh实现端口转发。

ssh端口转发一般有三种:本地端口转发、远程端口转发和动态端口转发

本地端口转发

假设A服务器部署了一个80端口的web服务,但是该服务器只开放了ssh端口22,想要访问web服务的话,可以通过ssh本地端口转发实现。

命令格式:

# 跳板机的ssh端口如果不是默认的22,需要使用 -p 选项指定端口号
ssh -L 本机闲置端口号:目标主机IP:目标主机端口 远程主机用户@远程主机IP
  1. 示例,本地想访问192.168.1.3的22端口,但只能直连192.168.1.2
# 12345是本机任意未被占用的端口号
ssh -L 12345:192.168.1.3:22 zhangsan@192.168.1.2
  1. 主机A测试
ssh -p 12345 lisi@localhost

远程端口转发

假设A服务器到B服务器无直连端口,A服务器也没对B服务器开放ssh端口,但是A服务器能通过ssh连接到B服务器。如果B服务器想要访问A服务器的80端口,借助远程端口转发即可实现。

# A服务器执行
ssh -R B服务器闲置端口:A服务器IP:A服务器的80端口 B服务器系统用户@B服务器IP
  1. 示例,本地(192.168.1.2)想要访问192.168.1.3的80端口,在192.168.1.3先执行:
ssh -R 8001:192.168.1.3:80 zhangsan@192.168.1.2
  1. 本地访问8001端口测试

注意

  1. sshd_config里要打开AllowTcpForwarding选项,否则-R远程端口转发会失败。
  2. 默认转发到远程主机上的端口绑定的是127.0.0.1,如要绑定0.0.0.0需要打开sshd_config里的GatewayPorts选项。

动态转发

假设内网环境只开放了A服务器的ssh端口可供连接,想要访问内网所有服务器且不配置多个本地端口转发的话,动态转发就可以实现,该功能也常被用做魔法上梯。动态转发建立的隧道网络协议为socks 5协议。

命令格式:

# 12345是本地任意未被占用的端口号
# 远程主机的ssh端口号默认为22,如果不是,则需要使用 -p 选项指定端口号
ssh -D 本地闲置端口号 远程主机用户@远程主机IP

其它

  • 每60秒发送一个keepalive请求,保证连接不会因为超时空闲而断开
ssh -o ServerAliveInterval=60
  • -L可同时指定多个代理规则
  • -N 不执行远程命令
  • -C 压缩所有数据
  • -f 放置后台运行
  • -T 不分配tty

参考

posted @ 2022-09-23 09:45  花酒锄作田  阅读(811)  评论(0编辑  收藏  举报