SSH端口转发

蓝咒 提交于 2019-12-28 16:21:17
  • 端口转发两大功能
    • 加密SSH Client 端至SSH Server 端之间的通讯数据
    • 突破防火墙或内网的限制完成一些之前无法建立的TCP 连接

正向端口转发

  • L表示正向转发;-N 表示非不执行命令,只做端口转发;-f 表示在后台运行
ssh -NfL <local port>:<dest addr>:<dest port> <usr@jump addr>
# 举例
client$ ssh -NfL 1080:server:1081 jumpbox
  • client的1080端口通过跳板机jump转发到server的1081端口
    • 在client端建立转发连接
    • 数据传递过程
      • 首先数据会发送到本机1080端口
      • 再在本机开一个随机端口,充当ssh客户端,把数据流量发送到jumpbox22端口的ssh服务端
      • jumpbox收到数据以后,解密数据,临时开一个随机端口充当客户端,再把流量发送到server的1081端口
  • 本地到 ssh 跳板机这一段,是完全加密的。跳板机到服务器的这一段,依然是明文的

反向端口转发

  • -R表示反向转发
ssh -NfR <client port>:<dest addr>:<dest port> <usr@client addr>
# 举例
jump$ ssh -NfR 1080:server:1081 client
  • 主要针对内网的情况。本地计算机在外网,ssh 跳板机和目标服务器都在内网,而且本地计算机无法访问内网之中的跳板机,但是跳板机可以访问本机计算机

    • 由于本机无法访问跳板机,就无法从外网发起隧道,必须反过来,从跳板机发起隧道
  • client的1080端口通过跳板机jump转发到server的1081端口

    • 在jump端建立转发连接
    • 数据传递过程同上
  • 跳板机同时也可以是目标服务器,此时实现了外网的用户端访问位于内网的服务器

server$ ssh -NfR 10086:localhost:22 <usr@client addr>
# client访问
client$ ssh root@server -p 10086
  • 这里的用户端一般是位于外网的跳板机,这样用户可以通过跳板机访问服务器
    • client可以首先登陆到位于外网的机器,然后输入wwt用户在server密码就可以登陆到server,但是这样还是略显麻烦
    • 可以把 jump 机的ssh端口开放在 0.0.0.0 而不是默认的127.0.0.1就可以直接在 client 端登陆到server
    • 需要修改jump机的 /etc/ssh/sshd_config 文件,添加 GatewayPorts yes。然后重启sshd服务
    • 这时候还需要把远程端口转发命令做点小修改
server$ ssh -NfR 0.0.0.0:10086:localhost:22 <usr@junmp addr>
# client访问
# 注意这里的用户是server上的用户,不是jump上的
client$ ssh wwt@jump -p 10086

动态端口转发(socks5代理)

  • -D表示动态转发
ssh -NDf 1080 <user@proxy addr>
  • 这种转发采用了 SOCKS5 协议,需要支持把 HTTP 请求转成 SOCKS5 协议,才能把本地端口的请求转发出去
    • 在浏览器设置代理socket proxy:127.0.0.1:1080
curl -x socks5://localhost:1080 http://www.example.com
  • 前面的代理都是静态代理,也就是建立时就指定好了server地址
  • 动态转发要把本地端口绑定到 ssh 跳板机。至于 ssh 跳板机要去访问哪一个网站,完全是动态的,所以叫做动态转发

实战

  • 现在有两个位于不同内网的主机A,B;两者无法直接通行;另外有一个跳板机器jumpbox
    • 实现要让A主机SSH到B上
B$ ssh -NfR 10086:localhost:22 jumpbox # 把本地22反向转发到jumpbox的10086
A$ ssh -NfL 10001:localhost:10086 jumpbox # 把本地10001转发到jumpbox的10086
# 此时A可以SSH到B了
A$ ssh localhost -p 10001

在这里插入图片描述
在这里插入图片描述

参考:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!