You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现单Second Hop会话的多用户Multihop SSH隧道?

多用户复用单Second Hop SSH会话的解决方案

针对共享user2会话数超限的问题,以下是几个可行的实现方案,核心思路是让所有用户复用同一个持久SSH连接到Second Hop,避免每个用户都新建独立会话:

方案一:SSH控制套接字(ControlMaster)复用会话

利用SSH原生的ControlMaster特性,维护一个持久的user2到Second Hop的连接,所有用户的后续请求都复用这个底层会话。

  1. 在First Hop上创建持久复用连接

    • 先确保user1家目录的.ssh文件夹权限合规:
      mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/config && chmod 600 ~/.ssh/config
      
    • 编辑~/.ssh/config,添加Second Hop的复用配置:
      Host second-hop
        HostName <SecondHop的IP/域名>
        User user2
        ControlMaster auto
        ControlPath ~/.ssh/control-%r@%h:%p.sock
        ControlPersist yes
        ServerAliveInterval 60
        ServerAliveCountMax 3
      
    • 编写expect脚本维持连接(自动输入密码并保活),命名为keep-second-hop-alive.exp:
      #!/usr/bin/expect -f
      spawn ssh second-hop
      expect "password:"
      send "<user2的密码>\r"
      # 每5分钟发送空命令保持会话活跃
      interact {
        timeout 300 { send "\r" }
      }
      
    • 赋予脚本执行权限并后台运行:
      chmod +x keep-second-hop-alive.exp
      nohup ./keep-second-hop-alive.exp > /dev/null 2>&1 &
      
  2. 修改用户登录的expect脚本
    将原脚本中ssh user2@SecondHop的命令替换为ssh second-hop,所有用户连接都会复用已创建的持久会话,不会在Second Hop上新增user2会话。

方案二:共享SOCKS代理转发

在First Hop上搭建基于单SSH会话的SOCKS代理,所有用户的Svr连接都通过该代理转发,复用底层的user2会话。

  1. 创建持久的SOCKS代理连接

    • 执行以下命令启动动态端口转发(后台运行),通过ControlMaster确保会话复用:
      ssh -D 1080 -M -S ~/.ssh/socks-proxy.sock -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user2@SecondHop
      
    • 同样可以用expect脚本自动输入密码并维持连接,将上述命令替换到之前的keep-alive脚本中即可。
  2. 修改用户登录脚本
    原脚本中连接Svr的部分改为通过SOCKS代理转发:

    #!/usr/bin/expect -f
    spawn ssh -o ProxyCommand="nc -x 127.0.0.1:1080 %h %p" <Svr用户名>@<Svr的IP>
    expect "<Svr的密码提示>"
    send "<Svr的密码>\r"
    interact
    
    • 若First Hop未安装nc,用root权限安装:Debian/Ubuntu执行apt install netcat-openbsd,RHEL/CentOS执行yum install nc。

关键注意事项

  • 确保First Hop上user1的.ssh文件夹权限为700,配置文件权限为600,否则SSH会拒绝使用控制套接字或配置。
  • 可添加简单监控脚本,定期检查持久连接是否存活,自动重启断开的连接。
  • 若user2或Svr的密码变更,需同步更新对应的expect脚本。

内容的提问来源于stack exchange,提问作者musca999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:20:07