SSH 端口转发

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

SSH 端口转发

本文用于记录一下 SSH 端口转发功能的学习笔记,以做备忘,主要参考文章如下:

  1. 彻底搞懂SSH远程转发命令
  2. SSH端口转发
  3. An Illustrated Guide to SSH Tunnels

SSH 不仅可以远程登录,还有一个非常实用的功能:端口转发。

SSH 端口转发又叫 SSH 隧道(tunnel),是在 SSH 连接的基础上,通过将客户端或服务器端的某个端口的数据放到 SSH 连接中加密传输,从而在不安全的网络中安全的传输数据或者绕过防火墙的限制实现对目的主机目的端口的访问的一个功能。

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

(1)将不加密的数据放在 SSH 安全连接里面传输,在不安全的网络或不受信任的网络提供安全连接,比如通过端口转发访问 Telnet、FTP 等明文服务,数据传输就都会加密,或者在不安全的公用网络中,利用信任的 SSH 服务器访问网络或邮件服务器。

(2)绕过防火墙的限制实现对目的主机的访问。

端口转发有三种使用方法:本地端口转发,远程端口转发,动态端口转发。

本地端口转发(本地隧道)

本地端口转发 是指在 SSH 连接的基础上,将远程的 SSH 服务器作为中介,建立一个本地客户端主机到目的主机(第三台主机)的连接,将对于本地客户端主机指定端口的访问通过 SSH 连接转发给 SSH 服务器,再由 SSH 服务器发到目标主机的目标端口,同时将结果传回。由于被转发的端口位于本地客户端,所以就叫做本地端口转发。本地被转发的端口类似于隧道的的入口,目标主机的目标端口类似于隧道的出口。

创建本地端口转发的命令格式如下:

ssh -L 本地端口:目标主机:目标端口 uesr@host [-N]
  1. 这个命令在本地客户端主机执行,它在建立端口转发的同时也建立了基本的 SSH 连接;
  2. -L 选项表示建立本地端口转发,在之后本地端口、目标主机、目标端口之间用 :(冒号)隔开;
  3. user@host 是登录 SSH 服务器的用户名与地址;
  4. -N 选项(可选)表示这个 SSH 连接只进行端口转发,不登录远程 Shell,不能执行远程命令,只能充当隧道;
  5. 目标主机不一定必须是第三台主机,也可以是 SSH 服务器本身,此时目标主机就是 localhost;如果目标主机是第三台主机,那么端口转发只能保证本地主机至 SSH 服务器之间的连接是安全的,并不能保证 SSH 服务器至目标主机间的连接是安全的,这取决于 SSH 服务器与目标主机的连接方式。

应用场景1

(1)台式机 B 上运行着虚拟机 C,虚拟机使用虚拟机软件搭建的虚拟网络与宿主主机 B 相连接,但在主机 B 以外无法直接访问该虚拟网络。想要通过 SSH,用与台式机 B 处于同一 WiFi 下的笔记本 A 来远程控制虚拟机 C,(在A上)执行端口转发命令:

ssh -L 22022:虚拟机 C 地址:22 desktop_user@台式机 B 地址

这个命令中,22022 是一个主机 A 上未被占用的端口,desktop_user是登录到台式机 B 的用户名,注意此时台式机 B 需要开启 ssh 服务器端服务。
在虚拟机 C 上也开启 ssh 服务器端服务后,在主机 A 上执行:

ssh -P 22022 vitual_user@localhost

这个命令以 SSH 协议访问本机的 22022 端口,这个请求会通过主机 A 和台式机 B 之间的 SSH 连接到达台式机 B,台式机 B 将这个请求转变为对虚拟机 C 的 22 端口的访问请求,并为 主机 A 返回结果,这样就可以在主机 A 上以 SSH 协议登录虚拟机 C。
在这个命令中,-P 选项指定访问特定端口,而不是默认的 22 端口,vitual_user 是登录到虚拟机的用户名,因为主机 A 是访问自己的端口,所以地址是 localhost,也可以利用其它主机访问主机 A 的 22022 端口达到访问虚拟机 C 的目的,此时 localhost 就改为 主机 A 的 ip 地址或域名。

(2)加密访问邮件服务器

想要通过 SSH 连接安全的访问邮件服务器,在本地主机执行以下命令:

