ssh 端口转发

转载 2015年07月09日 20:18:15

原文  https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

https://www.v2ex.com/t/127124

3种方式

1.访问本地端口转发到远程端口
ssh -L [bind_address:]port:host:hostport user@ssh-server

本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过ssh的安全通道转发出去, 同时ssh服务器和 remotehost的 remoteport 端口建立连接.

这里有几个地方需要注意:
  1. SSH 端口转发是通过 SSH 连接建立起来的,我们必须保持这个 SSH 连接以使端口转发保持生效。一旦关闭了此连接,相应的端口转发也会随之关闭。
  2. 我们只能在建立 SSH 连接的同时创建端口转发,而不能给一个已经存在的 SSH 连接增加端口转发。
  3. 你可能会疑惑上面命令中的 <remote host> 为什么用 localhost,它指向的是哪台机器呢?在本例中,它指向 LdapServertHost 。我们为什么用 localhost 而不是 IP 地址或者主机名呢?其实这个取决于我们之前是如何限制 LDAP 只有本机才能访问。如果只允许 lookback 接口访问的话,那么自然就只有 localhost 或者 IP 为 127.0.0.1 才能访问了,而不能用真实 IP 或者主机名。
  4. 命令中的 <remote host> 和 <SSH hostname> 必须是同一台机器么?其实是不一定的,它们可以是两台不同的机器。我们在后面的例子里会详细阐述这点。
  5. 本地端口转发绑定的是 lookback 接口,只有 localhost 或者 127.0.0.1 才能使用本机的端口转发 , 其他机器发起的连接只会得到“ connection refused. ”。需要在本机的/etc/ssh/sshd_config 文件中设置GatewayPorts 为true,才允许其他机器共享这个本地端口转发
2. 远程端口转发到本地
ssh -R [bind_address:]port:host:hostport user@ssh-server
ssh服务器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过ssh安全通道转发出去, 同时本地主机和 host 的 hostport 端口建立连接. (此时本地端的host可以是localhost也可以是本地端可以访问的其它主机)
同1一样,ssh监听默认监听本机端口,需要在本机的/etc/ssh/sshd_config 文件中设置GatewayPorts 为true,才允许其他机器共享这个本地端口转发

3.动态端口转发
ssh -D localport user@ssh-server
工作原理是这样的, 本地机器上分配了一个 socket 侦听 localport 端口, 一旦这个端口上有了连接, 该连接就经过ssh安全通道转发出去, ssh服务器根据你本地地器程序访问的远程主机和端口进行转发出去. 目前支持 SOCKS协议, 将充当 SOCKS 服务器.(其实和-L参数原理差不多,只不过-L只能静态指定一个或者多个远程主机和端口,-D参数可以动态处理,不用人为事先指定,一般用来充当廉价vpn)

4.ssh一般在做隧道与端口转发时,一般还有其它参数配合。

-f ssh在后台运行,即认证之后,ssh退居后台

-T 不要分配tty终端

-N 不要在服务器执行命令

-C 压缩数据包

-i 指定认证密钥文件

-n 将 stdio 重定向到 /dev/null,与-f配合使用

-p 指定连接端口

-X Enables X11 forwarding.

-q 安静模式

5.
第三部分 其他类型的转发
动态转发实例分析
恩,动态转发,听上去很酷。当你看到这里时,有没有想过我们已经讨论过了本地转发,远程转发,但是前提都是要求有一个固定的应用服务端的端口号,例如前面例子中的 LDAP 服务端的 389 端口。那如果没有这个端口号怎么办?等等,什么样的应用会没有这个端口号呢?嗯,比如说用浏览器进行 Web 浏览,比如说 MSN 等等。
当我们在一个不安全的 WiFi 环境下上网,用 SSH 动态转发来保护我们的网页浏览及 MSN 信息无疑是十分必要的。让我们先来看一下动态转发的命令格式:
$ ssh -D <local port> <SSH Server>

例如:
$ ssh -D 7001 <SSH Server>
图 5. 动态端口转发
动态端口转发
似乎很简单,我们依然选择了 7001 作为本地的端口号,其实在这里 SSH 是创建了一个 SOCKS 代理服务。来看看帮助文档中对 -D 参数的描述:
-D port 
This works by allocating a socket to listen to port on the local 
side, and whenever a connection is made to this port, the con- 
nection is forwarded over the secure channel, and the applica- 
tion protocol is then used to determine where to connect to from 
the remote machine.  Currently the SOCKS4 and SOCKS5 protocols 
are supported, and ssh will act as a SOCKS server.  Only root 
can forward privileged ports.  Dynamic port forwardings can also 
be specified in the configuration file.

