SSH端口转发

SSH端口转发在用 SSH 登录服务器的同时 是不是也想监听服务器的其他端口的数据 这个时候 SSH 端口转发就可以解决这个问题

简介

SSH端口转发有两个主要作用:

  1. 将不加密的数据放在SSH安全连接里面传输,使得原本不安全的网络服务增加了安全性,比如通过端口转发访问Telnet、FTP等明文服务,数据传输就都会加密
  2. 作为数据通信的加密跳板,绕过网络防火墙
    有三种使用方法:动态转发、本地转发、远程转发

动态转发

动态转发指的是,本机与 SSH 服务器之间创建了一个加密连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发。它的一个使用场景就是,访问所有外部网站,都通过 SSH 转发。

动态转发需要把本地端口绑定到 SSH 服务器。至于 SSH 服务器要去访问哪一个网站,完全是动态的,取决于原始通信,所以叫做动态转发。

$ ssh -D local-port tunnel-host -N 

上面命令中,-D表示动态转发,local-port是本地端口,tunnel-host是 SSH 服务器,-N表示这个 SSH 连接只进行端口转发,不登录远程 Shell,不能执行远程命令,只能充当隧道。

  • 举例来说,如果本地端口是2121,那么动态转发的命令就是下面这样。
$ ssh -D 2121 tunnel-host -N 

注意,这种转发采用了 SOCKS5 协议。

  • 下面是 SSH 隧道建立后的一个使用实例。
$ curl -x socks5://localhost:2121 http://www.example.com 

上面命令中,curl 的-x参数指定代理服务器,即通过 SOCKS5 协议的本地2121端口,访问http://www.example.com

本地转发

它会指定一个本地端口(local-port),所有发向那个端口的请求,都会转发到 SSH 跳板机(tunnel-host),然后 SSH 跳板机作为中介,将收到的请求发到目标服务器(target-host)的目标端口(target-port)。

$ ssh -L local-port:target-host:target-port tunnel-host 

上面命令中,-L参数表示本地转发,local-port是本地端口,target-host是你想要访问的目标服务器,target-port是目标服务器的端口,tunnel-host是 SSH 跳板机。

举例来说,现在有一台 SSH 跳板机tunnel-host,我们想要通过这台机器,在本地2121端口与目标网站www.example.com的80端口之间建立 SSH 隧道,就可以写成下面这样。

$ ssh -L 2121:www.example.com:80 tunnel-host -N 

然后,访问本机的2121端口,就是访问www.example.com的80端口。

$ curl http://localhost:2121 # 注意,本地端口转发采用 HTTP 协议,不用转成 SOCKS5 协议。 

远程转发

它的命令格式如下

$ ssh -R remote-port:target-host:target-port -N remotehost 

上面命令中,-R参数表示远程端口转发,remote-port是远程计算机的端口,target-hosttarget-port是目标服务器及其端口,remotehost是远程计算机。

远程转发主要针对内网的情况。下面举个例子。

第一个例子是内网某台服务器localhost80 端口开了一个服务,可以通过远程转发将这个 80 端口,映射到具有公网 IP 地址的my.public.server服务器的 8080 端口,使得访问my.public.server:8080这个地址,就可以访问到那台内网服务器的 80 端口。

$ ssh -R 8080:localhost:80 -N my.public.server 

参考

https://wangdoc.com/ssh/port-forwarding.html

https://solitum.net/posts/an-illustrated-guide-to-ssh-tunnels/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210767.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:58
下一篇 2026年3月18日 下午11:58


相关推荐

  • 用python做学生信息管理系统_python管理系统实例

    用python做学生信息管理系统_python管理系统实例Python面向对象版学员管理系统文章目录Python面向对象版学员管理系统目标一.系统需求二.准备程序文件2.1分析2.2创建程序文件三.书写程序3.1student.py3.1.2程序代码3.2managerSystem.py3.2.1定义类3.2.2管理系统框架3.3main.py3.4定义系统功能函数3.4.1添加功能3.4.2删除学员3.4.3修改学员信息3.4.5查询学员信息3.4.6显示所有学员信息3.4.7保存学员信息3.4.8加载学员信息四.总结

    2026年1月31日
    5
  • linux下卸载软件命令行,如何使用Linux中的命令行卸载软件 | MOS86「建议收藏」

    linux下卸载软件命令行,如何使用Linux中的命令行卸载软件 | MOS86「建议收藏」Linux提供了不同的安装软件的方法。您可以使用Ubuntu软件中心从标准Ubuntu软件仓库外部或通过编译源代码安装来自标准Ubuntu软件仓库的软件。但是,如果你需要卸载程序怎么办?如果您使用Ubuntu软件中心从Ubuntu软件仓库安装了软件,您可以使用Ubuntu软件中心来卸载该软件。但是,如果您使用命令行更加舒适,我们将向您显示一个简单的方法来查看系统上安装的内容并卸载程序。相关文章图片…

    2025年10月12日
    6
  • vue(22)Vuex的安装与使用[通俗易懂]

    vue(22)Vuex的安装与使用[通俗易懂]前言每一个Vuex应用的核心就是store(仓库)。store基本上就是一个容器,它包含着你的应用中大部分的状态(state)。Vuex和单纯的全局对象有以下两点不同:Vuex的状态存

    2022年7月29日
    9
  • 轻量级网络什么意思_轻量级网络有哪些

    轻量级网络什么意思_轻量级网络有哪些轻量级网络ShuffleNetv1有事没事扯扯淡关注0.0732019.01.1014:50:55字数1,803阅读2,698ShuffleNetpaperShuffleNet是旷视科技提出的一种计算高效的CNN模型,其和MobileNet和SqueezeNet等一样主要是想应用在移动端。所以,ShuffleNet的设计目标也是如何利用有限的计算资源来达到最好的模型精度,这需要很好地在…

    2025年10月12日
    5
  • 微信小程序页面跳转传参(对象、数组)「建议收藏」

    跳转事件jump:function(e){ letarray={id:1,name:’张三’}wx.navigateTo({url:’/pages/index/index?array=’+JSON.stringify(array), })}跳转页面onLoad:function(options){ console.log(‘跳转事件参数’,JSON.parse(options.array))},遇到问题可以看我主页加

    2022年4月16日
    84
  • php 对象转json_php json解析

    php 对象转json_php json解析在PHP中,可以使用json_decode()函数来将json字符串转换为PHP对象。json_decode()函数用于解码JSON字符串,把json字符串转成对象或数组,默认转成对象;设置函数的第二个参数为true,则可转成关联数组。json_decode()函数是PHP中的内置函数,用于对JSON格式的字符串进行解码,可以将JSON格式的字符串转换为PHP变量(object或array)。…

    2022年10月7日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号