ssh -L 1100:mail.example.com:110 mail.example.com

这个命令中,1100 是本机未被占用的端口,mail.example.com 是邮件服务器,这个命令将对本机的 1100 端口的访问转发到邮件服务器 mail.example.com 的 110 端口(邮件获取协议 POP3 协议的默认端口)。端口转发建立以后,POP3 邮件客户端只需要访问本机的 1100 端口,请求就会自动转发到 mail.example.com 的 110 端口。

在这种情况下,邮件服务器 mail.example.com 本身作为中介,必须运行 SSH 服务器,否则,就必须通过另一台 SSH 服务器作为中介,命令如下:

ssh -L 1100:mail.example.com:110 other.example.com

这个命令中,本机的 1100 端口还是绑定 mail.example.com 的 110 端口,但是由于 mail.example.com 没有运行 SSH 服务器,所以必须通过 other.example.com 中介。本机的 POP3 请求通过 1100 端口,先发给 other.example.com 的 22 端口(sshd 默认端口),再由后者转给 mail.example.com,得到数据以后再原路返回。

注意,采用上面的中介方式,只有本机到 other.example.com 的这一段是加密的,other.example.com 到 mail.example.com 的这一段并不加密。

远程端口转发(远程隧道)

远程端口转发 是指在建立 SSH 连接的基础上,将本地客户端主机作为中介,建立一个 SSH 服务器到目的主机(第三台主机)的连接,将对于 SSH 服务器指定端口的访问通过 SSH 连接转发给客户端,再由客户端主机发到目标主机的目标端口,同时将结果传回。由于被转发的端口位于远程 SSH 服务器,所以就叫做远程端口转发。远程 SSH 服务器上被转发的端口类似于隧道的的入口,目标主机的目标端口类似于隧道的出口。

创建远程端口转发的命令格式如下:

ssh -R 远程端口:目标主机:目标端口 uesr@host [-N]
  1. 这个命令同样在客户端主机执行;
  2. -R 选项表示建立远程端口转发,在之后远程端口、目标主机、目标端口之间用 :(冒号)隔开,远程端口是一个在远程 SSH 服务器上的端口;
  3. user@host 是登录 SSH 服务器的用户名与地址;
  4. -N 选项(可选)表示这个 SSH 连接只进行端口转发,不登录远程 Shell,不能执行远程命令,只能充当隧道;
  5. 目标主机不一定必须是第三台主机,也可以是本地客户端主机本身,此时目标主机就是 localhost;如果目标主机是第三台主机,那么端口转发只能保证 SSH 服务器至本地主机之间的连接是安全的,并不能保证本地客户端主机至目标主机间的连接是安全的,这取决于本地客户端主机与目标主机的连接方式。
  6. 注意:OpenSSH 服务器对于远程端口转发的设定,默认只接受远程服务器主机本机上的应用发起的请求,想要从其他连接到服务器的设备发起请求,需将 /etc/ssh/sshd_config 配置文件中 GatewayPorts 选项后的 no 修改为 yes。

应用场景2

(1)台式机 B 上运行着虚拟机 C,虚拟机使用虚拟机软件搭建的虚拟网络与宿主主机 B 相连接,但在主机 B 以外无法直接访问该虚拟网络。想要通过 SSH,用与台式机 B 处于同一 WiFi 下的笔记本 A 来远程控制虚拟机 C,在 B 上执行端口转发命令:

ssh -R 22122:虚拟机 C 地址:22 desktop_user@笔记本 A 地址

这个命令中,22122 是一个笔记本 A 上未被占用的端口,desktop_user是登录到笔记本 A 的用户名,注意此时笔记本 A 是远程 ssh 服务器,此时与本地端口转发的例子是不同的,在本地端口转发的例子中,台式机 B 是远程 ssh 服务器。
在虚拟机 C 上也开启 ssh 服务器端服务后,在笔记本 A 上执行:

ssh -P 22122 vitual_user@localhost

-P 选项指定访问特定端口,vitual_user 是登录到虚拟机的用户名,因为主机 A 是访问自己的端口,所以地址是 localhost。
这样,笔记本 A 对本机 22122 端口的 SSH 访问请求经过台式机 B 和笔记本 A之间的 SSH 连接转发到台式机 B,再由台式机 B 发送给虚拟机 C,这样就建立了笔记本 A 和虚拟机 C 之间的 SSH 连接。

