阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

ssh端口转发详解

498次阅读
没有评论

共计 4081 个字符,预计需要花费 11 分钟才能阅读完成。

ssh 是个多用途的工具,不仅可以远程登录,还可以搭建 socks 代理、进行内网穿透,这是利用它的端口转发功能来实现的。

所谓 ssh 端口转发,就是在 ssh 连接的基础上,指定 ssh client 或 ssh server 的某个端口作为源地址,所有发至该端口的数据包都会透过 ssh 连接被转发出去;至于转发的目标地址,既可以指定,也可以不指定,如果指定了目标地址,称为定向转发,如果不指定目标地址则称为动态转发:

  • 定向转发
    定向转发把数据包转发到指定的目标地址。目标地址不限定是 ssh client 或 ssh server,既可以是二者之一,也可以是二者以外的其他机器
  • 动态转发
    动态转发不指定目标地址,数据包转发的目的地是动态决定的

因为 ssh 端口转发是基于 ssh 连接的,所以如果 ssh 连接断开,那么设置好的端口转发也会随之停止。

在设置端口转发之前,必须确认 ssh 的端口转发功能是打开的。

怎样打开 ssh 的端口转发功能?

ssh 端口转发功能默认是打开的。控制它的开关叫做 AllowTcpForwarding,位于 ssh server 的配置文件 /etc/ssh/sshd_config 里:
    AllowTcpForwarding yes
如果修改的话需要重启 sshd 服务才会生效。

怎样设置端口转发?

设置端口转发之前要注意 iptables 设置,确保相应的端口未被屏蔽,如果嫌麻烦的话也可以临时禁用 iptables:
# service iptables stop

定向转发和动态转发的设置方法是不一样的,以下分别介绍。

设置定向转发

定向转发可以把一个 IP:Port 定向映射到另一个 IP:Port,源和目的都必须指定。源地址既可以是 ssh client 的某个端口,也可以是 ssh server 的某个端口:

  • 如果源地址是 ssh client 的某个端口,称为本地转发(Local Port Forwarding),发往 ssh client 指定端口的数据包会经过 ssh server 进行转发;
  • 如果源地址是 ssh server 的某个端口,则称为远程转发(Remote Port Forwarding),发往 ssh server 指定端口的数据包会经过 ssh client 进行转发.

ssh 端口转发详解

设置本地转发:

先看一下基本命令:

在 ssh client 上执行:
{ssh client}# ssh -g -N -f -o ServerAliveInterval=60 \
-L <local port>:<remote host>:<remote port> username@<ssh server>
参数的含义在后面有解释。

我们以下面的示意图为例:你想 telnet 连接 {remote host},但是无法直达,你只能直接连接 ssh client,于是试图通过{ssh client} 到{ssh server}这条通道中转:

{you} — {ssh client} — {ssh server} — {remote host}

我们要做的是在 {ssh client} 上执行以下命令:

{ssh client} # ssh -g -L 2323:<remote-host>:23 username@<ssh-server>

输入口令之后,就跟普通的 ssh 登录一样,我们进入了 shell,在 shell 中可以正常操作,不同之处是,它同时还把 {ssh client} 的 2323 端口映射到了{remote host} 的 23 端口——亦即 telnet 端口,此后执行”telnet <ssh client> 2323″就相当于”telnet <remote-host>”,只要 shell 不退出,这个定向转发就一直有效。

  • 注 1:如果以上命令不加”-g”选项,那么 SSH Client 上的监听端口 2323 会绑定在 127.0.0.1 上,意味着只有 SSH Client 自己才能连上。加上”-g”选项之后,SSH Client 才允许网络上其他机器连接 2323 端口。
  • 注 2:以上命令会生成一个 shell,有时候并不符合我们的需要,因为多数时候我们只想要一个端口转发功能,挂一个 shell 是个累赘,而且 shell 一退出,端口转发也停了。这就是为什么我们需要”-N -f”选项的原因:
    -N 告诉 ssh client,这个连接不需要执行任何命令,仅做端口转发
    -f 告诉 ssh client 在后台运行
  • 注 3:为了避免长时间空闲导致 ssh 连接被断开,我们可以加上”-o ServerAliveInterval=60″选项,每 60 秒向 ssh server 发送心跳信号。还有一个 TCPKeepAlive 选项的作用是类似的,但是不如 ServerAliveInterval 好,因为 TCPKeepAlive 在 TCP 层工作,发送空的 TCP ACK packet,有可能会被防火墙丢弃;而 ServerAliveInterval 在 SSH 层工作,发送真正的数据包,更可靠些。
  • 如果不是以 root 身份设置端口转发的话,转发端口只能使用大于 1024 的端口号。
