批量拉起20001–25000 SSH隧道连接

批量建立这些隧道

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

# 配置部分
KEY="private_key_tunnel02"
USER="tunnel_user"
HOST="10.1.1.1"
SSH_PORT=2323
REMOTE_HOST="10.2.2.2"
REMOTE_PORT=5555

START_PORT=20001
END_PORT=25000

for PORT in $(seq $START_PORT $END_PORT); do
echo "建立隧道: 本地 $PORT -> $REMOTE_HOST:$REMOTE_PORT"
ssh -i "$KEY" \
-L ${PORT}:${REMOTE_HOST}:${REMOTE_PORT} \
${USER}@${HOST} -p $SSH_PORT \
-o ServerAliveInterval=30 -o ServerAliveCountMax=2 -o RekeyLimit=4G,2h \
-Nf
done

说明:

  • -N 不执行远程命令,只建隧道
  • -f 后台运行
  • seq 会从 20001 到 25000 依次建立隧道
  • 每条命令会独立生成一个 ssh 进程

⚠️ 注意事项:

  1. 5000 个隧道相当恐怖:

    • 每条隧道一个 TCP 连接 + 一个 sshd/ssh 客户端进程
    • 内核需要足够多的 file descriptors,要调高 ulimit -n(至少 > 10000)
    • SSH 服务端也要允许高并发连接,MaxSessionsMaxStartups 要调整
  2. 性能优化:

    • 可以考虑 多路复用ControlMaster/ControlPersist)而不是 5000 个独立进程,否则开销很大
    • 或者用 autossh 来保证断线重连
  3. 如果只是端口映射需求,可能 socat / frp / haproxy 更合适,比 5000 个 ssh 稳定很多。