本网站相关文章:

Introduction

定义: SSH 在提供安全的 HTTP 传输之外, 还有很多额外的附属功能, 这里主要讲述 SSH 的隧道转发功能.

应用场景: 为了安全考虑, 一般 MYSQL 不会允许用户通过 user 和 password 直接连接远程 mysql 服务, 为了开发方便, 在 SSH 已经建立的白名单前提下进行连接.基于 SSH 的隧道进行 MySQL 连接, 利用隧道来实现远程登录和私密传输, 能够在确保远程服务器 MYSQL 连接安全的前提下进行 MYSQL 连接, 这是一个建立在 SSH 连接之上的 Mysql Client 连接.

端口转发配置: 禁止 SSH 进行端口转发工作, 编辑/etc/ssh/sshd_config文件, 配置 AllowTcpForwarding no.

Command

选项:

1
2
3
4
5
6
7
8
9
10
-f            认证并建立port forwarding立刻转入后台
-N 不执行脚本或者命令, 常常只登陆脚本, 常常与-f连用
-C 压缩数据, Enable compression
-P 使用一个非特权端口进行连接
-p port 指定某一个特权端口
-L <local-port>:<proxy-host>:<proxy-port> 将客户机的port端口数据转发到远端指定机器的端口上
-R <local-port>:<remote-host>:<remote-port> 将远程主机的port端口数据转发到host主机指定的hostport上.
-g 允许远程主机连接到建立的转发端口上, 全双工模式
-D 指定一个本地机器动态数据转发端口, 用于SOCKS4

命令格式: ssh -fCPN –L <local-port>:<proxy-host>:<remote-port> <remote-user>@<remote-ip>

下面有必要对整个过程中各个机器做一个简单的了解:

  • local-port: 本地主机端口, 根据该端口进行基于 SSH 之上的数据传输操作
  • proxy-host: 在远程隧道中, 这是一台跳板机, 基于该 host 连接最终的 remote-host, 常常是 127.0.0.1
  • remote-port: 与本地主机 local-port 映射的远程主机端口

端口转发分类

动态端口转发

功能: 允许通过配置一个本地端口, 利用隧道, 将数据转发到远端机器以及其子网络的所有服务, 基于 SOCKS 协议, 又称为 Socks 代理

格式: ssh -D [bind_address:]port [remote_user@remote_address]

参数说明:

  • bind_address: 绑定的 IP 地址, 默认为回环地址
  • port: 本地绑定的端口
  • remote_user: 代理服务器用户名
  • remote_address: 代理服务器 IP 地址

例如, 对于如下网络拓扑, dynamic-port,
在配置完动态端口转发之后, 就可以通过如下 socks5 命令访问 C 机器上的所有服务 SOCKS5 localhost:8080,怎么指定服务端口?

本地端口转发

功能: 将一个远程机器(跳板机)能够访问到的特定(注意同远程端口转发区别,只有一个端口)的 remote-host/remote-port, 映射到本地 local-port.

格式: ssh -L [bind_address:]port:host:hostport [remote-user@remote-address]

参数说明:

  • bind_address: 绑定的 IP 地址(对于多网卡主机而言), 默认为 127.0.0.1, 如果为空值/*, 则默认绑定所有地址
  • port: 本地绑定的端口
  • host: 数据包转发目标地址的 IP, 如果目标主机和 SSH Server 为同一台主机, 则参数设置为 127.0.0.1, 这点极重要
  • hostport: 数据包转发目标端口

例如, 对于如下网络拓扑, local-port,
在配置完本地端口转发之后, 本地就能通过port进行类似 Client 的操作, 实际为 remote-user 连接 host 主机,
remote-user 作为一个中间代理, 负责数据的传递, 一个傀儡机器.

远端端口转发

功能: 用于单向阻隔的内网环境, 例如 NAT, 网络防火墙, 通过设置远端端口转发, 让服务器可以访问内网服务, 一个内应.

格式: ssh -R [bind-address:]port:host:hostport [remote-user@remote-address]

参数说明:

  • bind-address: 本地回环地址
  • port: 本地绑定的端口
  • host: 远程服务器地址
  • hostport: 远程服务器进行 connect client 的端口号
  • remote-user: 代理

远端端口转发的网络拓扑类似本地端口转发, 也是通过ssh tunnel来进行数据转发操作, 不过此时 proxy 机器作为一个
SSH 的客户端进行数据的传递工作, remote-port.

Example

Local Port Forward

目的: 使用mysql -uroot -h 127.0.0.1 -P 3305 -p连接远程 MYSQL 服务, 其中本地主机可以通过 SSH 连接 remote-host

命令: ssh -L 3305:127.0.0.1:3306 test@bamboo.com -NPCf

调试: 如果发生错误, 使用 ssh -v 来调试, 并查看输出, 例如: ssh -v -L 3304:127.0.0.1:3306 test@bamboo.com -NPCf

参考:

ssh 端口转发