SSH 连接复用(ControlMaster)原理

技术笔记 · 2026-06-12 · AI 公司大全手记

登录一次,后面的命令全部「搭便车」—— 一条配置根治频繁部署被 fail2ban 误封,顺便让 ssh/scp 快得多。

这条接着上一篇「SSH 连接太频繁被封」:既然问题出在每次 ssh/scp 都是一次完整登录,那解法就是 —— 让多次命令共用同一条已登录的连接。这就是 SSH 自带的连接复用(ControlMaster)。

没复用时,每次 ssh 都在重复做什么

跑十次部署 = 这套流程完整重来十遍 = 服务器眼里的十次独立登录。fail2ban 一看「这 IP 几分钟登录几十次」,直接判定暴力破解。

复用的核心:留一条「主连接」,后续全部钻进去

第一条连接登录成功后不关闭,留着当主连接(master),并在本地开一个套接字文件当入口。之后再 ssh/scp 同一台机器,发现主连接活着,就不再握手、不再认证,直接在那条连接里开一个新「通道」(channel)跑命令:

没复用:  [握手+认证] 命令1   [握手+认证] 命令2   [握手+认证] 命令3   ← 3 次登录
复用:    [握手+认证] ──┬── 命令1
                       ├── 命令2     ← 1 次登录,3 条命令共用
                       └── 命令3

关键在于 SSH 协议本身就支持「一条连接里跑多个通道」(端口转发、命令、sftp 本就共存),ControlMaster 只是把这个能力开放给多次独立的 ssh 命令共享。

配置(写进 ~/.ssh/config)

Host myserver
    HostName 服务器IP
    User root
    ControlMaster auto                    # 有主连接就复用,没有就建一条
    ControlPath ~/.ssh/sockets/%r@%h:%p   # 套接字文件位置(每台机器一个)
    ControlPersist 10m                    # 闲置后再保留 10 分钟,期间继续免登录

(~/.ssh/sockets 目录需先创建并 chmod 700)

效果

#运维#SSH#ControlMaster