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

三种不同类型的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隧道

    SSH隧道主要分为两种类型:本地转发(Local Forwarding)和远程转发(Remote Forwarding)。 1. 本地转发:在这种模式下,本地机器上的一个端口被转发到远程服务器上的另一个端口。例如,如果你在公共Wi-Fi上工作,...

    SSH隧道管理内部服务器putty,ssh secure shell

    SSH隧道主要分为两种类型:**端口转发**和**动态端口转发**。端口转发又可以进一步细分为**本地转发**(Local Forwarding)和**远程转发**(Remote Forwarding)。本地转发是指将本地的一个端口连接到远程主机上的...

    ssh连接两个数据库

    #### 三、案例分析:SSH连接两个不同类型的数据库 根据提供的信息,本案例涉及的是使用Spring框架来管理一个MySQL数据库和一个SQL Server数据库。下面将详细解析相关的知识点: ##### 3.1 配置文件详解 配置文件`...

    tunnelme:反向 SSH 和 SSH 隧道

    反向 SSH 隧道是一种特殊类型的 SSH 隧道,它允许远程服务器连接到本地计算机。通常,在常规的正向 SSH 隧道中,我们从本地主机发起连接到远程服务器,然后通过该连接转发端口。而在反向 SSH 隧道中,流程相反:远程...

    RedisFront 是一款开源跨平台 Redis 桌面客户端工具, 支持单机模式, 集群模式, 哨兵模式以及 SSH 隧道连接

    这款工具不仅支持单机模式,还能够适应集群、哨兵模式以及通过SSH隧道的安全连接,极大地扩展了其在复杂环境中的适用性。 ### 单机模式 在单机模式下,RedisFront允许用户直接连接到本地或远程的Redis实例,进行...

    ssh项目,一个很不错的项目

    4. SSH隧道:理解SSH隧道的工作方式,包括本地和远程端口转发,如何利用SSH实现安全的HTTP代理等。 5. SSH认证方式:探讨不同类型的SSH认证方法,如基于口令的认证、公钥认证、以及更高级的认证机制如GSSAPI和PKCS#...

    SSH与SSH2用到的数据库

    通过SSH隧道,用户可以将本地机器的安全连接转发到远程服务器上的数据库,从而保护数据库通信免受中间人攻击。SSH隧道可以创建一个本地端口,所有通过该端口的流量都将被加密并通过SSH连接转发到远程服务器的特定...

    SSH统计并显示当前在线用户信息

    例如,你可以使用SSH隧道来安全地连接到Oracle数据库,执行SQL查询,甚至进行数据库备份和恢复操作。这通常涉及到设置SSH密钥对认证,避免每次都输入密码,提高自动化运维的安全性。 创建SSH隧道的命令可能如下: `...

    go编写的基于用户IP的权限控制的 ssh隧道web转发系统 。

    go编写的基于用户IP的权限控制的 ssh隧道web转发系统 。 主要用于公司内部,研发访问生产环境服务的小工具, 不用对研发暴露生产IP, 只需要访问公司内部的主机端口即可Go语言(也称为Golang)是由Google开发的一种...

    ssh三连杀.rar

    对于标签中提到的"ssh连接mysql",使用Navicat Premium可以通过SSH隧道安全地连接到MySQL服务器,确保数据传输的安全性。"ssh连接手机"可能是指利用SSH在电脑与手机之间建立安全连接,例如,通过PuTTY连接到装有SSH...

    Go-sshtunnel简单的GoSSH隧道

    SSH隧道有两种类型:本地隧道(Local Tunnel)和远程隧道(Remote Tunnel)。本地隧道允许你将本地机器的端口转发到远程服务器,而远程隧道则相反,将远程服务器的端口转发到你的本地机器。Go-sshtunnel支持这两种...

    linux ssh ssh

    1. SSH隧道:可以创建端口转发,如本地端口到远程端口的转发,用于访问受限制的服务。 2. SFTP:SSH File Transfer Protocol,通过SSH实现安全的文件传输。 3. SSH密钥管理:可以使用`ssh-agent`来管理私钥,避免...

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

    首先,SSH端口转发分为两种类型:本地端口转发(Local Port Forwarding)和远程端口转发(Remote Port Forwarding)。 1. 本地端口转发: 本地端口转发允许你在本地主机上监听一个端口,然后将所有到达该端口的流量...

    SSH 零配置例子

    9. **SSH隧道**:SSH还可以创建安全的隧道,用于端口转发,实现本地和远程网络服务的安全连接。 通过这个名为"sshProject"的压缩包,你可以学习到如何实践上述概念,创建并测试SSH的零配置环境。项目可能包含了配置...

    Bitvise SSH Client8.27

    3. **隧道管理**:用户可以创建和管理SSH隧道,实现端口转发,从而在本地和远程网络之间建立安全的连接。 4. **动态端口转发**:这种功能允许用户将任意网络流量通过SSH连接安全地转发到另一台机器,增强了网络访问...

    ssh连linux客户端

    除了基本的登录,SSH还支持端口转发,这允许用户通过安全的SSH隧道传输其他类型的数据,如HTTP、HTTPS或者数据库连接。有两种类型的端口转发:本地转发和远程转发。本地转发将本地机器的某个端口上的流量转发到远程...

    SSH登陆

    可以通过SSH建立一个SOCKS代理,从而让客户端的应用程序通过SSH隧道进行网络通信,这对于那些不支持SSH协议的软件来说非常有用。 3. **隧道功能** 通过SSH可以建立隧道,使得客户端可以直接访问服务器后端的服务...

    Go-Shipspotter-用于通过SSH将端口隧道转发到远程Docker容器的工具

    1. **Go 语言**:Go 语言是 Google 推出的一种静态类型的编译型语言,以其简洁的语法、高效的性能和内置的并发支持而受到欢迎。在开发 Go-Shipspotter 时,开发者利用了 Go 语言的这些特性,使得程序具有较高的执行...

    SSH中文帮助文档

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。这个压缩包文件包含了SSH的中文帮助文档,对于那些英语不是母语或者对英文文档理解有困难的用户来说,这是一个非常有用的...

    基于Java Swing开发的跨平台Redis桌面客户端工具,功能完善,支持单机模式, 集群模式, 哨兵模式及 SSH 隧道连接

    4. **SSH隧道连接**:通过SSH安全协议建立连接,确保数据传输的安全性,尤其在远程访问Redis服务时,提供了额外的安全保障。 在数据库管理方面,RedisFront提供了以下实用功能: - 数据浏览:以表格形式展示键值对...

Global site tag (gtag.js) - Google Analytics