SSH 端口转发教程

栏目: 服务器 · 发布时间: 3年前

内容简介:对于开发者来说,ssh 是一个必备的工具,用来登录服务器。但是,它还有一大用途,就是作为加密通信的中介,充当两台服务器之间的通信加密跳板。这个功能称为端口转发(port forwarding),又称 ssh 隧道(tunnel)。下面就是端口转发的简单介绍。如果你还不熟悉 ssh 的基本用法,可以先阅读

SSH 端口转发教程

对于开发者来说,ssh 是一个必备的工具,用来登录服务器。

但是,它还有一大用途,就是作为加密通信的中介,充当两台服务器之间的通信加密跳板。这个功能称为端口转发(port forwarding),又称 ssh 隧道(tunnel)。

下面就是端口转发的简单介绍。如果你还不熟悉 ssh 的基本用法,可以先阅读 《SSH 入门教程》

一、用法

ssh 作为数据通信的加密跳板,有多种使用场景。ssh 本身支持三种用法。

1.1 动态转发

第一种场景是,访问所有外部网站,都要通过 ssh 中介。

这时就要把本地端口绑定到 ssh 跳板机。至于 ssh 跳板机要去访问哪一个网站,完全是动态的,所以叫做动态转发。

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

上面命令中, -D 表示动态转发, local-port 是本地端口, tunnel-host 是 ssh 跳板机, -N 表示只进行端口转发,不登录远程 Shell。

举例来说,如果本地端口是 2121 ,那么实际命令就是下面这样。

$ ssh -D 2121 tunnel-host -N

注意,这种转发采用了 SOCKS5 协议。访问外部网站时,需要把 HTTP 请求转成 SOCKS5 协议,才能把本地端口的请求转发出去。

下面是 ssh 隧道建立后的一个使用实例。

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

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

1.2 本地转发

第二种场景是,只针对特定网站打开 ssh 隧道。这叫做“本地转发”。

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

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

举例来说,在本地 2121 端口建立 ssh 隧道,访问 www.example.com ,可以写成下面这样。

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

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

$ curl http://localhost:2121

注意,本地端口转发采用 HTTP 协议,不用转成 SOCKS5 协议。

1.3 远程转发

第三种场景比较特殊,主要针对内网的情况。本地计算机在外网,ssh 跳板机和目标服务器都在内网,而且本地计算机无法访问内网之中的跳板机,但是跳板机可以访问本机计算机。

由于本机无法访问跳板机,就无法从外网发起隧道,必须反过来,从跳板机发起隧道,这时就会用到远程端口转发。

$ ssh -R local-port:target-host:target-port local

上面的命令,首先需要注意,不是在本机执行的,而是在 ssh 跳板机执行的,从跳板机去连接本地计算机。 -R 参数表示远程端口转发, local-port 是本地计算机的端口, target-hosttarget-port 是目标服务器及其端口。

比如,跳板机执行下面的命令,绑定本地计算机的 2121 端口,去访问 www.example.com:80

$ ssh -R 2121:www.example.com:80 local -N

执行上面的命令以后,跳板机到本地计算机的隧道已经建立了。然后,就可以从本机访问目标服务器了,即在本机执行下面的命令。

$ curl http://localhost:2121

这种端口转发会远程绑定另一台机器的端口,所以叫做“远程端口转发”,也是采用 HTTP 协议。

二、实例:Email 加密下载

上面介绍了 ssh 端口转发的三种用法,下面就来看几个具体的实例。

公共场合的 WiFi,如果使用非加密的通信,是非常不安全的。假定我们在咖啡馆里面,需要从邮件服务器明文下载邮件,怎么办?一种解决方法就是,采用本地端口转发,在本地电脑与邮件服务器之间,建立 ssh 隧道。

$ ssh -L 2121:mail-server:143 tunnel-host -N

上面命令指定本地 2121 端口绑定 ssh 跳板机 tunnel-host ,跳板机连向邮件服务器的 143 端口。这样下载邮件,本地到 ssh 跳板机这一段,是完全加密的。当然,跳板机到邮件服务器的这一段,依然是明文的。

三、实例:简易 VPN

VPN 用来在外网与内网之间建立一条加密通道。内网的服务器不能从外网直接访问,必须通过一个跳板机,如果本机可以访问跳板机,就可以使用 ssh 本地转发,简单实现一个 VPN。

$ ssh -L 2080:corp-server:80 -L 2443:corp-server:443 tunnel-host -N

上面命令通过 ssh 跳板机,将本机的 2080 端口绑定内网服务器的 80 端口,本机的 2443 端口绑定内网服务器的 443 端口。

四、实例:两级跳板

端口转发可以有多级,比如新建两个 ssh 隧道,第一个隧道转发给第二个隧道,第二个隧道才能访问目标服务器。

首先,新建第一级隧道。

$ ssh -L 7999:localhost:2999 tunnel1-host

上面命令在本地 7999 端口与 tunnel1-host 之间建立一条隧道,隧道的出口是 tunnel1-hostlocalhost:2999 ,也就是 tunnel1-host 收到本机的请求以后,转发给本机的 2999 端口。

然后,在第一台跳板机执行下面的命令,新建第二级隧道。

$ ssh -L 2999:target-host:7999 tunnel2-host -N

上面命令将第一台跳板机 tunnel1-host2999 端口,通过第二台跳板机 tunnel2-host ,连接到目标服务器 target-host7999 端口。

最终效果就是,访问本机的 2999 端口,就会转发到 target-host2999 端口。

五、参考链接

(完)


以上所述就是小编给大家介绍的《SSH 端口转发教程》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精通Java并发编程(第2版)

精通Java并发编程(第2版)

[西] 哈维尔·费尔南德斯·冈萨雷斯 / 唐富年 / 人民邮电出版社 / 2018-10 / 89.00元

Java 提供了一套非常强大的并发API,可以轻松实现任何类型的并发应用程序。本书讲述Java 并发API 最重要的元素,包括执行器框架、Phaser 类、Fork/Join 框架、流API、并发数据结构、同步机制,并展示如何在实际开发中使用它们。此外,本书还介绍了设计并发应用程序的方法论、设计模式、实现良好并发应用程序的提示和技巧、测试并发应用程序的工具和方法,以及如何使用面向Java 虚拟机的......一起来看看 《精通Java并发编程(第2版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具