(2)内网计算机 A 运行着 http 服务,但 A 没有公网 IP,其他设备不能使用该服务。恰好云服务器 B 有公网 IP(甚至域名),便于被访问。在不将 http 服务迁移至云服务器 B 的前提下,可以使用 SSH 端口转发使其他设备通过访问 B 的方式访问 A 上的 http 服务。在 A 上执行端口转发命令:

ssh -R 80:localhost:80 cloud_user@server.example.com

这时目标主机是 A 本身(localhost),80 号端口是 http 默认端口,cloud_user 是 B 上的用户名;server.example.com 是 B 的域名。

于是其它人就可以通过访问 http://server.example.com 来访问内网计算机 A 提供的 http 服务了。

动态端口转发

动态端口转发 是指在本机与 SSH 服务器之间建立一个 SSH 连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发,但这种转发不规定目标主机和目标端口,而是去读取应用发起的请求,从请求中获取目标信息。在这种情况下,SSH 服务器要去访问哪一个网站,完全是动态的,取决于原始通信,所以就叫做动态端口转发。

相对的,本地端口转发和远程端口转发在建立时要指定目标主机目标端口,可以统称为固定端口转发

创建动态端口转发的命令格式如下:

ssh -D 本地端口 user@host [-N]

这个命令中,-D 表示动态端口转发,user@host 表示登录到 SSH 服务器的用户名和地址,-N 表示这个 SSH 连接只进行端口转发,不能执行远程命令。

需要注意动态端口转发只绑定本地端口,并没有指定目标主机目标端口,而是在通信到达 SSH 服务器时使用 SOCKS4 或 SOCKS5 协议动态确定。所以,如果要使用动态端口转发访问网络,需要在系统或应用(浏览器等)中设置一个使用SOCKS5 协议、服务器为 localhost、端口为绑定的端口的代理,利用代理使请求走绑定的端口。

举例来说,如果本地端口是2121,那么动态转发的命令就是下面这样。

ssh -D 2121 user@host -N

下面是动态端口转发建立后的一个使用实例:

curl -x socks5://localhost:2121 http://www.example.com

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

多级端口转发

端口转发可以有多级,以达到绕过多个防火墙的效果。比如建立两个端口转发,第一个端口转发的出口作为第二个端口转发的入口,通过第二个端口转发访问目标主机目标端口。

例如,本地主机 A 想访问 目的主机 D,但因为防火墙的限制,无法直接连接,现在知道主机 A 可以连接到服务器 B,而服务器 B 可以连接到服务器 C ,服务器 C 可以直接访问目标主机 D,在这种情况下,就可以建立两级连接。

先在主机 A 建立到服务器 B 的本地端口转发:

ssh -L 本地端口:localhost:2999 user_b@服务器 B ip 地址

这个命令在本地主机 A 和 服务器 B 之间建立一个端口转发,2999 是服务器 B 上一个空闲的端口,localhost 表示服务器 B 接收到主机 A 的请求后转发到自己的 2999 端口。这个命令没有加 -N 参数,因为还需要登录服务器 B 建立第二个端口转发。
在登录服务器 B 之后,建立服务器 B 经过服务器 C 到目标主机 D 的端口转发:

ssh -L 2999:目标主机 D:目标端口 user_c@服务器 C ip 地址 -N

这个命令将对 2999 端口的访问请求经由服务器 C 转发到目标主机 D。
这样,最终就通过两级端口转发实现访问主机 A 的端口相当于访问目标主机 D 的目标端口的效果。文章来源地址https://www.toymoban.com/news/detail-467847.html

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

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

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

