ssh隧道原理及三种隧道转发模式

这篇具有很好参考价值的文章主要介绍了ssh隧道原理及三种隧道转发模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ssh 是如何工作的?

在 terminal 中 ,当我们输入 ssh username@remote_host 时,terminal 程序调用 ssh client ,ssh client 发起网络请求 ,请求 remote_host 的默认22端口,远端服务器22端口收到请求后,将请求转发到本地的 ssh server 程序。然后 ssh server 和 ssh client 交换 公钥、私钥、cipher suite info。在 ssh server 主机创建 shell 进程。这样 ssh 加密通道就创建完成了。后续的 shell 命令和命令的响应都将通过这个通道传输。

例如,当 ssh 通道建立后,在本地输入 ls 命令,那么 ls 命令将通过通道发送到 ssh server 所在的服务器,并且在 ssh server 中执行。ssh server 的 shell 进程在执行完命令后,将命令所有的输出,重定向到管道,通过管道传递给 ssh-client 的另一端。另一端进行解密并打印到 terminal application 上。

ssh 端口转发,或者 ssh 隧道?

The SSH protocol requires that requests for services on a remote machine be made over channels. A single SSH connection may contain multiple channels, all run simultaneously over that connection.

Each channel, in turn, represents the processing of a single service. When you invoke a process on the remote host with Net::SSH, a channel is opened for that invocation, and all input and output relevant to that process is sent through that channel. The connection itself simply manages the packets of all of the channels that it has open.

This means that, for instance, over a single SSH connection you could execute a process, download a file via SFTP, and forward any number of ports, all (seemingly) at the same time!

Naturally, they do not occur simultaneously, but rather work in a “time-share” fashion by sharing the bandwidth of the connection. Nevertheless, the fact that these channels exist make working with the SSH protocol a bit more challenging than simpler protocols (like FTP, HTTP, or Telnet).

本地转发到远端

ssh隧道原理及三种隧道转发模式

本地转发就是通过跳板机将本地的端口转发到远端服务器。本地使用 ssh 程序监听指定端口,并将这个端口的所有请求转发到远端的指定端口。

例如 将 127.0.0.1(local host) 的 1234 (local port) 端口转发到 www.leorain.cn (remote host) 的 80 (remote port) 端口。所有对于 127.0.0.1 的 1234 端口访问都将转发到 www.leorain.cn 的 443 端口。

ssh隧道原理及三种隧道转发模式

命令示例:

ssh -i .ssh/jumpserver/jumpserver_tunnel_id_rsa tunnel@123.123.123.123 -L 127.0.0.1:5600:172.16.0.18:5601 -N

本地 ssh-client 与跳板机建立 ssh 隧道,将本地的 5600 端口通过跳板机转发到 172.16.0.18 的 5601 端口上。

  • -i 指定私钥文件

  • -L 定义本地端口转发到远端。格式: -L [本地主机:]本地主机端口:远程网络主机:远程网络主机端口

  • -N 不执行远端命令。仅做端口转发。如果连接跳板机的用户是禁止登录的,会在发起连接后直接关闭连接。

    ps. 一般跳板机都有自己的一套登录、转发程序。如果要自己进行转发,最好的做法是在跳板机创建一个禁止登录的用户(例子中的 tunnel 用户),该用户仅可以发起 ssh 隧道。具体做法: www.leorain.cn

远端转发到本地(内网穿透)

ssh隧道原理及三种隧道转发模式

Forwarding remote connections to the local host is also straightforward; simply call the #remote_to method of the #forward service. This takes three (or four) parameters: the local port and host to be forwarded to (in that order), and the remote port to listen on. The fourth parameter is optional, and is the bind address on the remote machine; this defaults to “127.0.0.1”.

假设有这样一个场景:

内网有两个服务器: A 和 C ,远端有一个阿里云服务器 B 。其中内网的 A 可以连接远端的 B,A 可以访问内网 C 的 10808 端口,该端口提供梯子功能。现在 远端的 B 服务器需要使用内网 C 的 10808 端口。由于 C 处于内网,B 不能直接访问,需要由 A 对 B 发起 ssh 连接,并将 B 的 7998(自定义端口) 转发到 C 的 10808 端口上。这样,在 B 服务器内访问 7998 端口,就相当于访问了 C 的 10808 端口。

实际场景:我有一个阿里云服务器(B),要在阿里云服务器内下载一个国外的学术文档。但由于众所周知的原因,阿里云服务器无法直接访问 墙外的狗狗 . 我的本地电脑 (A) 可以直接连接 B 。本地电脑(A) 可以访问局域网电脑 C 的代理端口 10808 。通过远端转发可以将 B 的指定端口通过 A 转发到 C 的 10808 端口。

ssh隧道原理及三种隧道转发模式

命令示例:

ssh -R 123.123.123.123:7998:192.168.0.194:10809 ubuntu@123.123.123.123 -N

本地主机 A 对 B 发起 ssh 连接,并将 B 的 7998 端口通过 A 转发到 C 的 10809 上。

  • -R 远程转发通过参数 -R 指定,格式:-R [登录主机:]登录主机端口:本地网络主机:本地网络主机端口

sshd_config里要打开AllowTcpForwarding选项,否则-R远程端口转发会失败。B 服务器默认监听在 127.0.0.1 上,如果需要绑定0.0.0.0上,让其他主机可以访问B的端口,可以设置sshd_config配置文件 的 GatewayPorts ,或者在 B 服务器内使用 ssh -L 将本地的端口转发到 0.0.0.0 上。连接建立后,在 B 服务器内设置 http_proxy

