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隧道端口转发脚本模板

  • 2015年11月25日 11:44
  • 725B
  • 下载

基于SSH端口转发

  • 2013年03月04日 11:10
  • 237KB
  • 下载

通过 SSH 实现 TCP / IP 隧道(端口转发)

对于 Secure Shell (SSH)[1] 这样的网络协议来说,其主要职责就是在终端模式下访问一个远程系统。因为 SSH 协议对传输数据进行了加密,所以通过它在远端系统执行命令是安全的。此外...

利用ssh的端口转发实现SOCKS5代理

SSH是一种安全的传输协议,用在连接服务器上比较多。不过其实除了这个功能,它的隧道转发功能更是吸引人。...

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

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

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

作者: 阮一峰 日期: 2011年12月23日 接着前一次的文章,继续介绍SSH的用法。 ======================================= ...
  • IT_YUAN
  • IT_YUAN
  • 2013年05月27日 21:57
  • 551

基于SSH端口转发透过网关实现安全通信

SSH通过网关实现端口转发 SSH通过网关实现端口转发 相比较与之前在两台虚拟机上通过SSH端口转发实现安全通信,本次实验在两台虚拟机之间加入了网关。 ...

SSH隧道——实现端口转发(临时用挺方便)

1、ssh端口转发? 有没有这种需求,我在家里需要访问公司的某个服务。或者公司网络管的严,不能随意访问某些网站。 ssh转发就能实现这样的需求。它能建立隧道,把数据包在内网和外网之间进行传递,减少防火...

Linux下的SSH端口转发

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

本机端口转发连接VMware虚拟机ssh

可以有两种方法实现,第一种:DNAT。第二种:用VMware自带的NAT。下面说第一种方法:一、本地链接共享给NAT网卡650) this.width=650;" src="../attachment...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ssh 端口转发
举报原因:
原因补充:

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