SSH 端口转发与跳板机
本文介绍 SSH 协议中三种端口转发,本地端口转发、远程端口转发、动态端口转发,以及 SSH 对跳板机登录的支持

# SSH 端口转发与跳板机

# 端口转发

# 什么是端口转发

SSH(Secure Shell),一种安全通道协议,主要用来实现字符界面的远程访问功能

除了基本的远程登录命令行,端口转发也是 SSH 的重要功能

端口转发用来在客户端和服务器之间建立一个加密的 SSH 连接,通过该连接来把本地流量转发到服务器端,或者把服务器端流量转发到本地

端口转发有三种,本地端口转发、远程端口转发、动态端口转发

# 本地端口转发

将对本地端口的访问通过 SSH 转发到目标主机的目标端口,目标主机是服务器可访问的主机

ssh -L [绑定地址:]<本地端口>:<目标主机>:<目标端口> <用户名>@<服务器>

本地端口转发是为了把远程服务拉到本地来访问

应用场景:服务器安装了 MySQL 服务,但没有开放 3306 端口,可以通过本地端口转发,实现本地开发环境访问服务器 MySQL

ssh -L 13306:localhost:3306 user@server

将服务器能访问的 localhost:3306,即服务器自身的 3306 端口,映射到本地的 13306 端口,本地开发时使用 localhost:13306来访问 MySQL

# 远程端口转发

将对服务器端口的访问通过 SSH 转发到目标主机的目标端口,目标主机是本地可访问的主机

ssh -R [绑定地址:]<服务器端口>:<目标主机>:<目标端口> <用户名>@<服务器>

远程端口转发是为了把本地服务推到远程去访问

应用场景:服务器安装了 Nginx 服务,但还没有部署后端程序,如果希望通过服务器 IP 来访问到本地开发环境正在运行的后端程序,可以通过远程端口转发,实现服务器上 Nginx 对本地后端程序的访问

ssh -R 18080:localhost:8080 user@server

将本地能访问的 localhost:8080,即本机自身的 8080 端口,映射到服务器的 18080 端口,服务器 Nginx 可直接代理 localhost:18080来访问本地后端程序

# 动态端口转发

由服务器来代理本地端口的流量请求

ssh -D [绑定地址:]<本地端口> <用户名>@<服务器>

应用场景:由于安全策略不能访问一些站点时,可通过与代理服务器建立动态端口转发来达到访问的目的

ssh -D 10808 user@server

测试 curl 通过代理访问

curl --socks5 127.0.0.1:10808 https://baidu.com

操作系统或者浏览器也都有代理相关配置,配置为 socks5://127.0.0.1:10808 即可实现流量的代理

# 跳板机

# 什么是跳板机

在日常运维或开发工作中,由于安全策略或网络拓扑的限制,内网服务器并不会直接向外部暴露端口,导致本地环境无法直连。在企业内部常常会设立一种中间主机,专门负责连通互相隔离的网络环境,这种机器被称为跳板机(Jump Server)

通过 SSH 协议,我们可以先登录到跳板机,再在跳板机上登录目标主机进行操作,这种方式需要两次 SSH 命令,比较繁琐,实际上 SSH 协议提供了的更加便捷的方式来处理跳板机场景

# 通过本地端口转发

当然,可以通过本地端口转发,将目标主机的 SSH 端口映射到本地端口

ssh -L 2222:<目标主机>:22 user@jump-server

只要本地端口转发在后台保持,可随时直接 ssh user01@localhost -p 2222 登录目标主机

# 通过 ProxyJump

从 OpenSSH 7.3 版本开始,SSH 引入了一个新的参数 -J,该参数用于指定跳板机

ssh -J user@jump-server user01@<目标主机>

-J 指定跳板机为 jump-server,先登录到 jump-server,再通过 jump-server 访问目标主机

在配置文件 SSH config ~/.ssh/config 中配置

Host server01
  HostName <目标主机>
  User user01
  ProxyJump user@jump-server

后续直接通过 ssh server01 来通过跳板机登录目标主机

# 通过 ProxyCommand

在老版本的 SSH 客户端上需要使用 ProxyCommand 方式

ssh -o "ProxyCommand ssh -W %h:%p user@jump-server" user01@<目标主机>

-o "ProxyCommand" 选项指定一个自定义的命令来通过跳板机进行连接

ssh -W %h:%p 将目标主机%h 和端口 %p 转发给跳板机,然后通过跳板机建立与目标主机的连接

在配置文件 SSH config ~/.ssh/config 中配置

Host <目标主机>
  ProxyCommand ssh -q -W %h:%p user@jump-server

后续直接通过 ssh user01@<目标主机> 来通过跳板机登录目标主机

Comment here, be cool~

Copyright © 2020 CadeCode

Theme 2zh powered by VuePress

本页访问次数 0

Loading