export http_proxy=http://127.0.0.1:7998
export https_proxy=https://127.0.0.1:7998
w3m www.狗狗.com # 测试一下连接

一切顺利的话,😃 dddd

ssh隧道原理及三种隧道转发模式

动态端口转发

动态端口转发,相当于在 ssh 发起端创建一个 SOCKS 代理服务,所有使用这个 socks 的请求,都将转发到 ssh 远端,并将由 ssh 远端发起数据请求,并返回给 ssh 发起端,发起端将数据送回请求端。

命令示例:

 ssh -D 127.0.0.1:50000 remote_host -N

将本地的 50000 端口作为 socks 服务端口,请求发送到 本地的 50000 端口,本地端口把请求转发到 remote_host 。

  • 动态转发通过参数 -D 指定,格式:-D [本地主机:]本地主机端口。相对于前两个来说,动态转发无需再指定远程主机及其端口。它们由通过 SOCKS协议 连接到本地主机端口的那个主机。

使用示例:

  • firefox

ssh隧道原理及三种隧道转发模式

  • dbeaver

    ssh隧道原理及三种隧道转发模式

    ssh隧道原理及三种隧道转发模式

参考文献

  • Net::SSH Manual :: Chapter 6: Port Forwarding

文章来源: leorain-ssh隧道原理及三种隧道转发文章来源地址https://www.toymoban.com/news/detail-460478.html

到了这里,关于ssh隧道原理及三种隧道转发模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无界(wujie)微前端实现及三种通信方式介绍

    之前介绍过前段时间比较流行的微前端框架qiankun,虽然实现了微前端的理念,但是也暴露出很多缺点,比如官网上讲到的四点: 基于路由匹配,无法同时激活多个子应用,也不支持子应用保活 改造成本较大,从 webpack、代码、路由等等都要做一系列的适配 css 沙箱无法绝对的

    2023年04月09日
    浏览(31)
  • 【数据结构】树的基础知识及三种存储结构

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 把它叫做树是因为它

    2024年02月09日
    浏览(41)
  • 【运筹优化】网络最大流问题及三种求解算法详解 + Python代码实现

    标题中时间复杂度用到的 符号说明 :f 代表最大流的大小,m代表边的数量,n 代表节点的数量 本博客学习自:B站-ShusenWang 最大流问题,是网络流理论研究的一个基本问题,求网络中一个可行流 f ∗ f* f ∗ ,使其流量 v ( f ) v(f) v ( f ) 达到最大, 这种流 f f f 称为最大流,这个

    2024年02月02日
    浏览(46)
  • 单片机入门基础:STM32 I/O类型及三种下载方式(完整版)

    这篇文章以上一篇文章为基础,做了补完,上一篇文章由于存在某些问题,已经隐藏 首先给大家科普一下什么是超链接 超链接(Hyperlink)是指在文档中通过某种方式嵌入的、可被点击的文本、图像或其他元素,它们通常用于在浏览器中跳转到其他文档、网页或资源。超链接

    2024年01月19日
    浏览(36)
  • 华为配置直连二层组网隧道转发示例

    组网图形 业务需求 组网需求 数据规划 配置思路 配置注意事项 操作步骤 配置文件 扩展阅读 业务需求 企业用户通过WLAN接入网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响用户的业务使用。 组网需求 AC组网方式:直连二层组网。 DHCP部署方式

    2024年02月19日
    浏览(41)
  • 华为配置旁挂二层组网隧道转发示例

    组网图形 业务需求 组网需求 数据规划 配置思路 配置注意事项 操作步骤 配置文件 扩展阅读 业务需求 企业用户通过WLAN接入网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响用户的业务使用。 组网需求 AC组网方式:旁挂二层组网。 DHCP部署方式

    2024年02月20日
    浏览(31)
  • 华为配置直连三层组网隧道转发示例

      组网图形 图1  配置直连三层组网隧道转发示例组网图 业务需求 组网需求 数据规划 配置思路 配置注意事项 操作步骤 配置文件 扩展阅读 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响用户的业务使用。使用VLAN

    2024年02月22日
    浏览(28)
  • 华为配置旁挂三层组网隧道转发示例

    组网图形 图1  配置旁挂三层组网隧道转发示例组网图 业务需求 组网需求 数据规划 配置思路 配置注意事项 操作步骤 配置文件 扩展阅读 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响用户的业务使用。使用VLAN poo

    2024年02月22日
    浏览(32)
  • 广域网技术——SRv6隧道类型及数据转发

    目录 SRv6节点 节点角色 节点行为 SRv6数据转发隧道建立方式 SRv6 BE L3VPNv4 over SRv6 BE EVPN L3VPNv6 over SRv6 BE SRv6 TE Policy SRv6使用IPv6数据平面,基于IPv6扩展头进行扩展实现类似标签转发的处理 SR-MPLS在建立SR-MPLS隧道时,如果有设备不支持MPLS或SR,则就无法建立隧道 SRv6在建立SRv6隧道

    2023年04月16日
    浏览(75)
  • 在Linux系统中设置HTTP隧道以实现网络穿透和端口转发

    在数字化世界中,网络穿透和端口转发成为了许多开发者和系统管理员必备的技能。而在Linux系统中,通过设置HTTP隧道,我们可以轻松实现这一目标,让我们的服务即便在内网环境中也能被外部世界所访问。 那么,如何在Linux系统中设置HTTP隧道以实现网络穿透和端口转发呢?

    2024年02月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包