SSH 管道 - 使用SSH进行端口转发

本文翻译自:SSH Tunnel – Port Forwarding With SSHweb

SSH 有不少功能,SSH 管道就是其中一个。SSH管道是两台机器间的安全链接,常常被称为“SSH隧道”,或者“端口转发”。浏览器

使用SSH,咱们能够绑定本地计算机的指定端口到远程计算机上的指定端口。这将在这些机器之间建立加密的SSH 管道,并容许经过本地主机套接字地址直接与远程主机通讯。咱们可使用SSH管道来保护不安全的链接或绕过防火墙的不一样限制。安全

在咱们建立咱们的第一个SSH管道以前,你能够在你机器上的命令行下输入 “ssh” 命令来测试是否已经安装了SSH。若是你运行的是CentOS 6 迷你版本的系统,那么你可能须要安装 openssh-clients 软件包(Ubuntu 用户须要安装 openssh-client 软件包)。服务器

这里有三种类型的端口转发,以及使用SSH管道的三种方式:网络

  • 本地端口转发(容许经过中间SSH服务器,从本地套接字地址访问目的套接字地址)app

  • 远程端口转发(容许经过中间SSH服务器套接字地址,从远程位置访问localsocket地址)ssh

  • 动态端口转发(SOCKS代理服务器 - 在本文中不涉及详细信息!)socket

我天天都使用“SSH管道”(本地端口转发),由于个人一个客户的环境被设计为只能在SSH服务的22端口上访问工做站的Linux服务器。全部其余基础设施设备都经过这个工做站才能访问,因此使用SSH管道是直接访问不一样服务的最佳路径。测试

SSH 管道 - 本地端口转发

本地端口转发,您能够从本地机器链接到远程计算机,即便你不能经过本地机器直接链接到远程机器。为了达到这个目的,你须要一个能够经过SSH访问的中间服务器,而且这个服务器能够访问这些远程的机器。这个中间服务器能够驻留在您的本地网络内,并受到不一样的防火墙策略影响或者是在你的本地网络以外。加密

例子 #1:

咱们能够经过SSH的22端口访问一个工做站机器(用户名:wsuser,主机名:workstation),工做站机器的后面是一个应用服务器(主机名:appserver),在8080端口上运行着Apache Tomcat。咱们不能经过本地机器在8080端口上访问这个Apache Tomcat的管理员页面,可是这个工做站机器能够访问Apache Tomcat 网页的8080端口。所以,咱们能够建立一个SSH 管道,经过这个工做站,把咱们本地机器的本地8080端口转发到这个应用服务器。

咱们能够在咱们的本地机器上运行下面的命令来实现这个需求:

ssh -f wsuser@workstation -L 8080:appserver:8080 -N

等到这个工做站机器的SSH 服务器认证成功后,链接就会被创建,当咱们在本地机器上打开浏览器,输入 http://localhost:8080 就能够访问到那个应用服务器的Apache Tomcat 网页。

例子 #2:

假设咱们的状况跟例子1同样,除了一个不一样,那就是在工做站机器( 用户名: wsuser, 主机名: workstation)和应用服务器(用户名: appuser, 主机名: appserver)之间有一个防火墙,只容许经过SSH在22端口上从工做站机器访问应用服务器,意味着工做站机器不能直接访问Apache Tomcat 的8080端口。

还有一种从本地机器访问Apache Tomcat 管理员网页的方法,可是咱们须要经过SSH进行两跳。

  1. SSH 链接到工做站机器

    ssh wsuser@workstation

  2. 当链接到工做站机器,经过SSH,把8080端口转发到应用服务器

    ssh -f appuser@appserver -L 8080:localhost:8080 -N

  3. 下一步须要经过SSH,把本地机器的8080端口转发到工做站机器

    ssh -f wsuser@workstation -L 8080:localhost:8080 -N

瞧,当咱们在本地机器上打开浏览器,输入 http://localhost:8080 就能够访问到那个应用服务器的Apache Tomcat 网页了。

SSH 管道 - 远程端口转发

远程端口转发的实现与本地端口转发的实现同样。经过本地端口转发,咱们可使用一个有SSH服务的中间机器,从本地访问远程的机器。而经过远程端口转发,咱们可使用一个有SSH服务的中间机器,从远程访问本地机器。固然,为了实现这个,咱们须要经过SSH链接到一个中间机器。当咱们没有路由器的管理权限,不能在路由器级别上配置端口转发时,远程端口转发就显得很是有用,SSH管道就能够完成这种伎俩。

在咱们开始远程端口转发以前,咱们必须从新配置一个中间的机器上的SSH服务器来启用它。咱们必须编辑“/ etc/ SSH/ sshd_config文件”,把如下选项取消注释并更改成“yes”:

GatewayPorts yes

固然,咱们须要重启SSH服务。

例子 #1:

咱们在本地的8080端口上运行了Apache Tomcat 服务。咱们但愿某个朋友,不是在本地网络上的,能够在8080端口上访问咱们的Apache Tomcat管理员页面,帮助咱们配置或者部署新的应用程序。幸运的是,咱们有一个WebServer(用户名:myuser, 主机名:webserver),管理着一些网页,能够经过因特网访问的。同时也能够经过SSH,从咱们本地机器访问这个WebServer。咱们将配置一个远程端口转发,让咱们的朋友能够经过这个WebServer来访问运行在咱们本地机器上的Apahce Tomcat服务。

咱们能够经过下面的代码来实现:

ssh -f myuser@webserver -R 8080:localhost:8080 -N

瞧,咱们的朋友就能够经过WebServer 的8080端口来访问咱们本地机器上运行的Apache Tomcat 服务了。

正如咱们刚到的,这个命令与配置本地端口转发的命令惟一的不一样就是把 “-L” 变成了“-R”。

SSH 管道 - 动态端口转发

动态端口转发会把你的机器变成一个SOCKS代理。SOCKS代理能够代理全部经过网络或者因特网的请求。但程序一般必须被配置为使用SOCKS代理。 SOCKS代理能够用下面的命令开启:

ssh -C -D 1080 localmachine

其中,-c选项启用压缩,-D选项指定动态端口转发和1080是标准的SOCKS代理服务器的端口。下一步将是从新配置你的Web浏览器在端口1080使用127.0.0.1做为SOCKS代理。

使用动态端口转发和配置浏览器以使用本地SOCKS代理服务器将加密全部访问您的Web浏览器的流量,使您的链接安全。

SSH 管道 – GeekPeek 提示

若是你是在一个非默认端口上运行SSH服务器,运行SSH服务时,须要经过 “-p” 来指定端口。

ssh -f wsuser@workstation -p 22222 -L 8080:appserver:8080 -N

在进行本地端口转发或者远程端口转发以前,仔细检查那些已经在中间服务器上使用的端口,您可使用netstat命令和grep命令来检查要转发的端口。

netstat -anp |grep 8080

不要忘了在进行远程端口转发以前,从新配置SSH 服务,已经重启SSH服务器。

GatewayPorts yes

“-f”选项要求SSH运行在后台,“-N”选项告诉SSH不要执行远程命令。若是你不想SSH进入后台,能够移除这两个选项。

请确保你的iptables的配置与你配置的端口转发规则兼容!

相关文章
相关标签/搜索