返回顶部
首页 > 资讯 > 服务器 >SSH 端口转发
  • 137
分享到

SSH 端口转发

服务器ssh网络 2023-09-02 12:09:24 137人浏览 八月长安
摘要

ssh 端口转发 本文用于记录一下 SSH 端口转发功能的学习笔记,以做备忘,主要参考文章如下: 彻底搞懂SSH远程转发命令SSH端口转发An Illustrated Guide to SSH Tun

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://blog.csdn.net/weixin_44149294/article/details/126326474

--结束END--

本文标题: SSH 端口转发

本文链接: https://lsjlt.com/news/390742.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SSH 端口转发
    SSH 端口转发 本文用于记录一下 SSH 端口转发功能的学习笔记,以做备忘,主要参考文章如下: 彻底搞懂SSH远程转发命令SSH端口转发An Illustrated Guide to SSH Tun...
    99+
    2023-09-02
    服务器 ssh 网络
  • ssh端口转发怎么用
    这篇文章给大家分享的是有关ssh端口转发怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 本地端口转发首先在本地主机运行:格式ssh -L local-port:target-host...
    99+
    2023-06-22
  • linux ssh端口转发的三种方式
    ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。 这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自然而然的想到...
    99+
    2022-06-04
    linux ssh端口转发 ssh端口转发 linux ssh端口
  • ssh端口转发是什么?有什么用?
    目录前言1. 本地端口转发2. 远程端口转发3. 动态端口转发(SOCKS5)4. 本地端口转发 和 动态端口转发有啥区别5. 多级端口转发6. 总结前言 一开始我对 ssh 端口转发这个名词概念很模糊,听起来也很晦涩难...
    99+
    2022-06-04
    ssh端口转发详解 ssh端口转发作用
  • SSH端口转发实现内网穿透的实现
    我们局域网的机器能够访问外网,但是外网不能访问内网。因为内网访问互联网时候能确定外网的地址,外网却不能确定我们局域网内的具体地址。(ip地址有限)如果 我们在访问外网的时候,这个链接让他保持、不断,那么这个链接就相当于我...
    99+
    2022-06-04
    SSH 内网穿透 SSH端口转发内网穿透
  • Linux下的SSH端口转发配置的方法介绍
    本篇内容介绍了“Linux下的SSH端口转发配置的方法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通常情况下两个不同的网络之间总会开放...
    99+
    2023-06-13
  • SSH端口转发在Linux SysOps中的应用与实现
    SSH端口转发在Linux SysOps中有很多应用和实现方式。应用:1. 安全访问内部资源:通过SSH端口转发,可以安全地访问位于...
    99+
    2023-10-09
    Linux
  • 修改ssh端口
    修改SSH端口的主要原因是提高服务器的安全性。默认情况下,SSH服务运行在端口22上,因此攻击者和自动化脚本通常会针对此端口发起暴力破解攻击、密码猜测和其他恶意活动 一、打开SSH配置文件 编辑...
    99+
    2023-09-18
    ssh 服务器 linux
  • node.js实现端口转发
    本文为大家分享的是node.js端口转发实现代码,供大家参考,具体内容如下 #!/sbin/node var net = require('net'); function proxyPort(s...
    99+
    2022-06-04
    端口 node js
  • 基于Portfwd端口转发
    Portfwd是一款强大的端口转发工具,支持TCP,UDP,支持IPV4--IPV6的转换转发。 并且内置于meterpreter。 其中exe单版本源码如下: https://github.com/r...
    99+
    2024-04-02
  • Nginx 实现端口转发
    首先我们需要找到服务器部署的nginx的配置文件nginx.conf: 找到如下代码段实现配置端口转发 # nginx代理转发server { listen 80; server_name x.x.x.x; lo...
    99+
    2023-09-03
    nginx 运维 服务器
  • Nginx之TCP端口转发
    场景:很多企业业务都在云上,数据库端口基本不会对外开放。开发、测试人员经常会有通过外网去访问数据库的需求,此时我们可以利用nginx的端口转发功能来实现。 前提条件 :Nginx实现TCP端口转发,需要依赖stream模块,即编译安装时带 ...
    99+
    2023-08-31
    nginx tcp/ip 服务器
  • SSH隧道动态转发端口实现SOCKS代理 + HTTP代理(Privoxy)
    一、文章概要 实现效果:ssh连接远程服务器进行网络转发,本地服务连接网络代理环境:windows11/10需要工具:MobaXterm(ssh隧道端口转发),Privoxy(socks转http代理),一个云服务器  二、步骤 1. 用S...
    99+
    2023-09-20
    ssh 服务器 运维
  • Linux修改ssh端口
    记录:340 场景:在CentOS 7.9操作系统上,修改默认的ssh端口。ssh默认22端口,在实际开展业务中的生产环境中,通常会修改为指定端口号,以满足规范。 版本: 操作系统:CentOS 7.9 1.修改sshd_config配置文...
    99+
    2023-10-01
    修改ssh端口 ssh的默认端口 Linux的22端口 运维 防火墙
  • 修改ssh端口 linux
    第一种: 改SSH的默认端口(22) 修改配置文件:/etc/ssh/sshd_config 中的port 22 注意不要设置成已使用的端口。 第二种(生产环境推荐): 首先修改配置文件     vi /etc/ssh/ssh...
    99+
    2023-09-07
    linux ssh 服务器 端口
  • python-检测ssh端口
    #!/usr/bin/env python#-*- coding:utf-8 -*-import socket,sysfrom optparse import OptionParserstat_ok=0stat_warning=1stat_...
    99+
    2023-01-31
    端口 python ssh
  • 云服务器端口转发
    云服务器端口转发是指在一个云服务器上部署多个虚拟主机,每个虚拟主机都会分配相应的端口给其上运行的多个虚拟主机,以确保它们之间的通讯畅通无阻。 要在一个云服务器上部署多个虚拟主机,通常需要以下步骤: 选择一个云主机平台,并安装必要的服务和...
    99+
    2023-10-27
    端口 服务器
  • ubuntu怎么改ssh端口
    ubuntu改ssh端口的示例:打开终端命令行模式。输入以下命令打开sshd_config配置文件。vim /etc/ssh/sshd_config在文件内容中找到#Port 22,修改如下:# Package generated conf...
    99+
    2024-04-02
  • windows端口转发怎么配置
    Windows端口转发可以通过以下步骤进行配置:1. 打开“控制面板”,选择“系统和安全”,然后选择“Windows防火墙”。2. ...
    99+
    2023-06-12
    端口转发
  • linux端口转发怎么配置
    这篇文章主要介绍“linux端口转发怎么配置”,在日常操作中,相信很多人在linux端口转发怎么配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux端口转发怎么配置”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作