ssh-隧道转发功能以及应用
本网站相关文章:
- 远程自动化工具
- ssh 基本安装和配置
- ssh 隧道转发功能以及应用
- ssh 代理转发介绍及应用场景
- ssh 代理中使用 https 以及二级代理的介绍
- ssh 数字证书生成以及 https 原理介绍
- ftp 安装,原理,配置
- ssh 远程执行命令和 bash 工作模式
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 | -f 认证并建立port forwarding立刻转入后台 |
命令格式: 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 地址
例如, 对于如下网络拓扑, ,
在配置完动态端口转发
之后, 就可以通过如下 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: 数据包转发目标端口
例如, 对于如下网络拓扑, ,
在配置完本地端口转发
之后, 本地就能通过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 的客户端进行数据的传递工作, .
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
参考: