sshd - TuPengXiong/TuPengXiong.github.io GitHub Wiki

SSH隧道

如果远程服务器上正在运行的sshd,那么就有可能通过ssh来“隧道连通”某些服务。这个功能也许很有用,例如可对POP或者SMTP连接进行加密,即使该软件不直接支持加密通信。隧道是使用端口转发来创建客户端和服务器之间的连接。 客户端软件必须能够指定一个非标准的端口来连接,才能令其正常工作。

-L option, which allow the user to forward connections from local to remote
-R option, which allow the user to forward connections from remote to local
-D option, which permits dynamic port forwarding
-f option, which instructs ssh to put itself in the background after authentication. 
-g option, which permits other hosts to use port forwards

使用语法和基本范例:

语法格式:[ -D | -L | -R ]

    [ bind_address: ]  port     [ : host : hostport ]

-D [bind_address:]port 动态正向代理转发

-L [bind_address:]port:host:hostport 本地正向转发

-R [bind_address:]port:host:hostport 远端反向转发

注意: 请指定大于1024的监听端口,在Linux系统只有root才有权限指定小于1024的端口。

其他常用参数: -f Requests ssh to go to background just before command execution. -g Allows remote hosts to connect to local forwarded ports. -N Do not execute a remote command. 转发端口专用参数(protocol version 2 only).


转发到远端:ssh -C -f -N -g -L 本地端口:目标IP:目标端口 用户名@目标IP

转发到本地:ssh -C -f -N -g –R 本地端口:目标IP:目标端口 用户名@目标IP

ssh -C -f -N -g -D listen_port user@Tunnel_Host

-C:压缩数据传输。

-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机。

-N :不执行脚本或命令,通常与-f连用。

-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。

-L 本地端口:目标IP:目标端口

将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R 本地端口:目标IP:目标端口

将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport


简单用例:

  • 将发往本机的80端口访问转发到106.15.93.50的8080端口
ssh -C -f -N -g -L 80:106.15.93.50:8080  [email protected]
  • 将发往106.15.93.50的8080访问转发到本机的80端口
ssh -C -f -N -g -R 80:106.15.93.50:8080  [email protected]
  • 远程管理服务器上的MySQL,那么使用下面命令
ssh -L 3306:127.0.0.1:3306   [email protected]    -N  

tip: 运行这个命令之后,ssh将会自动将服务器的3306映射到本机的3306端口, 我们就可以使用任意mysql客户端连接 localhost:3306即可访问到服务器上的MySQL了。

  • 一次同时映射多个端口
ssh -L 8888:106.15.93.50:80 \
-L 110:106.15.93.50:110 \ 
-L  25:106.15.93.50:25 \
[email protected] -N  

这个命令将自动把服务器的80,110,25端口映射到本机的8888,110和25端口