ssh反向隧道应用示例

现有A、B、C三台机器,A是一个局域网机器(可通公网),B是另一个局域网机器(可通公网),C是一个带公网IP的云机;
假设:

  • 机器 A 的用户名为 userA,A_IP 地址为 192.168.1.10
  • 机器 B 的用户名为 userB,B_IP 地址为 192.168.2.20
  • 机器 C 的用户名为 userC,C_IP 地址为 203.0.113.10

要实现机器 B 使用ssh连接到机器 A,并利用中间的机器 C 作为跳板,可以使用 SSH 反向隧道(Reverse SSH Tunnel)。以下是详细的步骤:

1. 在机器 A 上建立反向 SSH 隧道到机器 C

首先,需要在机器 A 上创建一个反向隧道,将 A 的 SSH 端口(默认是22端口)通过机器 C 进行转发。

执行以下命令:

ssh -fN -R 2222:localhost:22 userC@C_IP
  • 参数说明
    • -f:将 SSH 进程置于后台。
    • -N:不执行远程命令,仅进行端口转发。
    • -R 2222:localhost:22:将机器 C 上的 2222 端口转发到机器 A 的 22 端口。
    • userC@C_IP:机器 C 的用户名和机器 C IP地址。

注意

  • 确保机器 A 可以通过 SSH 登录到机器 C,推荐使用 SSH 密钥认证以简化连接过程。
  • 如果机器 A 和 C 位于不同的网络,确保机器 C 的防火墙允许外部连接到其 2222 端口。

2. 配置机器 C 的 SSH 服务

为了允许反向隧道的建立,需要确保机器 C 的 SSH 配置允许远程端口转发。

编辑机器 C 上的 SSH 配置文件 /etc/ssh/sshd_config,确保以下参数已启用:

GatewayPorts yes
  • GatewayPorts yes 允许其他机器(如 B)通过机器 C 的指定端口访问转发的服务。

保存配置后,重启 SSH 服务:

sudo systemctl restart sshd

或者根据不同的系统使用相应的命令。

3. 从机器 B 连接到机器 A 通过机器 C

现在,机器 B 可以通过连接到机器 C 的 2222 端口来访问机器 A 的 SSH 服务。

执行以下命令:

ssh -p 2222 userA@C_IP
  • 这个命令实际上会通过机器 C 的 2222 端口转发到机器 A 的 SSH 服务,实现从 B 到 A 的连接。

优化 SSH 配置(可选)

为了简化连接过程,可以在机器 B 上的 ~/.ssh/config 文件中添加以下配置:

Host A-via-C
    HostName C_IP
    Port 2222
    User userA

然后,只需使用以下命令即可连接到机器 A:

ssh A-via-C

4. 确保安全性

  • 限制端口访问:在机器 C 上,可以通过防火墙(如 iptablesufw)限制只有机器 B 可以访问 2222 端口,增强安全性。

    例如,使用 ufw

    sudo ufw allow from B_IP to any port 2222
    
  • 使用 SSH 密钥:确保在机器 A 和 C 之间,以及 B 和 C 之间使用 SSH 密钥认证,避免使用密码登录,提高安全性。

  • 监控和日志:定期检查 SSH 日志,确保没有异常的访问尝试。

示例总结

在机器 A 上执行

ssh -fN -R 2222:localhost:22 userC@203.0.113.10

在机器 B 上连接到机器 A

ssh -p 2222 userA@203.0.113.10

这样,机器 B 就可以通过机器 C 反向连接到机器 A 了。


注意:在实际操作中,请根据实际网络拓扑和安全策略调整端口号和访问权限。同时,确保所有涉及的机器的防火墙和安全组(如果在云环境中)允许必要的端口通信。

posted @ 2025-03-07 18:43  闹闹爸爸  阅读(117)  评论(0)    收藏  举报