`
hetaoo
  • 浏览: 104691 次
社区版块
存档分类
最新评论

三种不同类型的ssh隧道

    博客分类:
  • ssh
 
阅读更多

 

想通过ssh隧道连接远端机器的VNC服务,对ssh -L命令不太熟悉,man ssh后发现3组与隧道(turnnel)相关的参数:ssh -Dssh -Lssh -R,一下子就搞糊涂了,所有下决心仔细研究一番。

何谓SSH隧道

隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。

SSH隧道的类型

ssh隧道有3种类型:

  1. 动态端口转发(Socks 代理)
  2. 本地端口转发
  3. 远端端口转发

动态端口转发

动态端口允许通过配置一个本地端口,把通过隧道到数据转发到远端的所有地址。本地的应用程序需要使用Socks协议与本地端口通讯。此时SSH充当Socks代理服务器的角色。

命令格式

ssh -D [bind_address:]port

参数说明

  • bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost
  • port 指定本地绑定的端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以连接主机B,但无法连接主机C。

在主机A执行

$ ssh -D localhost:8080 root@192.168.2.100

然后主机A上的应用程序就可以通过

SOCKS5 localhost:8080

访问主机C上的服务。

优点

  • 配置一个代理服务就可以访问远端机器和与其所在子网络的所有服务

缺点

  • 应用程序需要额外配置SOCKS代理,若应用程序不支持代理配置则无法使用

本地端口转发

通过SSH隧道,将一个远端机器能够访问到的地址和端口,映射为一个本地的端口。

本地端口转发

命令格式

ssh -L [bind_address:]port:host:hostport

参数说明

  • bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost
  • port 指定本地绑定的端口
  • host 指定数据包转发目标地址的IP,如果目标主机和ssh server是同一台主机时该参数指定为localhost
  • host_port 指定数据包转发目标端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以连接主机B,但无法连接主机C。A主机需要访问C主机的VNC服务(5900端口)

在A主机上建立本地转发端口5901

$ ssh -L 5901:192.168.2.101:5900 root@192.168.2.100

然后本地vnc客户端通过5901端口打开c主机的vnc服务

$ open vnc://localhost:5901

优点

  • 无需设置代理

缺点

  • 每个服务都需要配置不同的端口转发

远端端口转发

远程端口转发用于某些单向阻隔的内网环境,比如说NAT,网络防火墙。在NAT设备之后的内网主机可以直接访问公网主机,但外网主机却无法访问内网主机的服务。如果内网主机向外网主机建立一个远程转发端口,就可以让外网主机通过该端口访问该内网主机的服务。可以把这个内网主机理解为“内应”和“开门者”。

远端端口转发

命令格式

ssh -R [bind_address:]port:host:hostport

参数说明

  • bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost
  • port 指定本地绑定的端口
  • host 指定数据包转发源地址的IP,如果源主机和ssh server是同一台主机时该参数指定为localhost
  • host_port 指定数据包转发源端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以通过SSH访问登录B主机,但反向直接连接被禁止,主机B和主机C可以相互访问。若主机C想访问主机A的VNC服务(5900端口)。

在主机A执行如下命令,开放B主机远端端口转发。

$ ssh -R 5900:192.168.2.100:5901 root@192.168.2.100

然后主机C连接主机B的5901端口

$ open vnc://192.168.2.100:5901

优点

  • 可以穿越防火墙和NAT设备

缺点

  • 每个服务都需要配置不同的端口转发

如何禁止端口转发

设置ssh服务配置文件/etc/ssh/sshd_config

AllowTcpForwardingno

参考文献

  1. SSH Tunneling Explained
  2. How to do SSH Tunneling (Port Forwarding)
  3. SSH端口转发以及应用实例
分享到:
评论
1 楼 abc198999 2017-12-05  
英文图片是对的, 中文例子是错的.
可以直接 man ssh 查看-L和-R部分, 里面前两行介绍的很清楚

相关推荐

    一种通过SSH协议构造隧道达成数据加密传输的方法

    执行命令的环境要基于*nix或者是可以实现SSH命令效果的工具(如putty相关),服务所在的环境不限服务类型、不限操作系统。 SSH端口转发之一:本地端口转发 本地端口转发是指通过SSH命令,在本地服务器Lis

    ssh_Colab

    ssh_Colab是一个Python模块,可通过受第三方软件ngrok保护的安全外壳(SSH)连接,促进对Google Colaboratory(Colab)的远程访问。 ssh_Colab使繁琐的例程自动化,以设置TPU运行时应用程序和TensorBoard之类的服务...

    RedisDesktopManager 2021 of Mac

    1. 多种连接方式:RedisDesktopManager支持多种连接方式,包括本地和远程Redis实例、SSH隧道和Redis集群等。这使得用户可以轻松地连接到不同的Redis实例,并进行管理和操作。 2. 可视化界面:RedisDesktopManager...

    RedisDesktopManager-2019-5.zip

    此外,还完全支持SSL连接和SSH隧道。在功能栏中,还可以定义全局样式的模式键、命名空间分隔符和连接/执行超时秒间隔。还可以通过导入已经存在的安装文件来绕过连接的整个配置过程。同时支持所有流行的Redis特定键...

    ops-cli:Ops-用于Cloudform自动化的Terraform,Ansible,Helmfile和SSH的cli包装器

    操作CLI 从2.0版开始, ops-cli需要Python3。 如果您仍在使用Python2,请使用... yaml文件包含不同类型的部分,每个插件一个。 例如,您可能有一个用于Terraform文件的部分,一个用于AWS指令,Kubernetes Helm图表的

    承载网专业题库答案(单选、多选、填空、判断、理论实操简答).xlsx

    "OSPF 有四种不同的路由类型,分别是:a-区域内路由;b-第一类外部路由;c-区域间路由;d-第二类外部路由。 下列哪种组合由高到低描述了这四种路由类型的优先顺序( )" C 下关于OSPF 外部路由开销的说法正确的是 B ...

    CityPulse-Tourism-Planner:该项目结合了斯德哥尔摩市与事件和兴趣点(PoI)相关的数据源,并生成了时间表以探索用户选择的PoI。 根据每个PoI的开放时间以及用户的预算,旅行时间和交通工具类型来创建时间表-Source City

    该程序包已经集成在后端中,并且与GDI的通信是通过SSH隧道完成的。 #系统要求 请求处理程序: Linux作业系统(已在Ubuntu 14.04 LTS上测试) Java JRE 1.8.0_91或更高版本 Android应用程序: Android SDK 6.0...

    grunt-clouddity:使用Grunt,Docker和PkgCloud进行Grunt任务以简化集群上应用程序的部署

    咕-混浊 概述 Grunt任务可简化使用Grunt,Docker和PkgCloud在集群上部署应用程序的过程。 这些grunt任务依赖于Gruntfile进行配置(可以... 注意:要访问隐藏在防火墙后面的VM,可以使用SSH隧道在群集上运行。 第一步是

    honeybee:使用Python Fabric的Cloud Provisioning模板

    定义应用程序堆栈并添加服务器类型./hive.py generate app lamp./hive.py generate server lamp apache./hive.py generate server lamp mysql定义说明使用包装在Python函数中的集中化Shell命令来定义服务器配置...

    使用Subversion进行版本控制(针对 Subversion 1.4)

    SSH 隧道 SSH 配置技巧 初始设置 控制调用的命令 httpd,Apache的HTTP服务器 先决条件 基本的 Apache 配置 认证选项 基本HTTP认证 SSL 证书管理 授权选项 整体访问控制 每目录访问控制 禁用基于路径的检查 额外的...

    RouterOS2.9.6.with.crack及配置动画

    这些隧道协议可以为远程资源访问和企业间的连接提供很好的解决方案,如: l 通过PPTP或IPIP实现通网络资源互用 l EoIP或PPTP的远程局域网解决方案 l 支持PPPoE服务器 l Hotspot热点认证服务 热点服务认证系统是一种...

    redisgrip:Redis GUI客户端

    重新抓紧 Redis GUI客户端 特征 支持Redis的主要类型字符串,列表,集合,zset和set 监视外部数据的添加,删除和更改 通过徽章处理有关外部更改状态的通知 ... 通过PEM的SSH隧道支持 开始开发 纱线开发 包装 纱包

    Webyog SQLyog Ultimate 12.0.9中文版注册版.rar

    通过互联网你能够在任何地方远程管理你的MYSQL数据库,支持HTTP/HTTPS/SSH安全通道,能够批量导入各种类型的数据,速度极快的SQL脚本执行速度,完全智能化的SQL自动完成语句,支持使用SSL加密隧道,使用客户端认证...

    socat 使用手册

    7.2 地址类型 6 7.2.1 TCP 6 7.2.2 UDP 6 7.2.3 OPENSSL 6 7.2.4 TUN 7 7.3 典型使用 7 7.3.1 连接目标 7 7.3.2 反向连接 7 7.3.3 向远处端口发数据 7 7.3.4 本地开启端口 7 7.3.5 执行bash的完美用法 8 7.3.6 文件...

    Linux环境数据库管理员指南

    9.23.12 通过ssh运行安全隧道 276 9.24 增加与删除用户 276 9.25 磁盘管理—支持大型数据库 277 9.26 管理数据库 278 9.26.1 创建数据库 278 9.26.2 访问数据库 278 9.26.3 删除数据库 279 9.26.4 备份和恢复 279 ...

    Python Cookbook

    5.11 三行代码的快速排序 203 5.12 检查序列的成员 206 5.13 寻找子序列 208 5.14 给字典类型增加排名功能 210 5.15 根据姓的首字母将人名排序和分组 214 第6章 面向对象编程 217 引言 217 6.1 温标的转换 ...

    RED HAT LINUX 6大全

    第三部分为系统管理;第四部分为Linux编程;第五部分为附录。本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。...

Global site tag (gtag.js) - Google Analytics