相关文章

  • 【工具】SSH端口转发管理器,专门管理SSH Port Forwarding

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 开源代码看这里: http://xfxuezhang.cn/index.php/archives/1151/         有时候需要用到ssh的端口转发功能。目前来说,要么是cmd里手敲指令,但每次敲也太麻烦了;或者打开termius、mobaxterm这种ssh软件,但对于只想使用端口转发的

    2024年02月07日
    浏览(42)
  • Windows下配置SSH实现免密访问和远程端口转发

    最近想要配置自家的电脑用作服务器,方便自己远程访问。 由于没有静态IP,最开始想使用DDNS,从花生壳注册了一个域名,然后在路由配置端口转发,配置完成后,发现家里网络是光猫拨号的,路由器自动获取ip,转发的依然是内网ip,局域网可以访问,但是外网仍然访问不

    2024年02月02日
    浏览(47)
  • SSH隧道动态转发端口实现SOCKS代理 + HTTP代理(Privoxy)

    实现效果 :ssh连接远程服务器进行网络转发,本地服务连接网络代理 环境 :windows11/10 需要工具 :MobaXterm(ssh隧道端口转发),Privoxy(socks转http代理),一个云服务器 多种方法选一种即可:  命令行: ssh -C -N -D LOCAL_ADDRESS:LOCAL_PORT USER@REMOTE_ADDRESS Putty客户端 MobaXteam中的 Mo

    2023年04月09日
    浏览(42)
  • 记录篇 - SSH无法连接服务器 - 22端口已放行,宝塔登不上等问题解决方案

    最近这两天购买了一个阿里云新加坡轻量服务器 2H 1G用来学习使用,但是购买之后,我也是折腾了半天时间。 一开始一切正常,远程连接、安装宝塔面板、然后进入宝塔、安装各种运行环境、网站部署完成后,然后就当我开心的访问了我的小网站的适合,好景不长。服务器

    2024年02月12日
    浏览(61)
  • SSH连接WSL2踩坑记录与增加端口转换规则,实现外网与WSL2的连接

    1. 在WSL里的操作 1.1 重装 openssh-server 1.2 修改配置信息 打开文件后,可以用搜索修改如下的信息 把上面的都改完好,就重启ssh服务 至止,WSL里的的操作基本上已经完成了 2. ssh连接 2.1 先测试一下本机的终端是否能连接到WSL的ssh 先打开 power shell 或者 cmd 如上图,提示输入密码

    2024年02月15日
    浏览(56)
  • uniapp富文本文字长按选中(用于复制,兼容H5、APP、小程序三端)

    方案:使用u-parse的selectable属性 u-parse :selectable=\\\"true\\\" :html=\\\"content\\\"/u-parse 注意:u-parse直接使用是不兼容小程序的,需要对u-parse进行改造: 1. 查看u-parse源码发现小程序走到以下逻辑:(没有传入selectable属性,需要将selectable传入trees组件) 改造前:  改造后: 2. 进入trees组件,

    2024年02月20日
    浏览(55)
  • 端口映射和端口转发

    端口转发和端口映射都是为了解决内网主机的端口无法在外部直接访问而衍生出来的技术,通过中间服务器进行中转,将内部的端口映射到公网IP上或者将内部端口转发到外部服务器,供用户或者自己来使用,那么他们的区别是什么呢? 顾名思义,就是将端口进行转发,具体

    2024年02月15日
    浏览(100)
  • vscode 端口转发实现端口映射,实现端口自由

    用vscode连接server进行开发, 是非常方便的,但很多时候,server的端口开放的很有限,那么就可以利用vscode进行端口映射   举一个应用场景: 先通过A利用vscode 连接B,然后再vscode 的port窗口进行端口转发,比如将22端口映射到A本地的5000, 然后再通过Host利用vscode连接A,利用端

    2024年02月16日
    浏览(37)
  • 网络端口映射和端口转发的区别和联系

    目     录 一、端口映射技术 1.1 原理 1.2 应用场景 1、远程访问 2、游戏主机 3、文件共享 4、监控视频共享 二、端口转发技术 2.1 原理 2.2 应用场景 1、网络负载均衡 2、网络安全 3、网络代理 三、端口映射和转发的实现方法 3.1 路由器配置 3.2 网络防火墙 四、端口映射和端口

    2024年01月18日
    浏览(43)
  • 比特彗星端口堵塞解决办法DMZ-端口转发-异常解决

    如果遇到比特彗星右下角显示黄灯,显示端口堵塞,可以在路由器中进行开启 端口转发 或者 DMZ (每个路由器说法有可能不一样) 如果只是一台设备进行端口转发,这样就可以完成了,或者使用简单的方法,开启路由器中的 DMZ 功能  DMZ功能可以将一个设备直接进行映射,比

    2024年02月04日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包