设置远程转发:

先看一下基本命令,分为两部分:

在 ssh server 上:
编辑 /etc/ssh/sshd_config,设置以下内容然后重启 sshd 服务
    GatewayPorts yes
在 ssh client 上执行:
{ssh client}# ssh -f -N -o ServerAliveInterval=60 \
-R <ssh server port>:<remote host>:<remote port> username@<ssh server>

这次的实例如下所示,你想用 telnet 连接 {remote host},但是无法直达,于是试图通过{ssh server} 到{ssh client}这条通道中转,注意与前面介绍的本地转发的不同之处是,本地转发的案例中你只能直接连接到 ssh client,而这里你只能直接连到 ssh server:

{you} — {ssh server} — {ssh client} — {remote host}

我们要做的是在 {ssh client} 上执行以下命令:

{ssh client} # ssh -f -N -R 2323:<remote-host>:23 username@<ssh-server>

输入口令之后,{ssh server}的 2323 端口映射到了 {remote host} 的 23 端口——亦即 telnet 端口,此后执行”telnet <ssh server> 2323″就相当于”telnet <remote-host>”。

本地转发与远程转发的区别与适用场景

定向转发(包括本地转发和远程转发)通常用于内网穿透,本地转发和远程转发的区别就在于监听端口是开在 ssh client 上还是 ssh server 上。常见的使用场景是:

  • 如果 ssh client 在内网里面,ssh server 在 Internet 上,你想让 Internet 上的机器穿进内网之中,那就使用远程转发;
  • 如果 ssh server 在内网里面,ssh client 在外面,你想穿进内网就应该使用本地转发。
设置动态转发

定向转发(包括本地转发和远程转发)的局限性是必须指定某个目标地址,如果我们需要借助一台中间服务器访问很多目标地址,一个一个地定向转发显然不是好办法,这时我们要用的是 ssh 动态端口转发,它相当于建立一个 SOCKS 服务器。

先看一下基本命令:

在 ssh client 上执行:
{ssh client}# ssh -f -N -o ServerAliveInterval=60 \
-D <ssh client port> username@<ssh server>

实际使用时有两种常见场景:

  • 你把自己的机器 (127.0.0.1) 当作 sock5 代理服务器:
    {you / 
    ssh client} — {ssh server} — {other hosts}

命令如下:

{ssh client} # ssh -f -N -D 1080 username@<ssh-server>

这种情况下,我们得到的 socks5 代理服务器是:127.0.0.1:1080,仅供 ssh client 自己使用。
然后你就可以在浏览器中或其他支持 socks5 代理的软件中进行设置。

  • ssh client 和 ssh server 是同一台机器,并充当 socks5 代理:
    {you}
     — {ssh client / ssh server} — {other hosts}

命令如下:

{ssh client} # ssh -f -N -g -D 1080 username@127.0.0.1

这种情况下,我们得到的 socks5 代理服务器是:
{ssh client IP}:1080,可供网络上其他机器使用,只要能连接 ssh client 即可。

通过 SSH 建立的 SOCKS 服务器使用的是 SOCKS5 协议,在为应用程序设置 SOCKS 代理的时候要注意。

下面关于 SSH 相关的文章您也可能喜欢,不妨参考下:

Ubuntu 下配置 SSH 服务全过程及问题解决 http://www.linuxidc.com/Linux/2011-09/42775.htm

Ubuntu 14.04 下安装 Samba 及 SSH 服务端的方法 http://www.linuxidc.com/Linux/2015-01/111971.htm

SSH 服务远程访问 Linux 服务器登陆慢 http://www.linuxidc.com/Linux/2011-08/39742.htm

提高 Ubuntu 的 SSH 登陆认证速度的办法 http://www.linuxidc.com/Linux/2014-09/106810.htm

开启 SSH 服务让 Android 手机远程访问 Ubuntu 14.04  http://www.linuxidc.com/Linux/2014-09/106809.htm

如何为 Linux 系统中的 SSH 添加双重认证 http://www.linuxidc.com/Linux/2014-08/105998.htm

在 Linux 中为非 SSH 用户配置 SFTP 环境 http://www.linuxidc.com/Linux/2014-08/105865.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-01/127868.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4081字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7962961
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...