乐闻世界logo
搜索文章和话题

什么是 SSH 隧道和跳板机?如何配置多级跳板连接?

3月6日 21:31

SSH 隧道是一种通过 SSH 协议创建加密通道的技术,可以在不安全的网络中安全地传输数据。跳板机(Jump Host)是 SSH 隧道的重要应用场景。

SSH 隧道原理

SSH 隧道利用 SSH 协议的加密特性,在客户端和服务器之间建立一条加密通道,所有通过该通道的数据都经过加密保护。

工作流程

  1. 客户端与 SSH 服务器建立加密连接
  2. 在加密通道上转发特定端口的流量
  3. 数据在传输过程中始终保持加密状态
  4. 到达目标后解密并转发到实际目的地

跳板机配置

1. ProxyJump(推荐方式)

SSH 7.3+ 版本支持 ProxyJump 选项,是最简单的跳板机配置方式。

bash
# 命令行方式 ssh -J jump-user@jump-host:22 target-user@target-host # 配置文件方式(~/.ssh/config) Host jump-host HostName jump.example.com User jump-user Host target-host HostName target.example.com User target-user ProxyJump jump-host

2. ProxyCommand(传统方式)

适用于旧版本 SSH。

bash
# 命令行方式 ssh -o ProxyCommand="ssh -W %h:%p jump-user@jump-host" target-user@target-host # 配置文件方式 Host target-host HostName target.example.com User target-user ProxyCommand ssh -W %h:%p jump-user@jump-host

3. 多级跳板

bash
# 两级跳板 ssh -J jump1@host1,jump2@host2 target@final-host # 配置文件方式 Host jump1 HostName host1.example.com User jump1 Host jump2 HostName host2.example.com User jump2 ProxyJump jump1 Host final HostName final.example.com User target ProxyJump jump2

实际应用场景

场景1:访问内网服务器

bash
# 通过公网跳板机访问内网服务器 ssh -J bastion@bastion.example.com admin@internal-server

场景2:安全文件传输

bash
# 通过跳板机传输文件 scp -o ProxyJump="bastion@bastion.example.com" local-file admin@internal-server:/path/ # 或使用 rsync rsync -avz -e "ssh -J bastion@bastion.example.com" local-file admin@internal-server:/path/

场景3:数据库访问

bash
# 通过跳板机访问内网数据库 ssh -L 3306:db-server:3306 -J bastion@bastion.example.com user@bastion.example.com -N

高级配置

1. 组合端口转发和跳板机

bash
# 通过跳板机创建本地端口转发 ssh -L 8080:internal-web:80 -J bastion@bastion.example.com user@bastion.example.com -N

2. 使用 SSH 配置文件简化

bash
# ~/.ssh/config Host bastion HostName bastion.example.com User bastion IdentityFile ~/.ssh/bastion_key Host internal-web HostName 192.168.1.100 User webadmin ProxyJump bastion IdentityFile ~/.ssh/internal_key Host internal-db HostName 192.168.1.200 User dbadmin ProxyJump bastion IdentityFile ~/.ssh/internal_key

3. 密钥转发

bash
# 启用密钥转发,允许在跳板机上使用本地密钥 ssh -A -J bastion@bastion.example.com target@internal-server # 或在配置文件中设置 Host bastion ForwardAgent yes

安全最佳实践

1. 跳板机安全加固

bash
# /etc/ssh/sshd_config # 禁用密码认证 PasswordAuthentication no # 限制登录用户 AllowUsers bastion # 启用强制命令 ForceCommand /usr/local/bin/bastion-wrapper.sh

2. 使用堡垒机

  • 部署专门的堡垒机软件(如 Teleport、Bastillion)
  • 实现会话录制和审计
  • 集成多因素认证
  • 实施访问控制策略

3. 网络隔离

  • 跳板机位于 DMZ 区域
  • 内网服务器仅允许跳板机访问
  • 使用防火墙规则限制流量

4. 密钥管理

  • 为跳板机和目标服务器使用不同的密钥
  • 定期轮换密钥
  • 使用密码短语保护私钥
  • 限制密钥使用范围

故障排查

bash
# 详细调试信息 ssh -vvv -J jump@jump-host target@target-host # 测试跳板机连接 ssh jump@jump-host # 检查路由 traceroute target-host # 查看防火墙规则 iptables -L -n

性能优化

1. 连接复用

bash
# 在配置文件中启用连接复用 Host * ControlMaster auto ControlPath ~/.ssh/cm-%r@%h:%p ControlPersist 600

2. 压缩传输

bash
# 启用压缩 ssh -C -J jump@jump-host target@target-host

3. 选择加密算法

bash
# 使用更快的加密算法 ssh -c aes128-ctr -J jump@jump-host target@target-host

监控和审计

1. 日志记录

bash
# 记录所有 SSH 连接 LogLevel VERBOSE SyslogFacility AUTHPRIV

2. 会话录制

使用专门的堡垒机软件实现会话录制和回放功能。

3. 访问审计

定期审查 SSH 访问日志,监控异常活动。

标签:SSH