之后的使用就简单了,我们可以直接使用 localhost:7001 来作为正常的 SOCKS 代理来使用,直接在浏览器或 MSN 上设置即可。在 SSH Client 端无法访问的网站现在也都可以正常浏览。而这里需要值得注意的是,此时 SSH 所包护的范围只包括从浏览器端(SSH Client 端)到 SSH Server 端的连接,并不包含从 SSH Server 端 到目标网站的连接。如果后半截连接的安全不能得到充分的保证的话,这种方式仍不是合适的解决方案。
X 协议转发实例分析
好了,让我们来看最后一个例子 - X 协议转发。
我们日常工作当中,可能会经常会远程登录到 Linux/Unix/Solaris/HP 等机器上去做一些开发或者维护,也经常需要以 GUI 方式运行一些程序,比如要求图形化界面来安装 DB2/WebSphere 等等。这时候通常有两种选择来实现:VNC 或者 X 窗口,让我们来看看后者。
使用 X 窗口通常需要分别安装:X Client 和 X Server 。在本例中我们的 X Client 就是所访问的远程 Linux/Unix/Solaris/HP,而我们的 X Server 则是发起访问的本地机器(例如你面前正在使用的笔记本或台式机)。把 X Client 端的 X 窗口显示在 X Server 端需要先行在 X Client 端指定 X Server 的位置,命令格式如下:
export DISPLAY=<X Server IP>:<display #>.<virtual #>

例如:
export DISPLAY=myDesktop:1.0

然后直接运行 X 应用即可,X 窗口就会自动在我们的本地端打开。
一切运行正常,但是,这时候 IT 部门突然在远程 Linux/Unix/Solaris/HP 前面加了一道防火墙。非常不幸的是,X 协议并不在允许通过的列表之内。怎么办?只能使用 VNC 了么?不,其实只要使用了 SSH 端口转发即可通过,同时也对 X 通讯数据做了加密,真是一举两得。(当然,使用此方法前最好先咨询相关 IT 部门是否符合相应的安全条例,以免造成违规操作。)
建立命令也很简单,直接从本地机器(X Server 端)发起一个如下的 SSH 连接即可:
$ ssh -X <SSH Server>
图 5. X 转发
X 转发
建立连接之后就可以直接运行远程的 X 应用。注意建立 X 转发之后会自动设置 DISPLAY 环境变量,通常会被设置成localhost:10.0,我们无需也不应该在连接之后再进行修改此环境变量。

一个比较常见的场景是,我们的本地机器是 Windows 操作系统,这时可以选择开源的 XMing 来作为我们的 XServer,而 SSH Client 则可以任意选择了,例如 PuTTY,Cygwin 均可以配置 访问 SSH 的同时建立 X 转发。

相关文章推荐

基于SSH端口转发

  • 2013-03-04 11:10
  • 237KB
  • 下载

SSH原理与运用(二):远程操作与端口转发

七、远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。 上一节的操作,就是一个例子:   $ ssh user@host 'mkdir -p .ssh &...

SSH隧道端口转发及内网穿透

大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多。不过其实除了这个功能,它的隧道转发功能更是吸引人。下面是个人根据自己的需求以及在网上查找的资料配合自己的实际操作所得到的一些心得。 ...

SSH原理与运用(2):远程操作与端口转发

接着前一次的文章,继续介绍SSH的用法。 (Image credit: Tony Narlock) 七、远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行...

SSH隧道与端口转发及内网穿透

SSH隧道与端口转发及内网穿透 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写程序,查数据,下电影...
  • yatere
  • yatere
  • 2012-07-29 12:45
  • 1489

Linux下的SSH端口转发

通常情况下两个不同的网络之间总会开放某一些特定的端口用于通讯使用,而SSH所使用的22端口通常就在开放之列。基于SSH的端口转发就是利用SSH作为中间的代理,达到绕过两个网络之间的限制,顺利的进行任意...

实战 SSH 端口转发

第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能...

SSH 端口转发

From: http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

SSH端口转发的理解(精华)

http://loopholes.blog.51cto.com/9445813/1621786 之前一直在纠结什么是端口转发,现在写下自己的理解,并试验本地端口,远程端口转发 SSH(Se...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)